Вспоминая синтаксис троичного оператора - PullRequest
6 голосов
/ 15 сентября 2009

У кого-нибудь есть хороший прием, чтобы запомнить стандартный троичный синтаксис?

Конкретно ли '?' или «:» идет первым. Я последовательно получал это задом наперед на протяжении многих лет.

Ответы [ 7 ]

21 голосов
/ 15 сентября 2009

Условие, которое вы проверяете, похоже на вопрос, поэтому вопросительный знак стоит первым.

x > 0 ? 1 : 0

Думайте об этом утверждении как о трех английских предложениях: «Х больше 0? У вас есть одно предложение для каждого предложения в утверждении.

Предикат:

x > 0 ? /* Is x greater than 0? */

"Истинная" ветвь:

1 /* Then 1. */

"Ложная" ветвь:

: 0 /* Else, 0. */
9 голосов
/ 15 сентября 2009

Что касается запоминания того, какой символ стоит первым, я просто думаю о том факте, что первая часть - это вопрос: «Это правда или нет?», Поэтому вопросительный знак идет первым.

Я думаю о синтаксисе таким образом

Question ? Yes : No
0 голосов
/ 15 сентября 2009

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

0 голосов
/ 15 сентября 2009

"?" это вопросительный знак, поэтому он означает «если».

Двоеточие означает «теперь оно приходит», «тогда делай».

Преимущество троичного оператора в том, что вы не обязаны его использовать, особенно если у вас возникают проблемы с запоминанием синтаксиса. Просто используйте оператор if, который в большинстве случаев более читабелен.

И нет - троичный не имеет лучшей производительности, чем оператор if.

0 голосов
/ 15 сентября 2009

Подумайте об этом так: троичное выражение состоит из трех частей: вопрос, код, который нужно выполнить, если ответ на вопрос «да», и код, если ответ «нет». "?" приходит после вопроса, как в английских предложениях.

0 голосов
/ 15 сентября 2009

на питоне я читаю как обычное английское предложение:

 a equals b if condition is true else c
0 голосов
/ 15 сентября 2009

Это выглядит так:

myVariable = this.testMethod() ? 'value for true case' : 'value for false case'
...