@ Dan
if otherString:
stringValue = otherString
else:
stringValue = defaultString
Этот тип кода длиннее и выразительнее, но также более читабелен
Ну да, это дольше. Не уверен насчет «более выразительных» и «более читабельных». По крайней мере, ваша претензия оспаривается. Я бы даже сказал, что это совершенно неправильно, по двум причинам.
Во-первых, ваш код делает упор на принятие решений (довольно сильно). С другой стороны, условный оператор подчеркивает что-то еще, а именно значение (соответственно присвоение указанного значения). И это точно , что хочет автор этого кода. Принятие решений действительно является побочным продуктом кода. Важной частью здесь является операция присваивания. Ваш код скрывает это назначение в большом количестве синтаксического шума: ветвление.
Ваш код менее выразителен, потому что он смещает акцент с важной части.
Даже тогда ваш код, вероятно, превзойдет некоторые неясные ASCII-арта, такие как ?:
. Inline- if
будет предпочтительнее. Лично мне не нравится вариант, представленный в Python 2.5, потому что он задом наперед. Я бы предпочел что-то, что читается в том же потоке (направлении), что и троичный оператор C, но использует слова вместо символов ASCII:
C = if cond then A else B
Это выигрывает руки.
C и C #, к сожалению, не имеют такого выразительного утверждения. Но (и это второй аргумент) троичный условный оператор языков Си настолько давно установлен, что сам по себе стал идиомой. Тернарный оператор является такой же частью языка, как и «обычный» оператор if
. Поскольку это идиома, любой, кто знает язык, сразу же читает этот код правильно. Кроме того, это чрезвычайно короткий и лаконичный способ выражения этой семантики. На самом деле, это самый короткий путь, который можно себе представить. Это чрезвычайно выразительно, потому что не затеняет сущность ненужным шумом.
Наконец, Джефф Этвуд написал идеальное заключение к этому: Наилучший код - это вообще не код