上一期我们学习了循环语句并做了遍历数组的练习,接下来我们学习函数,也就是Function。
如果把基本数据类型比作人的属性比如年龄、性别,那么函数就可以比作是一个人所具备的行为能力,比如:蹦、跳、打招呼。在早期的面向对象语言如Java,中所说的方法其实就是依附在类或者对象上的函数。我们从编写Hello World就开始使用的main方法就是一个函数。
这里我们对比下Rust的Hello World和早期的Java语言的Hello World代码:
同样是实现在控制台输出”Hello TianlangStudio”,使用Java的代码量要多出一倍。这是因为在Java中把类和对象做为一等公民,函数不能独立存在需要依附在类或对象上,这就造成了虽然只是一个简单的HelloWorld,也需要先创建一个类,这也是为什么Java 8以后逐渐增加对函数的支持。而Rust语言在设计之初就支持函数式编程并且还支持无损耗的面向对象实现。这也是汲取了前辈语言的经验教训。
在Rust中我们可以使用fn关键字定义函数,在小括号中可以定义函数的参数,就像这样定义一个名称为say_hello的函数,函数执行时会向控制台输出“Hello,Peki”
可以使用函数名加小括号的方式执行这个函数,就像这样:
保存退出,运行看下效果:
我们完成了一个say_hello函数。接下来我们需要在控制台分别输出”Hello,一月”,“Hello, 二月”,“Hello,三月”直到“Hello,十二月”,想一下这个该怎么实现呢?!
写12个类似sayHello的函数吗?这样太累了吧。我们可以使用1个带参数的sayHello函数。在小括号中声明函数的参数和参数类型,就像这样声明一个字符串引用类型的参数name,在函数代码块里我们就可以使用这个参数了。使用name替换掉”Peki”。
在执行函数的时候把月份作为参数传递给函数say_hello:
修改好后保存退出,运行看下效果:
控制台输出了Hello从一月到十二月。这样代码量少多了吧?我们可以像这样把一些不同的部分定义为函数的参数从而提高函数的普适性。函数的参数可以有多个,参数类型也可以不一样。
除了参数,函数还可以定义返回值:如果把函数想象成一个皮鞋加工厂,那参数就相当于原材料:牛皮、纽扣什么的,返回值就像当于加工好的产品——皮鞋。一个是函数的输入,一个是函数的输出。
在Rust中使用”->“定义函数的返回值。我们定义一个返回值为i32类型的plus_ten函数,返回传入的数字加10的结果。
在main函数中调用plus_ten函数计算20加10的结果。
编写好后保存退出,运行看下效果。可以在控制台看到输出了20+10等于30;
回到我们的plus_ten函数,去掉“return”和后面的分号。再重新执行看下效果。
可以看到程序的输出并没有变化。这是因为函数的返回值默认就是最后一条表达式的值。像这样的有返回值的数学运算就是一个表达式。在Rust中语句分为两种,一种是没有返回值的声明语句类似使用let声明一个变量这种,一般带等号的语句都是声明语句没有返回值。一种是有返回值的我们称为表达式。表达式后面加上分号就变成没有返回值的声明语句了。所以我们要去掉分号。
在这一期中我们学习并练习了使用函数,大家可以自己再练习下。编程是需要动手的艺术,所以大家要多动手我们不需要去背定义:for循环是什么什么的,数组是什么什么的,但要能用能写的出来。大家应该也感觉到了这个世界动嘴的越来越多能动手的越来越少。
内容根据视频整理,相应视频内容可访问
51cto学院: