一、前言
表达式与语句是两个很有意思、但可能也很无聊的概念。
原因就在于,在大部分编程语言中,这两个其实你看不出太大的差别:因为它们两个很多时候都是同时出现的。
但了解它们之间的区别有时候又是有必要的,比如在rust
这门语言中,表达式就拥有了一个特殊的能力:作为返回值。
二、表达式与语句
首先来聊聊表达式,表达式是一个编程结构,一般情况下,它都会产生一个值。
比如赋值、函数调用、构造一个对象等等,这都属于表达式的范畴。
a=10
2+3
fun()
Object obj
而语句呢,代表这一种指令或者操作,通常用于执行某些任务或控制程序的流程。
最直接的形式就是,在大部分编程语言中,只要将;
作为结尾,其就是一个语句。
因此上面的所有表达式,只需要在后面添加一个;
即是一条语句:
a=10;
2+3;
fun();
Object obj;
这就是在执行某些任务。
除此之外,还有一些控制程序流程的语句,比如正常编程语言中都有的条件判断语句、循环语句等等。
一般用到的关键字都是if
、while
等等。
它们的作用就是来控制程序的执行流程。
因为正常来说,程序都是从第一条语句开始,顺序执行到最后一条语句结束,这就是顺序结构。
而在1966
年,计算机科学家 Bohm
和 Jacopini
证明了这样的事实:任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成。
因此只有顺序结构肯定是不够的,正常编程语言都会有选择结构与循环结构,只是用到的关键字、语法等等可能会略有差别。
三、应用
正如本文开头所说,其实在大部分语言中,语句、表达式这两者基本上就是你中有我、我中有你的情况,并不用太在意。
但在rust
语言中却将表达式拥有返回值这一特点利用上了。
比如一个正常的函数返回值:
fn fun()->int{
return 100+100;
}
但考虑到表达式本身就有返回值,那么上面的代码可以简写为这样:
fn fun()->int{
100+100
}
在rust
中,这样的例子随处可见。
但也要注意,这种代码只能存在于最后,如果它的后面还有其它语句、表达式,那编译器其实是无法识别它的,只会将其与后面的代码尝试放在一起解析,肯定就会报错。