Какой стиль кодирования вы используете для тройного оператора?

Я держу его в одной строке, если он короткий. В последнее время я использую этот стиль для более длинных или вложенных тернарных выражений оператора. Надуманный пример:

$value = ( $a == $b ) ? 'true value # 1' : ( $a == $c ) ? 'true value # 2' : 'false value'; 

Лично, какой стиль вы используете или найдете наиболее читаемым?

Изменить: (когда использовать тернарный оператор)

Обычно я избегаю использовать более двух уровней глубокого троичного оператора. Я предпочитаю двухуровневый тернарный оператор более двух уровней if-else, когда я повторяю переменные в скриптах PHP-скриптов.

    Тройной оператор, как правило, следует избегать, но эта форма может быть вполне читаемой:

      result = (foo == bar) ? result1 : (foo == baz) ? result2 : (foo == qux) ? result3 : (foo == quux) ? result4 : fail_result; 

    Таким образом, состояние и результат сохраняются вместе в одной строке, и довольно легко сэкономить и понять, что происходит.

    Я стараюсь не использовать тернарный оператор для записи вложенных условий. Это бросает вызов читабельности и не дает дополнительной стоимости за счет условного.

    Только если он может поместиться на одной линии, и кристально ясно, что это значит, я использую его:

     $value = ($a < 0) ? 'minus' : 'plus'; 

    Лично я использую только тернарный оператор, если он вписывается в одну строку. Если это необходимо, то пришло время для старого

     if else if else 

    Вложенные тройные операторы PHP ведут себя по-разному.

    Этот синтаксис проходит все следующие тесты. На основе http://deadlytechnology.com/web-development-tips/php-ternary-syntax/

     $myvar = ($x == $y) ?(($x == $z)?'both':'foo') :(($x == $z)?'bar':'none'); 

    ,

    См .: http://au.php.net/ternary

    Пример № 3 «Непонятное тернарное поведение» объясняет, почему в PHP не работает следующее.

     $x = 1; $y = 2; $z = 3; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == 'none'; // Good $x = 1; $y = 2; $z = 1; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == 'bar'; // Good $x = 1; $y = 1; $z = 3; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == 'bar'; // Bad! $x = 1; $y = 1; $z = 1; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == 'bar'; // Bad! 

    стиль, который я иногда использую, который я воспитываю, поскольку он не упоминался, выглядит следующим образом:

     $result = ($x == y) ? "foo" : "bar"; 

    .. но обычно, только если положить все это на одну линию, это слишком долго. Я считаю, что с = ? : = ? : все выстраиваются, что делает его более аккуратным.

    тройные операторы – это короткие эффективные способы написания простых операторов if. Они не должны быть вложенными или трудными для чтения. Помните: вы пишете программное обеспечение один раз, но читается 100 раз. Это должно быть легче читать, чем писать.

    Я склонен заключить условие в круглые скобки: (a == b)? 1: 0

    Я не соглашусь с общим мнением. Я вроде как Имран со своим условным стилем оператора. Если он подходит по одной линии, я держу его на одной линии. Если это не соответствует чисто одной строке, я разбиваю ее, но я использую только одну вкладку (4 пробела, у меня есть VS, чтобы вставлять пробелы для вкладок) для отступа. Я не сразу перехожу к if else , потому что много раз условный оператор имеет больше смысла контекстуально. (Однако, если это не имеет смысла контекстуально, я просто не использую его.)

    Кроме того, я не устанавливаю условные операторы. В этот момент мне трудно читать, и пришло время перейти к более подробному стилю if else .

    «Надуманный пример» – это то, как я мог бы отступать от него, за исключением того, что я отступал от левого поля, а не от того, где (или что-то еще на линии выше).

    Тройным хулителям – читаемость. Если вы не думаете, что это делает более читаемый код, не используйте его. Но я считаю, что это было наоборот, по крайней мере, некоторое время.

    Тройной условный код может сделать код более чистым и более элегантным, и, самое главное, поможет вам сделать упор на правильные вещи и избежать повторения. Подумайте об их использовании, но не делайте код менее удобочитаемым. В VB.NET:

     'before refactoring If x = 0 Then ' If-Then-Else puts emphasis on flow control label = "None" Else label = Foo.getLabel(x) ' If-Then-Else forces repeat of assignment line End If 'after refactoring label = If(x = 0, "None", Foo.getLabel(x)) ' ternary If puts emphasis on assignment 

    Обратите внимание: «это менее читаемо» – это не то же самое, что «я не привык видеть это».

    Я не использую его. Мне всегда нравилось, как пытаться сэкономить место и ввести исходный код с ожиданием того, что маленький исходный код более эффективный скомпилированный.

    Я не считаю его читаемым вообще, но многое из того, что я его никогда не использую.

    Я обычно не использую тернарный оператор вообще, поскольку я нахожу, если .. еще более читаем.

    Имран, ты отформатировал это красиво. Тем не менее, тернарный оператор, как правило, становится нечитаемым, так как вы гнездились более двух. блок if-else может дать вам дополнительный уровень понятной вложенности. Помимо этого, используйте программирование с функцией или таблицей.

     $foo = (isset($bar)) ? $bar : 'default'; 

    Я лично использую его только для назначения переменной (в java), например:

     String var = (obj == null) ? "not set" : obj.toString(); 

    и (другой пример) при использовании функции, которая не допускает нулевой параметр, такой как:

     String val; [...] int var = (val == null) ? 0 : Integer.parseInt(val);