Есть ли языки программирования, "переменные" которых неизменны (константа, финал, и т.д.) по умолчанию?
И, для создания этого переменным необходимо ли объявить дополнительный неизменный спецификатор?
Философия парадигмы функционального программирования строго ориентирована на то, чтобы все «переменные» были неизменными, а «изменяемые» допускались только в крайних случаях (например, для I / О). Следовательно, большинство функциональных языков программирования, таких как различные диалекты Lisp и Haskell , будут (чаще всего) поддерживать неизменяемые переменные. Конечно, некоторые языки предлагают большую гибкость, чем другие, но центральная парадигма / философия остается, и это мешает.
Редактировать: В ответ на вашу правку:
Если вы ищете C-with-friendly-constants, то принятие совершенно новой парадигмы программирования - не ваше решение. В функциональном программировании все неизменяемо (в большинстве случаев), и вы обычно смотрите на совершенно новую фундаментальную философию и подход к программированию.
Этот на самом деле не решение, если все, что вам нужно, - это упростить объявление констант.
Edit2: В ответ на людей, проголосовавших за меня:
Хотя я правильно (надеюсь) ответил на вопрос спрашивающего, я не уверен, что это был ответ, который оказался полезным, учитывая его новое изменение / комментарий .Тем не менее, я могу надеяться, что, возможно, открою ему глаза на совершенно новый прекрасный мир программирования =)
Edit3: Вот Список языков функционального программирования Википедии:
Большинство этих языков имеют некоторые второстепенные элементы / влияния нефункциональной ереси; помеченные как «чисто функциональные» - нет.
(Насколько мне известно, языки функционального программирования - единственные, которые поощряют неизменяемые переменные по философии. Могут быть языки с неизменяемыми по умолчанию переменными, которые не являются функциональными по парадигме. Эта концепция звучит для меня довольно странно, но Я не могу гарантировать общее утверждение «никогда не когда-либо», учитывая огромное, огромное, огромное количество языков программирования. Я просто скажу, что, насколько мне известно, это крайне маловероятно)
Комментатор предположил что ADA является императивным / объектно-ориентированным языком программирования с неизменяемыми переменными по умолчанию.
Все переменные в XSLT могут быть только неизменяемыми.
Clojure - это диалект Лиспа, нацеленный на виртуальную машину Java, работающую исключительно с неизменяемыми данными.
Ближайший аналог, который я могу придумать, - это Objective Caml . Переменные, связанные let
, всегда неизменяемы, но поля структур (называемые записями в Caml) неизменяемы только по умолчанию, и можно пометить отдельное поле как изменяемое
.
Среди функциональных языков Objective Caml оказался чрезвычайно привлекательным для программистов на C. OCaml имеет довольно много императивных конструкций как в языке, так и в библиотеках, поэтому путь миграции не такой уж и странный. И если вам действительно нужны объекты и система классов, они тоже есть.
Язык Microsoft .NET F # является потомком Objective Caml, но было внесено немало изменений, чтобы убедиться, что это язык .NET, и я не осведомлен о изменчивости. Но если вы хотите опробовать функциональный язык как относительно небольшое изменение по сравнению с вашим текущим стилем программирования, вы можете изучить Objective Caml или F #.