Скажем, у нас есть вложенные тернарные операторы:
return foo ? 1 : bar ? 2 : 3;
Каков наилучший способ отформатировать этот код, чтобы в будущем его могли читать другие.
Скажем, у нас есть вложенные тернарные операторы:
return foo ? 1 : bar ? 2 : 3;
Каков наилучший способ отформатировать этот код, чтобы в будущем его могли читать другие.
Этот пост — самое популярное мнение, которое я смог найти по этому поводу. Предложение есть
return foo ? 1 :
bar ? 2 :
3 ;
Чтобы отделить функцию
function getValue(cond1, cond2) {
if(cond1) return 'a';
if(cond2) return 'b';
return 'c';
}
function work() {
const result = getValue(/* some params */);
}
Я не могу сказать, принято это или нет, но я использую его таким образом все время.
Ternary дает вам такую естественную структуру тестирования, что вы можете сделать код очень читаемым, просто сделав его многострочным и правильно расставив отступы. Я твердо верю, что следующее использование тернара является лучшим проявлением вложенного условного оператора.
return foo ? 1
: bar ? 2
: 3;
В более сложных случаях вы можете заставить тернарный оператор и оператор запятой прекрасно работать вместе. Имейте в виду, что последняя инструкция в группе, разделенной запятыми, возвращается автоматически. Супер удобно для тройки.
return foo ? ( doSometingFoo()
, variable++
, collectResult() // and return foo result
)
: bar ? ( doSomethingBar()
, variable--
, collectAnotherResult() // and return bar result
)
: ( doSomethingReject()
, variable = 0
, rejectSomehow() // and return error code
)
Я предпочитаю удобочитаемость этого стиля форматирования тернарного оператора:
return foo
? bar
: baz
? qux
: qiz
? 1
: 2;
Для удобочитаемости просто держитесь подальше от этих утверждений, их очень легко неправильно прочитать, если вы хотите что-то более читаемое, просто разверните и используйте обычные состояния.
Нет ничего плохого в том, чтобы просто иметь вложенный список операторов if.
if(foo){
return 1
}else{
if(bar){
return 2;
}else{
return 3;
}
}