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);
}
相关推荐
雷神乐乐2 分钟前
Flume学习
hadoop·学习·flume
爱编程— 的小李2 分钟前
结构体(c语言)
c语言·开发语言
向上的车轮7 分钟前
ODOO学习笔记(8):模块化架构的优势
笔记·python·学习·架构
fathing15 分钟前
c# 调用c++ 的dll 出现找不到函数入口点
开发语言·c++·c#
前端青山36 分钟前
webpack指南
开发语言·前端·javascript·webpack·前端框架
nukix1 小时前
Mac Java 使用 tesseract 进行 ORC 识别
java·开发语言·macos·orc
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】内存可见性问题 & volatile
java·开发语言·java-ee
Lizhihao_1 小时前
JAVA-队列
java·开发语言
HC182580858322 小时前
“倒时差”用英语怎么说?生活英语口语学习柯桥外语培训
学习·生活
学习路上_write2 小时前
FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录
单片机·嵌入式硬件·qt·学习·fpga开发·github·硬件工程