当前位置: 首页 > article >正文

Rust学习(三):rust基础Ⅱ

Rust学习(三):rust基础Ⅱ

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

1、语句和表达式:

rust中最基础的语法句型有两类:语句和表达式。官方的定义是:语句指要执行的一些操作和产生作用的表达式,而表达式单纯用于求值。具体可以理解为:语句可以用于求值并返回结果,相当于C中的:return 返回值; 表达式则只用于求值,无特使含义。可以简单区分为:以分号结尾的是表达式,没有分号结尾的是语句。在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关键字结合使用从而更加便捷的实现复杂功能:

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中非常常见,且强大的条件控制语句:

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

(2)rust中的循环结构:

①loop关键字:

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

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

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

4、函数:

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

fn main() {
    let res = add(1,2);
    println!("1+2={}", res);
}

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

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

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);
}

http://www.kler.cn/a/391227.html

相关文章:

  • Vue 项目打包后环境变量丢失问题(清除缓存),区分.env和.env.*文件
  • mac终端使用pytest执行iOS UI自动化测试方法
  • 【算法】——二分查找合集
  • Linux kernel 堆溢出利用方法(二)
  • Unity3D学习FPS游戏(11)敌人AI巡逻(NavMesh)
  • 第二节 OSI-物理层
  • 【JAVA】正则表达式中的中括弧
  • 基于MATLAB刻度线表盘识别系统
  • 微擎框架php7.4使用phpexcel导出数据报错修复
  • 计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习
  • 第3关-L0G3000
  • 【计算机网络】网卡NIC的工作内容包括哪些呢?
  • Unet++改进10:添加CPCA||通道先验卷积注意力机制
  • 喜报|超维机器人荣获昇腾AI创新大赛铜奖
  • C# 复制文件到指定文件夹
  • Redis 数据类型
  • 【python基础算法编程】
  • 软件设计师-法律法规与标准化
  • MFC图形函数学习07——画扇形函数
  • Redis五种数据类型剖析
  • Chrome 浏览器开启打印模式
  • 羲和数据集收集器1.3
  • python在word中插入图片
  • 马斯克万卡集群AI数据中心引发的科技涟漪:智算数据中心挑战与机遇的全景洞察
  • 文章管理系统微信小程序ssm+论文源码调试讲解
  • 医疗影像分割 | 使用yolo v11训练自己的数据集