Expression-oriented programming language: Difference between revisions

Content deleted Content added
AnomieBOT (talk | contribs)
m Dating maintenance tags: {{Failed verification}}
m WP:LINKs update-standardize.
 
(8 intermediate revisions by 8 users not shown)
Line 1:
{{Programming paradigms}}
{{Notability|date=July 2022}}
 
An '''expression-oriented programming language''' is a [[programming language]] in which every (or nearly every) construction is an [[expressionExpression (computer science)|expression]] and thus yields a value.<ref>{{Cite web |title=Glossary - The Rust Programming Language |url=https://web.mit.edu/rust-lang_v1.25/arch/amd64_ubuntu1404/share/doc/rust/html/book/first-edition/glossary.html#expression-oriented-language |access-date=2022-07-06 |website=web.mit.edu}}</ref> The typical exceptions are [[macroMacro (computer science)|macro]] definitions, [[preprocessor]] commands, and [[declarationDeclaration (computer programming)|declarations]], which expression-oriented languages often treat as [[statementStatement (computer science)|statements]].
 
[[Lisp (programming language)|Lisp]]<ref name=":0">{{Cite journal |lastlast1=Syme |firstfirst1=Don |date=2020-06-14 |title=The early history of F# |url=https://dl.acm.org/doi/10.1145/3386325 |journal=Proceedings of the ACM on Programming Languages |language=en |volume=4 |issue=HOPL |pages=1–58 |doi=10.1145/3386325 |issn=2475-1421 |doi-access=free}}</ref> and [[ALGOL 68]] are expression-oriented languages. [[Pascal (programming language)|Pascal]] is not an expression-oriented language.
 
All [[functional programming language]]s languages are expression-oriented.<ref>{{citationCite web |author1=Knoldus needed|date=September2018-02-08 2020|title=Expression Oriented Programming |url=https://medium.com/knoldus/expression-oriented-programming-d88f621fd3a4 |access-date=2023-08-07 |website=Knoldus – Technical Insights |language=en}}</ref>
 
==Criticism and prevention==
{{Synthesis|date=July 2022}}
{{See also|Assignment (computer science)#Assignment versus equality|Relational operator#Confusion with assignment operators}}
Critics, including language designers,<ref>[https://www.oracle.com/java/technologies/javase/codeconventions-programmingpractices.html#547 Java Code Conventions "10.4 Variable Assignments"]</ref>{{Failed verification|date=July 2022}} blame expression-orientation for an entire class of [[software bug|programming mistakes]] wherein a programmer accidentally codes an [[assignmentAssignment (computer science)|assignment]] ''expression'', which replaces a variable with an expression rather than testing it for [[equalityEquality (relational operator)|equality]] with that expression.
 
The designers of [[Ada (programming language)|Ada]] and [[Java (programming language)|Java]] prevent this type of mistake by restricting [[conditionalConditional (computer programming)|control expressions]] to those that evaluate strictly to the [[boolean data type]].<ref>[https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.9 The Java Language Specification, Java SE 8 Edition "14.9 The if Statement"]</ref><ref>[https://www.adaic.org/learn/materials/intro/part4/ Introducing Ada]</ref>
 
The designers of [[Python (programming language)|Python]] implemented assignment as a statement rather than an expression, thus prohibiting assignment from nesting inside any other statement or expression.<ref>[https://docs.python.org/3/reference/simple_stmts.html#assignment The Python Language Reference "6.2. Assignment statements"]</ref> (Until version 3.8 added 'assignment expressions', with a different syntax.<ref>[https://www.python.org/dev/peps/pep-0572/ "PEP 572: Assignment Expressions"]</ref>)
Line 20 ⟶ 19:
 
==Examples==
{{UnreferencedMore citations needed|date=July 2022}}
{{Expand section|date=February 2018}}
*[[ALGOL 68]]
*[[BLISS]]
*[[Icon (programming language)|Icon]]
*[[Lisp (programming language)|Lisp]]<ref name=":0" />
Line 29:
*[[Rebol]]
*[[Ruby (programming language)|Ruby]]
*[[HaskellElixir (programming language)|HaskellElixir]]
*[[Erlang (programming language)|Erlang]]
*[[Haskell]]
*[[Rust (programming language)|Rust]]<ref>{{Cite web |title=Functions - The Rust Programming Language |url=https://web.mit.edu/rust-lang_v1.25/arch/amd64_ubuntu1404/share/doc/rust/html/book/first-edition/functions.html#expressions-vs-statements |access-date=2022-07-06 |website=web.mit.edu}}</ref>
*[[Scala (programming language)|Scala]]
*[[Smalltalk]]
*[[Kotlin (programming language)|Kotlin]]
*[[OCaml]]<ref>{{Cite web |title=COS 326: Functional Programming |url=https://www.cs.princeton.edu/~dpw/courses/cos326-12/notes/type-check.php |access-date=2022-07-06 |website=www.cs.princeton.edu}}</ref>
Line 42 ⟶ 45:
==References==
{{Reflist}}
 
{{Programming paradigms navbox}}
 
[[Category:Programming language classification]]