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);
}
相关推荐
Theodore_10222 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
----云烟----4 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024064 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic4 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it4 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康4 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神5 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海5 小时前
scala String
大数据·开发语言·scala
朝九晚五ฺ5 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
qq_327342735 小时前
Java实现离线身份证号码OCR识别
java·开发语言