07_函数

1. 函数的声明

声明函数使用fn关键字,依照惯例,针对函数名和变量名,Rust使用snake case 命名规范,即所有字母都是小写,单词之间使用下划线分开。如下

rust 复制代码
fn main() {
    println!("Hello, world!");
    annother_function();
}

fn annother_function() {
    println!("Another function.");
}

2. 函数的参数

parameters是我们在定义函数时的参数,叫形参;arguments是我们在调用函数时的实际参数,叫实参。在函数的签名里,必须声明每个参数的类型,如下

rust 复制代码
fn main() {
    println!("Hello, world!");
    annother_function(5, 6); // arugment is 5 and 6
}

fn annother_function(x: i32, y: i32) {
    // parameter is x and y
    println!("the value of x is: {}", x);
    println!("the value of y is: {}", y);
}

3. 函数中的语句(statement)与表达式(expression)

函数有一系列的语句组成,可选的可以由一个表达式结束。

  • 语句是执行一些动作的指令,函数的定义也是语句,语句不返回值,所以不可以使用let将一个语句赋给一个变量。
  • rust是一个基于表达式的语言,表达式会执行计算并产生一个值。

示例:

rust 复制代码
fn main() {
    let x = 5;
}

以上代码中,main函数的整体也是语句。其中let x = 5;是一条语句 ,该部分的右边是一个表达式,该表达式的值就是5,如果我们把该行改为let x = 5 + 6;,那么表达式就是5 + 6。表达式可以作为语句的一部分,调用函数是表达式,调用println!宏也是表达式。

3. 函数的返回值

->符号后面声明函数返回值的类型,但是不可以为返回值命名。

在rust里,通常返回值就是函数体里面最后一个表达式的值。如果想提前返回,需使用return关键字,并指定一个值,大多数函数默认使用最后一个表达式作为返回值。如下例子:

rust 复制代码
fn plus_five(x: i32) -> i32 {
    x + 5
}

fn main() {
    let x = plus_five(6);
    println!("The value of x is: {}", x);
}

在上面代码中,five函数的最后一个表达式值是x = 5,所以x + 5是该函数的返回结果。

注意的是x + 5后不能加;,加分号就不是表达式了,返回的是tuple,而不是i32

4. 函数的注释

函数可以使用单行注释或者多行注释的方式,单行注释符号为//,多行注释以/*开头,以*/结尾,如下示例

rust 复制代码
// 这是单行注释
fn plus_five(x: i32) -> i32 {
    x + 5
}

/**
 * 这是多行注释
 */
fn main() {
    let x = plus_five(6);
    println!("The value of x is: {}", x);
}
相关推荐
Hilaku几秒前
当 AI 一天写完一周的代码,我们还剩什么优势?
前端·javascript·程序员
尘世中一位迷途小书童5 分钟前
无人机航线里的云台角度怎么调?Cesium 做了个视锥 + 鹰眼联动
前端·javascript·数据可视化
思码梁田9 分钟前
CSS display 属性:从元素类型转换到隐藏元素的实用指南
前端·css·display·inline·block·none·inline-block
Csvn10 分钟前
⚡ Vite 依赖预构建(optimizeDeps)的 3 个经典坑:改了源码不生效、新增依赖 404、缓存怎么清都不行
前端
A242073493020 分钟前
Vue3 + TypeScript:后端数据在表格内渲染后进行增删改的完整实现步骤
前端·javascript·typescript
他们叫我 悦儿遥遥雨24 分钟前
.NET 8 Web开发入门(六):Blazor 全栈开发——告别 JavaScript 焦虑
前端·javascript·.net
用户21816970493031 分钟前
Flutter(九)StatelessWidget StatefullWidget
前端
paopaokaka_luck31 分钟前
基于springboot3+vue3的乡村医生诊疗管理系统(AI助手、协同过滤算法、webSocket实时聊天、Echarts图形化分析)
前端·网络·人工智能·spring boot·websocket·网络协议·echarts
编程风暴32 分钟前
3类人群的数据分析实习类型选择+4条选错红线
java·前端·数据分析
其美杰布-富贵-李32 分钟前
Vue 3 模块导入教程:import、export 与文件组织
前端·javascript·vue.js