Rust学习(三):rust基础Ⅱ

Rust学习(三):rust基础Ⅱ

上一篇文章,我们了解了什么是变量,常量,数据类型等Rust中的基础知识,本篇文章,将进一步介绍Rust的有关基础知识,帮助读者更好的理解rust的编程哲学。

1、语句和表达式:

rust中最基础的语法句型有两类:语句和表达式。官方的定义是:语句指要执行的一些操作和产生作用的表达式,而表达式单纯用于求值。具体可以理解为:语句可以用于求值并返回结果,相当于C中的:return 返回值; 表达式则只用于求值,无特使含义。可以简单区分为:以分号结尾的是表达式,没有分号结尾的是语句。在rust的编写过程中,表达式使用更为广泛,语句一般使用于函数体中,作为返回值。

rust 复制代码
// 语句在函数中的使用:
fn sum_of_nums(nums:i32) -> i32{
    nums.iter().sum::<i32>()  // 注意!没有分号,这是一个语句,相当于return nums.iter().sum::<i32>()
}

// 表达式
let x = 5;
let y = x + 1;

2、运算符:

运算符是用于指定表达式计算类型的标志或符号,常见的有算术运算符、关系运算符、逻辑运算符、赋值运算符和引用运算符等,和其他编程语言的运算符基本一样,这里就不过多介绍了,感兴趣的读者,可以上网自行查阅(doge)

3、流程控制:

流程控制是指:根据是否满足某个条件来决定是否执行某段代码或重复执行某段代码的能力,大部分编程语言都具有该功能,也就是大家熟知的:循环和条件判断。

(1)rust中的条件分支:

在rust中使用最多的条件分支是:if...else...条件判断语句,if可以和let关键字结合使用从而更加便捷的实现复杂功能:

rust 复制代码
let a = 3;
if a > 5 {
    println!("a大于5");
} else if a > 3 {
    println!("a在3到5之间");
} else {
    println!("a小于3");
}

// if和let配合使用
//① let if 
let x = 3; let y = 4;
let z = if x < 4 {
    true
} else {
    false
};

// ② if let
let same_value = Some(5);
if let Some(value) = same_value {
    println!("value:{}", value);
} else {
    println!("no value");
}

match也是rust中非常常见,且强大的条件控制语句:

rust 复制代码
let a = 10;
match a {
    0 => println!("0 == a"),
    1..=9 => println!("a > 0 and a <= 9"),
    _ => println!("10 <= a"),
}

(2)rust中的循环结构:

①loop关键字:

控制代码重复执行------直到满足某个条件之后才会停止:

rust 复制代码
let mut a = 12;
let res = loop {
    if a < 0 {
        break a;
    }
    a -= 1;
};
// 死循环
loop {
    if res > 0 {
        break 0;
    }
}
②while循环:
rust 复制代码
let num = 10;
while num > 0 {
    println!("num = {}", num);
    num -= 1;
}
③for循环:
rust 复制代码
let nums = [1,2,3,4,5]

for i in nums {
    println!("value:{}", i);
}

4、函数:

函数是编程语言中一个非常重要的构建,Rust默认使用fn来定义函数,和C语言一样主函数都是main函数。需要注意的是:rust定义的函数写在main主函数前后都可以,无需特别声明,对于返回值Rust默认采用的是:不带分号的语句,当然使用"return 返回值;"也是可以的:

rust 复制代码
fn main() {
    let res = add(1,2);
    println!("1+2={}", res);
}

fn add(a:i32, b:i32) -> i32 {
    a + b
}

其他rust基础内容,可以编写一个如下的demo(可以先看一下,有一个总体的感觉):

rust 复制代码
use std::cmp::max; // 导入函数
use math::add;

// 公开模块:
pub mod math {
    // mod中的函数默认是私有的
    pub fn add(a:i32, b:i32) ->i32 {
        a + b
    }
    fn is_zero(num: i32) ->bool {
        num == 0
    }
}

// 结构体:
#[derive(Dedug)]
struct Circle {
    radius: f32,
}

impl From<i32> for Circle {
    fn from(radius: f32) -> Self {
        Self {
            radius
        }
    }
}

fn calc_func(num1: i32, num2: i32) -> i32 {
    let x = 5;
    let y = {
        let x = 3
        x + 1
    };
    max(x, y)
}

// 定以主函数:
fn main() {
    let num1 = 1;
    let num2 = 2;
    
    println!("num1 + num2 = {}", add(num1, num2));
    println!("res : {}", calc_func(num1, num2));
    let f: f32 = 9.85;
    let c: Circle = Circle::from(f);
    println!("c:{:?}", c);
}
相关推荐
我命由我1234525 分钟前
Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)
java·开发语言·jvm·spring boot·spring·java-ee·logback
徐小黑ACG1 小时前
GO语言 使用protobuf
开发语言·后端·golang·protobuf
0白露2 小时前
Apifox Helper 与 Swagger3 区别
开发语言
Tanecious.3 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐3 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
niandb4 小时前
The Rust Programming Language 学习 (九)
windows·rust
Tttian6225 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
独好紫罗兰6 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
zhuyixiangyyds7 小时前
day21和day22学习Pandas库
笔记·学习·pandas
每次的天空7 小时前
Android学习总结之算法篇四(字符串)
android·学习·算法