Rust 从 0 到 1- 基础概念 - 函数
函数遍布在 Rust 代码中,可能会以为 Rust 是目前比较火的函数式编程语言,事实上 Rust 也确实支持函数式编程,但也支持面向对象编程、结构化编程等,汲取了多种编程范式特点。
在 Rust 中,声明函数的关键字是 fn,很简洁;而 main 函数一般作为程序的入口(和 C、Java 一样)。官方建议函数和变量的命名采用蛇形命名法(snake case),即全部小写,并使用下划线 _ 链接单词。参考下面的例子:
函数定义的顺序对于 Rust 来说不重要,也可以在 main 函数之前定义 say_hello 函数。
参数
Rust 的函数可以具备 0 到 n 个参数,但是目前不支持参数默认值,也不支持 Java 那种可变数量参数,参考下面的例子:
函数体
Rust 函数体是由“语句”和“表达式”组成,他们都是可选的,也就是说即使函数体是空的,也不会报错。官方的说法是,Rust 是基于“表达式”的语言。那么“语句”和“表达式”的区别是什么?“语句”可以理解为是执行一些操作,但是并不返回值,譬如,声明变量;而“表达式”则会返回执行的结果,譬如,加法运算。参考下面的例子:
上面的例子中 let x=5; 是“语句”,let y = ( let x=5 ); 则会报错,因为语句没有返回值,无法赋值给 y;但是反过来“表达式”可以是“语句”的一部分,譬如 let x=5;中的 5 就是一个表达式。按照官方的说法整个函数定义本身类似变量的声明也是“语句”,但是函数调用,宏的调用以及创建新的作用域的 {} 都是表达式。参考下面的例子:
注意上面例子中的 x+1 结尾是没有分号的,它是一个“表达式”,如果加上分号,就变成“语句”了,也就没有返回值了,在编译时会报错,大家可以试试。
具有返回值的函数
Rust 中函数的返回值等于函数体中最后一个表达式的值,我们通过在函数名字的后面追加 -> 声明返回值类型(必须)。当然也可以向其它语言一样通过 return 语句返回值。参考下面的例子:
注意,如果我们在 plus 函数的 x + y 表达式后面加了分号变为 x + y; 那么编译的时候就会报错,因为变成了语句 plus 函数将没有返回值,与声明不符。
版权声明: 本文为 InfoQ 作者【山】的原创文章。
原文链接:【http://xie.infoq.cn/article/53b3e44188e8a28650ef4ab7d】。文章转载请联系作者。
评论