Что касается программирования на JavaScript, я заметил, что все, что можно сделать с помощью операторов, а блоки можно сделать только с помощью выражений. Может ли язык программирования нормально работать только с выражениями? И если да, то почему вообще используются заявления?
programming-languages
javascript
language-design
MaiaVictor
источник
источник
Ответы:
Конечно. Самый простой способ - присвоить значение результата каждой конструкции, которая в данный момент является оператором, и, таким образом, превратить его в выражение. Это не обязательно полезно или значимо, хотя. Единственный потенциальный выигрыш - это немного концептуальной простоты. Однако, если вы затем приступите к удалению таких вещей, как точки с запятой и циклы (вместо этого требуется цепочка с помощью других операторов и функций), программы, интенсивно использующие операторы, станут некрасивыми.
Более радикальный, но значимый способ сделать это состоит в том, чтобы спроектировать язык так, чтобы почти все имело осмысленное значение, и использовать его таким образом, чтобы вы почти всегда использовали выражение для этого значимого значения, а не для других эффектов. Это делают языки функционального программирования (в некоторой степени; например, в Haskell есть объявления, которые не являются выражениями).
Утверждения используются, потому что в императивной парадигме есть много общих операций, которые не имеют полезного значения результата, и потому что понятие последовательных инструкций (а не вычислений) вполне соответствует этой парадигме. Если большой процент вашей программы изменяет состояние, а не вычисляет новые значения, не имеет смысла требовать создания значения (каков результат цикла for?). Напротив, когда вся ваша парадигма (FP) построена вокруг вычисления значений, выбросы, у которых нет значения результата, не требуют исключения: вместо этого вы даете им результат дозорного, который ничего не значит.
источник
void
иnull
/unit
заключается в том, что последние являются значениями и могут быть переданы, тогдаvoid
как особенность в том, что нет значения этого типа.Зависит от того, как вы определяете «утверждение» и «выражение».
Очень строгое определение будет различать утверждения как «вещи, которые имеют побочные эффекты и, возможно, возвращаемое значение», и выражения как «вещи, которые имеют возвращаемые значения, но не могут иметь побочные эффекты». При таком определении ни одна значимая программа не может быть написана без хотя бы одного оператора (который должен был бы оценить выражение и вывести его возвращаемое значение) - одни только чистые выражения не могут взаимодействовать с миром вне программы. Один язык все еще может быть полностью чистым (то есть не иметь каких-либо утверждений), если нечистая часть перемещается из языка в поддерживающую экосистему (это именно то, что делает Haskell, хотя язык имеет определения и выражения) ,
Однако, если вы допускаете побочные эффекты в выражениях, тогда различие между утверждениями и выражениями становится произвольным и гораздо менее интересным - конечно, вы можете изобрести язык программирования, который состоит только из выражений; большинство диалектов Lisp работают так же. В такой ситуации оценка выражения для его побочных эффектов в значительной степени аналогична выполнению оператора, и можно утверждать, что в таком языке выражения и операторы - это одно и то же. Таким образом, разница между утверждением и выражением является только синтаксической.
Многие языки до сих пор делают это синтаксическое различие, потому что это полезно не по техническим причинам, а для удобочитаемости. Создание выражения выражает интерес к его возвращаемому значению, а не к побочным эффектам; сделав это утверждение говорит читателю, что вы намерены вызвать побочные эффекты, и возвращаемое значение может быть или не быть интересным.
источник
ATL и Xtend - хорошо работающие языки программирования. Многие функциональные языки также не требуют инструкций. Итак, да, язык программирования может нормально работать без утверждений. Я думаю, что заявления на многих языках являются реликтом императивного программирования. Они все еще используются, потому что они широко известны, и в некоторых случаях они делают код более читабельным.
источник
Да.
Функциональные языки (и языки единичного присваивания) все являются выражением. Примерами являются Haskal (и SISAL). Где операторы if и for возвращают значения.
Существуют и другие классы языков: простой, который приходит на ум, - это декларативные языки (я уверен, что есть много других, которые не зависят от утверждений). Этим языкам даже не нужны выражения (в том смысле, в котором вы обычно думаете). Вы заявляете, что это правда, и вы можете получить несколько результатов назад. Самый простой здесь
prolog
.источник