杂谈表达式和语句

表达式和语句

  • expression和statement是编程语言常用的概念,但是很多人都搞不清楚,所以我来总结一下

表达式

  • 表达式是可以被求值的代码片段
  • 表达式可以是一个值,也可以是一个函数调用
  • 例如 1+2就是一个表达式,1+2的值是3
  • 再比如 console.log(1+2)也是一个表达式,console.log(1+2)的值是undefined

语句

  • 语句是一段代码,它可以是一个表达式,也可以是其他的东西
  • 也就是说 语句包含着表达式 一一切表达式都可以是语句
  • 但是表达式不一定是语句 例如 1+2是一个表达式,但是1+2;不是一个表达式 而是一个语句 因为这段代码没有结果 不可求值
  • 在部分语言中 函数可以说表达式 被称为lambda表达式1 因为他可以被赋值给一个变量 例如 let f = function(x) { return x+1; }
  • 这部分语言往往会把函数作为一等公民 也就是可以作为参数传递 也可以作为返回值返回
  • 在上古语言中 一般表达式用来计算结果,语句用来修改程序的状态
  • 但是在现代语言中 语句常常也具有返回值 这就极大的模糊了二者的区别,即表达式和语句的合流

表达式和语句的合流

  • 这里以rust语言为例,在rust语言中,一切皆表达式
  • 例如像 1+2; 这种语句 也是一个表达式 他的值是() 也就是值。即使是loop{}这样在其他语言中是语句的东西 也是一个表达式 他的值是!
  • 所以在rust语言中 表达式和语句的区别是非常模糊的。在笔者看来,这主要是因为rust语言的函数血统比较重,为了统一函数和闭包和语句的概念,
  • 所以rust语言把所有的代码都当作表达式来处理。

本章中英对照表

英文中文
expression表达式
statement语句
lambdaλ 一个希腊字母 编程中代指匿名函数

Footnotes

  1. lambda表达式可以写的很深入,比如lambda演算实际上是和图灵机等价的计算机架构,并且还有语言承继了这种思想,比如lisp。但是笔者受限于能力无法过多展开,还望客官见谅。

For Paul

这是一个个人博客,主要用于记录自己的学习过程,用于ts和rust的技术交流

© 2025 Paul Blog • Made withby Paul

使用 Next Rust 和 Tailwind CSS 构建

最近更新时间: 2025-04-29