Почему в языках программирования нет оператора return if? - PullRequest
0 голосов
/ 28 апреля 2019

Прежде всего, я хотел бы отметить, что мои теоретические знания анатомии языков программирования не так глубоки, как следовало бы, и я заранее извиняюсь.

Это также может быть глуповопрос, я прошу прощения за это, но я некоторое время задавался вопросом, почему нет оператора return if или, по крайней мере, синтаксического сахара для него в (по крайней мере, тех, с которыми я знаком) языках программирования, особенно в таких языках, как Pythonили Lua, которые относительно высокого уровня и часто допускают альтернативное написание с синтаксическим сахаром.

Возьмите следующий код, например:

if(x > y) {
    return x;
}

Конечно, вы точно знаете, что происходит,if x > y is true x is returned.Однако теперь можно утверждать следующее:

  1. В зависимости от языка программирования для простого утверждения требуется несколько строк. Конечно, вы могли бы написать это встроенным, как if (x > y) { return x }
  2. Это не "звучит" так здорово: if x > y, x gets returned

Просто чтобыПроясните, я не хочу сказать, что «традиционный» путь плох, я просто спрашиваю из интереса.

Если бы вы использовали выражение вроде «return if»Вышеприведенное утверждение может выглядеть так:

return x if (x > y);

Это однострочный и хорошо читается x gets returned if x > y


Теперь я задал себе следующие вопросы:

  1. Это просто проектное решение?
  2. Синтаксис return if вызывает ненужные сложности для синтаксического анализатора / компилятора?
  3. Если это ни первое, ни второе,тогда что это?Стечение обстоятельств?Я, конечно, не буду первым думать об этом за все десятилетия программирования.

Edit :
Поскольку мой пример явно вводил в заблуждение, я имею в виду следующее.такое же поведение с другим синтаксисом.

Так что return x if(x > y) вообще не возвращается, если x не больше y.

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Некоторые языки программирования имеют (мои слова) условный суффикс.

Вы можете сказать на Perl, например:

    print "I don't mind" if 6 == 9

Эта конструкция, конечно, может быть использована специально для

    return "I don't mind" if 6 == 9

Таким образом, предпосылка в целом неверна. В отдельных случаях это потому, что разработчик языка не видел в этом никакой ценности. Как сказано в одном комментарии, общий подход заключается в разборе слева направо. Добавление такого рода синтаксиса выглядит для меня (простого любителя языкового дизайна) как добавление сложности для небольшой выгоды.

Обратите внимание, что в конструкции " оператор , если условие ", тогда оператор может быть произвольно усложнен, например, много строк заключено в {}. Это не слишком читабельно.

0 голосов
/ 25 июня 2019

Вопрос, насколько я понимаю, сводится к следующему: почему условные операторы остаются выровненными в большинстве синтаксисов.То есть: (значение cond) вместо (значение cond).Аргументом для последнего было то, что он более точно следует синтаксису естественного языка.Хотя это может иметь место с синтаксической семантической точки зрения, обратное кажется более естественным: сначала вы перечисляете условие, которое должно быть выполнено, поскольку все последующее (поддерево), возможно, даже не нужно оценивать и в контексте программы можно рассматривать как бессмысленное,

...