Rust 语言基础
三、函数
1、基本概念
1.1、定义
- Rust 语言使用关键字 fn 来定义函数,如:fn test(){…};
1.2、命名规范
-
Rust 代码中的函数和变量名使用 snake case 规范风格。在 snake case 中,所有字母都是小写并使用下划线分隔单词。
-
例子:
fn main() { println!("Hello, world!"); another_function(); } fn another_function() { println!("Another function."); }
-
由上面的例子,也可以看出,Rust 语言对函数的声明定义的位置没有严格要求,只要声明定义了就行,在主调函数前面或后面都可以。
2、函数参数
-
Rust 语言的函数也分为带参函数和无参函数,带参函数的声明形式如下:
fn 函数名(形参:参数类型){函数体}; // 例子: fn function(x: i32) { println!("The value of x is: {}", x); }
-
在 Rust 语言,声明函数时必须声明每个参数的类型,如果是含参函数,当参数列表中不止一个参数时,像其他编程语言一样,Rust 也使用 “,” 来分隔。例如:
fn another_function(x: i32, y: i32) { println!("The value of x is: {}", x); println!("The value of y is: {}", y); }
3、函数体
-
函数体由一系列的语句和一个可选的结尾表达式构成。例子:
fn main() { let y = 6; } fn main() { let x = 5; let y = { let x = 3; x + 1 }; println!("The value of y is: {}", y); }
-
在第二例子中,将一个代码块赋值给了 y,这是 Rust 语言里特有的;而且,在代码块里的最后一行 ”x+1“ 并没有用分号结尾,这就是一个表达式;表达式的结尾没有分号。如果在表达式的结尾加上分号,它就变成了语句,而语句不会返回值。
4、函数返回值
-
Rust 的函数也有无返回值和有返回值的区别,有返回值的函数生命形式如下:
fn fun_name() -> i32{....} // fn 函数名() -> 返回值类型{函数体} // 例子: fn double() -> f64 { PI } fn main() { println!("Hello, world!"); another_function(); function(520); function1(18,'R'); let num = double(); println!("The value of num is {}",num); } //输出: /* Hello, world! Another function. The value of x is: 520 The value of x is: 18 The value of y is: R The value of num is 3.141592653589793 */
-
带返回值的函数,必须不以语句结尾,因为语句并不会返回值;必须以符合返回值类型的表达式结尾,下面是一个待返回值的函数的错误写法:
fn plus_one(x: i32) -> i32 { x + 1; } // 错误信息: /* fn plus_one(x: i32) -> i32 { | -------- ^^^ expected i32, found () | | | this function's body doesn't return 33 | x + 1; | - help: consider removing this semicolon | = note: expected type `i32` found type `()` */
四、注释
-
Rust 语言使用双斜杆 “//” 和 “/**/” 作为注释符,双斜杆之后的一整行字符 Rust 编译器都不执行。双斜杆是行注释符.
-
”/**/“ 是块注释符。
-
示例:
/* 有返回值,返回值为实数圆周率 */ // -> 返回值类型