if (condition) { /* do something */ } else { /* do something */ } if (condition) /* do something */ else /* do something */
Мне сказали, что первая инстанция не была хорошей идеей. Я не знаю, действительно ли это в этом случае (или для второго); не сокращает ли количество на тип? Или это потому, что это просто беспорядок?
Лучшая практика – написать код, который другие могут легко читать и обновлять.
Ваша первая форма сомнительна, потому что она не соответствует формам, к которым привыкли большинство разработчиков PHP:
if (condition) { // code } else { // code } // ... or ... if (condition) { // code } else { // code } // ... or ... if (condition) { /* short code */ } else { /* short code */ } // ... or ... condition ? /* short code */ : /* short code */;
Обратите внимание, что это касается стандартной практики и не обязательно имеет смысл – это только то, что другие разработчики привыкли видеть.
Ваша вторая форма, что более важно, не так хороша, потому что это облегчает для другого программиста эту ошибку:
if (condition) // code A else // code B // code C (added by another programmer)
В этом примере другой программист добавил code C
, но забыл обернуть весь блок в фигурных скобках. Это вызовет проблемы. Вы можете защитить от этого, просто обернув ваши блоки if
и else
в фигурные скобки.
Мои предпочтения, если для согласованности … так:
if(...) { statement 1; statement 2; } else { statement 1; statement 2; }
ничем не отличается от:
if(...) { statement 1; } else { statement 1; }
Поэтому я всегда использую их, потому что он последователен, и он позволяет избежать проблем, забывая добавить их позже.
Однако другие люди будут смотреть на мой код и думать, что глупо вставлять {и}. У них есть свои причины, у меня есть мои … Мне нравятся мои причины больше, чем мне нравятся 🙂
Обычно нечитаемый код является плохой практикой. Единственная строка более эффективна при наборе текста и сохраняет номера строк, но возвращается к ней через год или пока вы сканируете ошибки, и это затруднит ее работу.
На мой взгляд, да, это плохая практика, чтобы иметь однострочные выражения.
На компьютере все равно (насколько я могу судить), но вы всегда должны писать свой код, как будто он будет поддерживаться серийным убийцей, который знает, где вы живете.
Удобочитаемый! Легко самоочевидно.
Проблема, которую я видел, – это разработчики, не признающие {} -less-if, если они добавляют код к одному из условий. Пример:
//before if(something) statement; //after if(something) statement; addedstatement;
Очевидно, что это не будет делать то, что они ожидают.
Вы когда-нибудь видели такой код на C или C ++?
/* Warning: bogus C code! */ if (some condition) if (another condition) do_something(fancy); else this_sucks(badluck);
Либо отступ неверен, либо программа глючит, потому что «else» всегда применяется к ближайшему «if», если вы не используете фигурные скобки.
(Давайте просто использовать python. Без скобок, просто чистые чистые пробелы.: P)
Для всех, кроме кратчайших, используйте скобки и их пространство соответственно. Вы хотите сделать это по нескольким причинам:
Труднее ошибиться в том, что происходит.
Его легче читать.
В языках с возможностями макрорасширения (например, C, C ++) отказ включить фигурные скобки приведет к запутывающим логическим ошибкам, когда макрос, содержащий несколько операторов, расширяется внутри неотвязанного if-else
.
Одним из основных преимуществ использования нескольких строк является простота отладки. Если у вас есть оператор if else на одной строке, и отладчик сообщает вам, что строка x взорвалась, сложнее определить, какая часть инструкции не удалась. Несколько строк также облегчают переход вашего кода с помощью отладчика.
Это две строки длиной, поэтому на самом деле не одна строка.
Нет ничего плохого в одной строке, if
s, когда код упрощает чтение.
Например, что-то вроде этого:
if (last_item) print ", and " else print ", "
намного лучше, чем
if (last_iem) { print ", and " } else { print ", " }
Это больше стиль кодирования, чем что-либо еще. Тем не менее, мое личное мнение заключается в том, что ваш второй пример потенциально весьма вреден. Достаточно легко случайно «добавить вторую строку в блок» на языках, где фигурные скобки являются единственным способом создания блоков. Но в PHP, где существует альтернативный синтаксис, это еще менее вероятно, чтобы вывести необходимые предупредительные сигналы:
if ($_GET["asdf"]==1): /* do something */ else: /* do something */ endif;
Правило большого пальца: если вы собираетесь поместить свое «сделать что-то» на отдельной строке, используйте фигурные скобки; если вы не собираетесь использовать фигурные скобки, поставьте их на одну строку!
Я видел так много стороннего кода с глупыми проблемами, что я предпочитаю использовать фигурные скобки все время. Тем не менее, я никогда не чувствовал себя хорошо
if(){} else (){}
Я использую if () {} в той же строке, когда это короткая инструкция, и она одна. Если есть другое, используйте long:
if(checkSomething) { //dosomething } else { //doanotherthing }
Это то, что я действительно помню из экзамена по трудоустройству некоторое время назад. Код был похож на следующий:
if (x == 0) x = 2; else print("x is: %d", x); // debugging! x = 4;
Большинство людей здесь могут обнаружить ошибку, но вы действительно можете заменить все, что захотите, в качестве «плохого кода», который был вставлен. Более тонкая ошибка возникает, когда у вас есть «старая версия» чего-то прокомментированного, а кто-то ее не комментирует, и вдруг второй оператор выходит за пределы блока.
В принципе, если это небольшое тестовое приложение, чтобы быстро изучить концепцию, я всегда поддерживаю скобки (и даже в тестовых приложениях, которые я обычно поддерживаю). Это просто не стоит головной боли позже, если я этого не сделаю, даже в 5-строчных методах.
Вы должны поместить «if» и «do something» на отдельные строки, чтобы сделать ваш код более дружественным к интерактивным отладчикам.
Если вы поместите оба значения «if» и «do something» в одну строку, вы не сможете установить точку останова только на строке «сделать что-то».