Егор писал(а):
Выражения всё же не совсем эквивалентны.
Возражение отметается: оператор
if вообще не возвращает значения. Посему — считаем эквивалентными
Вот Вам другой пример функциональной записи (возвращающей результат вызванной функции):
Код:
((<cond1> and (func1(),)) or (<cond2> and (func2(),)) or (func3(),))[0]
Добавлено спустя 9 минут 43 секунды:Егор писал(а):
Хотя условие на первом месте (как в Lisp, C и Haskell) в некоторых ситуациях смотрится лучше.
Мотивация такого синтаксиса довольно любопытна. После анализа большого количества текстов GvR заявил, что в большинстве случаев true-part — это нормально выбираемая часть, а false-part — обработка ошибки, исключения. Поскольку исключения редки, то стоит подчеркнуть основное значение:
Код:
a/b if b != 0 else 0
Традиционный же подход подчеркивает скорее условие:
Код:
(b != 0? a/b: 0)
Особенно это заметно при сложных условиях и простых значениях.
Мне это тоже показалось сперва нетрадиционным, непривычным. Для меня одним из аргументов является обратный порядок вычисления, в целом не свойственный языку. С другой стороны, я не склонен вообще использовать условное выражение, если его части не просты.