первый метод довольно в порядке. можно создать UDF, который извлекает желаемые данные, и просто назовите это.
Условие, которое вы проверяете, похоже на вопрос, поэтому сначала стоит вопросительный знак.
x > 0 ? 1 : 0
Думайте об этом утверждении как о трех предложениях на английском языке: «Является ли x больше 0? Тогда 1 . Иначе, 0. " У вас есть одно предложение для каждого предложения в утверждении.
Предикат:
x > 0 ? /* Is x greater than 0? */
«Истинная» ветвь:
1 /* Then 1. */
«Ложная» ветвь:
: 0 /* Else, 0. */
Что касается запоминания того, какой символ стоит первым, я просто подумайте о том, что первая часть - это вопрос: «Верно это или нет?», поэтому вопросительный знак стоит первым.
Я думаю о синтаксисе таким образом
Question ? Yes : No
в python я прочитал это как обычное английское предложение:
a equals b if condition is true else c
"?" - это вопросительный знак, поэтому он означает «если».
Двоеточие означает «сейчас приходит», «затем делать».
Хорошая вещь в тернарном операторе заключается в том, что вы не обязаны его использовать, особенно если у вас проблемы с запоминанием синтаксиса. Просто используйте оператор if, который в большинстве случаев удобнее читать.
И нет - тернарный оператор не имеет лучшей производительности, чем оператор if.
Подумайте об этом так: троичное утверждение состоит из трех частей: вопрос, код для выполнения, если ответ на вопрос «да», и код, если ответ «нет». Знак "?" идет после вопроса, как и в предложениях на английском языке.
Это идет вот так:
myVariable = this.testMethod() ? 'value for true case' : 'value for false case'
Если ваши модульные тесты все еще проходят, когда вы ошиблись, то либо это не имеет значения, либо ваши тесты не подходят Не покрываю достаточно путей через код. Если между его вводом и получением теста «прошел / не прошел» слишком большой промежуток времени, это еще одна проблема. При наличии хороших быстрых тестов очень мало маленьких синтаксических гадостей.