Я учился программированию на паскале, и знаете, когда я сел за пых, для меня было такое облегчение, что нигде нету THEN, NOT, BEGIN, END, разных неудобных какашек, что такой пустяк, как странная логика тернарного оператора не кажется чем-то плохим.
Кстати насчёт «что они курили» =) почитайте на досуге мою статью, а ещё лучше комментарии к ней. Поверьте, по сравнению с другими косяками, тернарный оператор — просто сама очевидность.
Какой результат будет у следующего выражения?
php -r «print true? 1: true? 2: true? 3: true? 4: 5;»
Мой ответ: результатом будет вывод текста в консоль. Теперь я надеюсь всё в порядке.
Естественно, неочевидно. Касаемо тернарного оператора — ассоциативность правая, так что нет ничего неожиданного в выводе «4» на экран. И по--моему правая ассоциативность — это одна из тех штук в php, которую сразу замечаешь при изучении тернарного оператора
Вы определитесь, что вы у меня спрашиваете
— результат print true? 1: true? 2: true? 3: true? 4: 5;
— результат true? 1: true? 2: true? 3: true? 4: 5;
?
Про ассоциативность я знаю, не переживайте, а вот знаете ли вы, как сработает выражение
print true? 1: true? 2: true? 3: true? 4: 5; я сильно сомневаюсь
Знаете, что плохо? Не то что, программист чего-то не знает. Все мы люди и всё в голове удерживать просто невозможно. Но если программист сталкивается с странным, на его взгляд поведением, и забивает болт, вместо того, чтобы разобраться как и почему такое происходит, предпочитая порасставлять скобки где, только можно, то это очень печально. Значит человеку это неинтересно, значит человек мыслит по шаблону «да ничё страшного не будет, подумаешь пятьсот лишних знаков и действий-пустышек, которые не несут ни какой смысловой нагрузки, серваку то похер». Как выше, справедливо отметили, обленились нынешние программисты. Я, конечно не застал то время (вернее застал, но в нежном возрасте), когда писалась Windows 3.1, когда ребята сидели ночами возле Dial-up и думали над каждой деталью программы, потому что ресурсы были крайне ограниченны и мощности не позволяли, но когда читаешь статьи о тех временах, чувствуешь себя говном.
Вот вы привели ссылку на приоритеты, покажите где на ней написано, что приоритет new выше чем у вызова функции?
1. Прошу прощения, не совсем понял, что вы имеете ввиду. Если вам не очень сложно, приведите, пожалуйста, пример.
2. Оператор new находится выше всех в таблице приоритетов, этого вам недостаточно? Я думаю, не нужно быть гением, чтобы интерпретировать этот факт, как "new, при наличии каких-либо других операторов, в любом случае будет исполнен первым".
3. С каких пор вызов функции является оператором?
Вы же не со школьниками в команде?
P.S. пусть школьник не обижаются, есть и исключения.
Я понимаю, что у PHP низкий порог вхождения, но это абсолютно не значит, что останавливаться в его изучении на пункте мануала «Цикл foreach()» и со словами «я всё знаю, я у мамы инженер» идти работать над каким-то проектом с такими же «специалистами» = это нормальное поведение.
Смысл программировать на языке, если человек его не знает? Стандарты нужны для структурирования кода и облегчения командной разработки, без ущерба коду. Если стандарт заставляет вас навешивать лишние скобки, заменять побитовые операции (в том примере это вполне нормально и правильно), переписывать любой механизм, который содержит что-либо, не описанное в книге «Как выучить пых за 24 часа, стать крутым программистом и написать фэйсбук», то, лично моё мнение, такой стандарт нужно сдать в утиль.
Лично я в самом первом блоке кода не вижу никакой гениальности, я вижу код без лишнего говна.
Несмотря на то, что оператор = имеет низший приоритет, чем большинство остальных операторов, PHP все равно позволяет использовать следующую конструкцию: if (!$a = foo()), которая присваивает переменной $a результат выполнения функции foo().
Не читайте выборочно мануал. Вот из-за такого подхода, многие php-шные говнокодеры до сих пор не знают, что если не объявлять массив, а просто присвоить необъявленной переменной элемент, то она автоматически станет массивом $a=[2];.
Хотя в больших проектах лучше всё-таки обнулять.
Вы там выше о стандартах говорите. Какие к чёрту стандарты, подучите базовые вещи.
Если для таких очевидных вещей скобки ставить, ну я не знаю…
Такой вот код тоже ревью не пройдёт?
if($error_type&E_PARSE)
return 'This is parse error';
Попросят заменить на
if($error_type==E_PARSE)
return 'This is parse error';
? А лучше, наверное вот так:
if(((($error_type===E_PARSE))))
return ((((string)'This is parse error'))); //Я не уверен, что это строка, пожалуй стоит проверять ещё и при каждом использовании функции
Кстати насчёт «что они курили» =) почитайте на досуге мою статью, а ещё лучше комментарии к ней. Поверьте, по сравнению с другими косяками, тернарный оператор — просто сама очевидность.
Мой ответ: результатом будет вывод текста в консоль. Теперь я надеюсь всё в порядке.
Естественно, неочевидно. Касаемо тернарного оператора — ассоциативность правая, так что нет ничего неожиданного в выводе «4» на экран. И по--моему правая ассоциативность — это одна из тех штук в php, которую сразу замечаешь при изучении тернарного оператора
— результат print true? 1: true? 2: true? 3: true? 4: 5;
— результат true? 1: true? 2: true? 3: true? 4: 5;
?
Про ассоциативность я знаю, не переживайте, а вот знаете ли вы, как сработает выражение
print true? 1: true? 2: true? 3: true? 4: 5; я сильно сомневаюсь
И?
Знаете, что плохо? Не то что, программист чего-то не знает. Все мы люди и всё в голове удерживать просто невозможно. Но если программист сталкивается с странным, на его взгляд поведением, и забивает болт, вместо того, чтобы разобраться как и почему такое происходит, предпочитая порасставлять скобки где, только можно, то это очень печально. Значит человеку это неинтересно, значит человек мыслит по шаблону «да ничё страшного не будет, подумаешь пятьсот лишних знаков и действий-пустышек, которые не несут ни какой смысловой нагрузки, серваку то похер». Как выше, справедливо отметили, обленились нынешние программисты. Я, конечно не застал то время (вернее застал, но в нежном возрасте), когда писалась Windows 3.1, когда ребята сидели ночами возле Dial-up и думали над каждой деталью программы, потому что ресурсы были крайне ограниченны и мощности не позволяли, но когда читаешь статьи о тех временах, чувствуешь себя говном.
1. Прошу прощения, не совсем понял, что вы имеете ввиду. Если вам не очень сложно, приведите, пожалуйста, пример.
2. Оператор new находится выше всех в таблице приоритетов, этого вам недостаточно? Я думаю, не нужно быть гением, чтобы интерпретировать этот факт, как "new, при наличии каких-либо других операторов, в любом случае будет исполнен первым".
3. С каких пор вызов функции является оператором?
Вы же не со школьниками в команде?
P.S. пусть школьник не обижаются, есть и исключения.
Я понимаю, что у PHP низкий порог вхождения, но это абсолютно не значит, что останавливаться в его изучении на пункте мануала «Цикл foreach()» и со словами «я всё знаю, я у мамы инженер» идти работать над каким-то проектом с такими же «специалистами» = это нормальное поведение.
Смысл программировать на языке, если человек его не знает? Стандарты нужны для структурирования кода и облегчения командной разработки, без ущерба коду. Если стандарт заставляет вас навешивать лишние скобки, заменять побитовые операции (в том примере это вполне нормально и правильно), переписывать любой механизм, который содержит что-либо, не описанное в книге «Как выучить пых за 24 часа, стать крутым программистом и написать фэйсбук», то, лично моё мнение, такой стандарт нужно сдать в утиль.
Лично я в самом первом блоке кода не вижу никакой гениальности, я вижу код без лишнего говна.
Код if (!$bar = foo()) работает как if (!$bar = foo()) забудьте о скобках. Вам самому глаза не режет?
Давайте попробуем ещё раз.
www.php.net/manual/ru/language.operators.precedence.php
Специально для вас под табличкой примечание (напишу на русском):
Не читайте выборочно мануал. Вот из-за такого подхода, многие php-шные говнокодеры до сих пор не знают, что если не объявлять массив, а просто присвоить необъявленной переменной элемент, то она автоматически станет массивом $a=[2];.
Хотя в больших проектах лучше всё-таки обнулять.
Вы там выше о стандартах говорите. Какие к чёрту стандарты, подучите базовые вещи.
Вот это, наверное, просто так писали:
www.php.net/manual/en/language.operators.precedence.php
Если для таких очевидных вещей скобки ставить, ну я не знаю…
Такой вот код тоже ревью не пройдёт?
Попросят заменить на
? А лучше, наверное вот так:
чтобы наверняка.
Ну и что это за скобочная паранойя?
Простите за сарказм.
самый волнующий момент