Языки с конструкцией "else-less if"? - PullRequest
0 голосов
/ 03 апреля 2020

Долгое время при использовании Emacs-lisp меня интересовало назначение конструкций when и unless. Мне показалось, что это просто обходной путь для более хороших отступов и уменьшения вложенности, т.е.

(if (this-is-true)     (when (this-is-true)  | (if (not (this-is-true))     (unless (this-is-true)
    (progn         --\   (do-this)           |     (progn               --\   (do-this)
      (do-this)    --/   (do-that))          |       (do-this)          --/   (do-that))
      (do-that)))                            |       (do-that)))

Однако теперь, когда я профессионально работаю программистом и, следовательно, чаще с кодом других людей, у меня есть часто встречающиеся ситуации, когда

// ALGOL style curly-braces       ! Fortran            # Shell scripts
if(this) {                        IF(THIS) THEN        if this_condition; then
    then_than();                      DO_THAT              do_that
    ...                               ...                  ...

заставлял меня карабкаться, чтобы увидеть, есть ли какие-то предложения или предложения if-else. Аналогичен операторам стиля switch или case и наличию предложения default, демонстрируя реальное когнитивное преимущество более ограниченных форм when и unless по сравнению с использованием простых if, т.е. они улучшают выразительность.

Это заставило меня задуматься: какие еще языки существуют вне вариантов lisp, у которых есть встроенное понятие «если не так», если? Возможно, есть даже языки, которые пытаются принудительно использовать различные конструкции, например, не разрешая if без else?

...