Какой стиль кодирования вы используете для тройного оператора?
Я держу его в одной строке, если это коротко. В последнее время я использую этот стиль для более длинных или вложенных тернарных выражений оператора. Надуманный пример:
$value = ( $a == $b )
? 'true value # 1'
: ( $a == $c )
? 'true value # 2'
: 'false value';
Лично, какой стиль вы используете или найдете наиболее читаемым?
Изменить: (о том, когда использовать тернарный оператор)
Я обычно избегаю использовать более трех уровней тройного оператора. Я предпочитаю двухуровневый тернарный оператор более 2 уровней if-else, когда я повторяю переменные в скриптах PHP-скриптов.
Ответы
Ответ 1
Тройной оператор, как правило, следует избегать, но эта форма может быть вполне читаемой:
result = (foo == bar) ? result1 :
(foo == baz) ? result2 :
(foo == qux) ? result3 :
(foo == quux) ? result4 :
fail_result;
Таким образом, условие и результат сохраняются вместе в одной строке, и это довольно легко сэкономить и понять, что происходит.
Ответ 2
Я пытаюсь не использовать тернарный оператор для записи вложенных условий. Это бросает вызов читаемости и не дает дополнительной ценности при использовании условного.
Только если он может поместиться в одну строку, и это кристально ясно, что это значит, я использую его:
$value = ($a < 0) ? 'minus' : 'plus';
Ответ 3
Лично я использую только тернарный оператор, если он вписывается в одну строку. Если это необходимо, то это время для старого старого
if else if else
Ответ 4
Вложенные тройные операторы 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!
Ответ 5
стиль, который я иногда использую, который я воспитываю, поскольку он не упоминался, выглядит следующим образом:
$result = ($x == y)
? "foo"
: "bar";
.. но обычно, только если положить все это на одну строку, это слишком долго. Я нахожу, что наличие строки = ? :
все равно выглядит более аккуратным.
Ответ 6
тернарные операторы являются короткими эффективными способами написания простых операторов if. Они не должны быть вложенными или трудными для чтения. Помните: вы пишете программное обеспечение один раз, но читается 100 раз. Это должно быть легче читать, чем писать.
Ответ 7
Я склонен заключить условие в круглые скобки: (a == b)? 1: 0
Ответ 8
Я согласен с общим мнением. Я вроде как Имран со своим условным стилем оператора. Если он подходит по одной линии, я держу его на одной линии. Если это не соответствует чисто одной строке, я разбиваю ее, но я использую только одну вкладку (4 пробела, у меня есть VS, чтобы вставлять пробелы для вкладок) для отступа. Я не сразу перехожу к if
- else
, потому что много раз условный оператор имеет больше смысла контекстуально. (Если это не имеет смысла контекстуально, я просто не использую его.)
Кроме того, я не устанавливаю условные операторы. В этот момент мне трудно читать, и пришло время перейти к более подробному стилю if
- else
.
Ответ 9
"Надуманный пример" - это то, как я мог бы отступать от него, за исключением того, что я бы отступал от левого поля, а не от того, где (или что-то еще на линии выше.
Для тернарных хулителей читаемость - это точка. Если вы не думаете, что это делает более читаемый код, не используйте его. Но я считаю, что это было наоборот, по крайней мере, некоторое время.
Ответ 10
Тернарный условный код может сделать код более чистым и более элегантным, и, самое главное, поможет вам сделать акцент на правильных вещах и избежать повторения. Подумайте об их использовании, но не делайте код менее удобочитаемым. В 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
Обратите внимание: "это менее читаемо" - это не то же самое, что "я не привык видеть это".
Ответ 11
Я не использую его. Мне всегда нравилось, как пытаться сэкономить место и печатать в исходном коде с ожиданием того, что маленький исходный код == более эффективный скомпилированный код.
Я не считаю его доступным для чтения вообще, но многое из того, что я его никогда не использую.
Ответ 12
Я вообще не использую тернарный оператор, поскольку я нахожу, если.. еще более читаем.
Ответ 13
Имран, вы отформатировали это красиво. Тем не менее, тернарный оператор, как правило, становится нечитаемым, так как вы гнездились более двух. блок if-else может дать вам дополнительный уровень понятной вложенности. Помимо этого, используйте программирование с функцией или таблицей.
Ответ 14
$foo = (isset($bar)) ? $bar : 'default';
Ответ 15
Я лично использую его только для назначения переменной (в java), например:
String var = (obj == null) ? "not set" : obj.toString();
и (другой пример) при использовании функции, которая не допускает нулевой параметр, например:
String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);