Rust学习四 rust的函数、注释与控制流

函数、注释与控制流

一 函数

rust以fn为关键字声明一个函数。函数命名规范为全小写,以下划线为分隔的单词。

fn main() {
    
}

带参数的函数

多个参数以逗号分隔,函数参数必须指定数据类型

fn test(x: i32, y: u64)() {
    ...
}

函数体内的语句与表达式

函数体由一系列的以表达式结尾的语句组成。到目前为止我们只涉及了没有表达式结尾的函数,但是能看出表达式是语句的一部分。因为rust是一种基于表达式的语言,这是一个需要理解的重大区别。其他语言在语句与表达式上并没有这样的区别。下面来探讨什么是rust语句和表达式,以及它们的不同是怎样影响函数体的。

语句是执行某些动作且无返回值的指令集。表达式是有返回值的。

使用let关键字创建一个新的变量并赋值,是一条语句。let x = 6; 是一条语句。因为语句没有返回值,所以rust不能像C/Ruby那样可以多重赋值,let x = (let y = 6); 这样的句法在rust中是错误的。

函数定义也是语句。

fn main() {
    let y = 6;
}

这是一个只包含一条语句的main函数,而它整个自身也是一个语句。

除了语句,表达式求值构成了我们将在rust编写的剩余的大部分代码。函数调用、宏调用、数学运算,以及 {} 构成的代码域等都是表达式。表达式可以是组成语句的一部分。

fn main() {
    let x = 5; 
    
    let y = {  
        let x = 3;  
        
        // Note this line without a semicolon at the end, 
        // if you add a semicolon to the end of an expression, 
        // you turn it into a statment, which will then not return a value.
        x + 1 
        	  
    };
    
    println!("The value of y is: {}", y);
}

以上例子, let x = 5; 是一条语句, 5是一个表达式, 它求值5并返回给了赋值语句。
let y = { ... }; 整体是一个语句, 但是 { ... } 是一个求值表达式, 它返回值给y赋值。
x + 1 是一个求值表达式,它返回值给了 {} 表达式。 注意 X + 1 结尾没有分号。因为; 是一条语句结束的完整标志。如果表达式x + 1的结尾添加了分号,那它就变成了一个语句,而语句是没有返回值的。

有返回值的函数

函数在调用时可以返回值,rust可以不显式的命名返回值,但必须以 -> 声明返回值的类型, 在rust中,函数返回值与函数体中最后一个表达式的返回值是同义的。

fn five() -> i32 {
	5
}

如上例, 函数体内既没有语句,调用,甚至let声明,但它是一个完整的函数。

二 注释

rust的注释使用 双斜杠 // 。 可单行,可在行代码结尾后使用

三 控制流程

if 表达式

  1. if 表达式的条件必须是bool值。 rust不会自动的将非布尔值转换成布尔值,所以if表达式 必须要明确返回布尔类型的值。
    fn main() {
        let number = 3; 
        if number {
            println!("number is three");
        }
    }
    
    
    error[E0308]: mismatched types  
    --> src/main.rs:4:8
        | 
    4 	|     if number {
        |        ^^^^^êxpected bool, found integral variable
        |   = note: expected type `bool`
                        found type `{integer}`
    

上例,number是一个整型, rust不会像其他语言一样, 在if表达式中转成bool。

  1. 处理多个条件时使用 else if

    fn main() {
        let number = 6;
        
        if number % 4 == 0 {
            println!("number is divisible by 4");
        } else if number % 3 == 0 {
            println!("number is divisible by 3");
        } else if number % 2 == 0 {
            println!("number is divisible by 2");
        } else {
            println!("number is not divisible by 4, 3, or 2");
        }
    }
    
    
  2. let 语句中使用if表达式

    fn main() {
        let condition = true;
        let number = if condition {
            5
        } else {
            6
        };  // Note ;
        
        println!("The value of number is {}", number);
    }
    

let 语句中使用if else 时要注意,if 和else的代码块返回的值得类型要一致,不然解释器会报错。其实这很好理解, let语句是用来给变量赋值的,此时if else 返回的值的不确定性是有潜在的风险的, 所有它们的类型必须一致,才能保证安全性。

loops循环

  1. loop关键字会一直循环loop块内的代码,除非遇到break或ctrl C 中断

  2. 带条件的循环 while

  3. for 循环, for… in … 用法与Python类型

    fn main() {
        let a = [1,2,3,4,5,6];
        
        for element in a.iter() {
            println!("the value is: {}", element);
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值