Rust学习-通用编程概念

这篇具有很好参考价值的文章主要介绍了Rust学习-通用编程概念。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

整数

静态类型(statically typed)的语言,必须在编译期知道所有变量的类型
允许使用类型后缀来指定类型,例如 57u8
数字字面量还可以使用 _ 作为可视分隔符以方便读数,如 1_000

8 位	i8	u8
16 位	i16	u16
32 位	i32	u32
64 位	i64	u64
128 位	i128	u128
arch	isize	usize         // 类似于go的int
十进制	98_222
十六进制	0xff
八进制	0o77
二进制	0b1111_0000
字节 (仅限于 u8)	b'A'

使用 --release 参数进行发布(release)模式构建时,Rust 不检测会导致 panic 的整型溢出,Rust 会进行一种被称为二进制补码包裹(two’s complement wrapping)的操作,即u8的256变为0,u8的257变为1

显式处理溢出:
(1)使用 wrapping_* 方法在所有模式下进行包裹,例如 wrapping_add
(2)使用 checked_* 方法时发生溢出,则返回 None 值
(3)使用 overflowing_* 方法返回该值和一个指示是否存在溢出的布尔值
(4)使用 saturating_* 方法使值达到最小值或最大值

fn main() {
    // addition
    let sum = 5 + 10;

    // subtraction
    let difference = 95.5 - 4.3;

    // multiplication
    let product = 4 * 30;

    // division
    let quotient = 56.7 / 32.2;
    let floored = 2 / 3; // Results in 0

    // remainder
    let remainder = 43 % 5;
}

sum = 15
difference = 91.2
product = 120
quotient = 1.7608695652173911
floored = 0
remainder = 3

浮点数

Rust 的浮点型 f32 和 f64,它们的大小分别为 32 位和 64 位
默认浮点类型 f64,现代CPU 中它的速度与 f32 几乎相同,但精度更高
所有浮点型都有符号
浮点数按照 IEEE-754 标准表示

fn main() {
    let x = 2.0; // f64
    let y: f32 = 3.0; // f32
}

布尔类型

Rust布尔类型大小1B

fn main() {
    let t = true;
    let f: bool = false; // with explicit type annotation
}

字符char

char 字面量采用单引号括起来
字符串字面量用双引号括起来
Rust字符类型大小4B,表示的是一个 Unicode 标量值,可以表示远不止 ASCII。
标音字母,中文/日文/韩文的文字,emoji,还有零宽空格(zero width space)在 Rust 中都是合法的字符类型。
Unicode 值的范围为 U+0000 ~ U+D7FF 和 U+E000~U+10FFFF

fn main() {
    let c = 'z';
    let z = 'ℤ';
    let heart_eyed_cat = '😻';
}

元组

将多种类型的多个值组合到一个复合类型中
元组长度固定:声明后无法增长或缩小

没有任何值的元组 () ,只有一个值,
该类型被称为单元类型(unit type),该值被称为单元值(unit value)
如果表达式不返回任何其他值,就隐式地返回单元值

访问方式有通过.访问或者通过元组名称来访问

fn main() {
    let x: (i32, f64, u8) = (500, 6.4, 1);
    let five_hundred = x.0;
    let six_point_four = x.1;
    let one = x.2;
    let tup = (500, 6.4, 1);
    let (x, y, z) = tup;
    println!("The value of y is: {}", y);
}

数组

满足如下任一条件时,数组有用
(1)将数据分配到栈(stack)而不是堆(heap)
(2)确保始终具有固定数量的元素

数组的初始化方式

let a = [3; 5];
let a: [i32; 5] = [1, 2, 3, 4, 5];
use std::io;

fn main() {
    let a = [1, 2, 3, 4, 5];

    println!("Please enter an array index.");

    let mut index = String::new();

    io::stdin()
        .read_line(&mut index)
        .expect("Failed to read line");

    let index: usize = index
        .trim()
        .parse()
        .expect("Index entered was not a number");

    let element = a[index];

    println!(
        "The value of the element at index {} is: {}",
        index, element
    );
}

在索引操作中使用无效值时导致运行时(runtime)错误
程序退出并显示错误消息

函数

函数体由一系列语句组成,也可选地以表达式结尾
注意这里的语句和表达式的区别

fn main() {
    let x = plus_one(5);
    println!("The value of x is: {}", x);
}

fn plus_one(x: i32) -> i32 {
    x + 1  // 它是一个表达式,注意这里没有;
}

语句不返回值

fn main() {
    let y = 6;
   //  let x = (let y = 6); // let y = 6 语句并不返回值,所以没有可以绑定到 x 上的值,报错
}

表达式可以在{}中

fn main() {
    let y = {
        let x = 3;
        x + 1
    };

    println!("The value of y is: {}", y);
}

表达式也可以是数字

fn five() -> i32 {
    5
}

条件

let condition = true;
let number = if condition { 5 } else { 6 };
// 变量必须只有一个类型。Rust 需要在编译时就确切地知道 number 变量的类型
// let number = if condition { 5 } else { "six" }

// 报错,Rust 并不会尝试自动地将非布尔值转换为布尔值
let number = 3;
if number {
    println!("number was three");
}

循环

loop

fn main() {
    let mut count = 0;
    // 制作标签
    'counting_up: loop {
        println!("count = {}", count);
        let mut remaining = 10;

        loop {
            println!("remaining = {}", remaining);
            if remaining == 9 {
            	// 默认跳出当前循环
                break;
            }
            if count == 2 {
            	// break结合标签跳出标签级别的循环
                break 'counting_up;
            }
            remaining -= 1;
        }

        count += 1;
    }
    println!("End count = {}", count);
}

从循环返回表达式,注意不是语句文章来源地址https://www.toymoban.com/news/detail-544149.html

fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;

        if counter == 10 {
            break counter * 2;
        }
    };

    println!("The result is {}", result);
}

while

fn main() {
	// 循环
    let mut number = 3;
    while number != 0 {
        println!("{}!", number);
        number -= 1;
    }
    
    // 遍历数组
    let a = [10, 20, 30, 40, 50];
    let mut index = 0;
    while index < 5 {
        println!("the value is: {}", a[index]);
        index += 1;
    }
}

for

fn main() {
    let a = [10, 20, 30, 40, 50];
    for element in a {
        println!("the value is: {}", element);
    }

	// rev() 用来反转区间,(1..4)生成1、2、3的序列
    for number in (1..4).rev() {
        println!("{}!", number);
    }
}

到了这里,关于Rust学习-通用编程概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rust 语言常见的一些概念(下)

    目录 1、函数 参数 语句和表达式 具有返回值的函数 2、注释 文档注释 多行注释 3、控制流 3.1 if 表达式 3.2 使用esle if 处理多重条件 3.3 在 let 语句中使用 if 3.4 使用循环重复执行 使用 loop 重复执行代码 从循环中返回值 循环标签:在多个循环之间消除歧义 while 条件循环 使用

    2024年02月06日
    浏览(30)
  • Rust 语言常见的一些概念(上)

    目录 1、变量的可变性 常量  隐藏 2、数据类型 2.1 标量类型 整型 浮点型 数值运算 布尔型 字符类型 复合类型 元组类型 数组类型 变量默认是不可改变的(immutable)。这是 Rust 提供给你的众多优势之一,让你得以充分利用 Rust 提供的安全性和简单并发性来编写代码。不过,你

    2024年02月06日
    浏览(21)
  • Rust编程语言入门之Rust的面向对象编程特性

    Rust 受到多种编程范式的影响,包括面向对象 面向对象通常包含以下特性:命名对象、封装、继承 “设计模式四人帮”在《设计模型》中给面向对象的定义: 面向对象的程序由对象组成 对象包装了数据和操作这些数据的过程,这些过程通常被称作方法或操作 基于此定义:

    2023年04月21日
    浏览(33)
  • 【Rust 基础篇】Rust FFI:连接Rust与其他编程语言的桥梁

    Rust是一种以安全性和高效性著称的系统级编程语言,具有出色的性能和内存安全特性。然而,在现实世界中,我们很少有项目是完全用一种编程语言编写的。通常,我们需要在项目中使用多种编程语言,特别是在与现有代码库或底层系统交互时。为了实现跨语言的互操作性,

    2024年02月15日
    浏览(36)
  • Rust编程语言入门之模式匹配

    模式是Rust中的一种特殊语法,用于匹配复杂和简单类型的结构 将模式与匹配表达式和其他构造结合使用,可以更好地控制程序的控制流 模式由以下元素(的一些组合)组成: 字面值 解构的数组、enum、struct 和 tuple 变量 通配符 占位符 想要使用模式,需要将其与某个值进行

    2023年04月22日
    浏览(75)
  • Rust编程语言入门之智能指针

    指针:一个变量在内存中包含的是一个地址(指向其它数据) Rust 中最常见的指针就是”引用“ 引用: 使用 借用它指向的值 没有其余开销 最常见的指针类型 智能指针是这样一些数据结构: 行为和指针相似 有额外的元数据和功能 通过记录所有者的数量,使一份数据被多个

    2023年04月16日
    浏览(35)
  • Rust编程语言入门之高级特性

    不安全 Rust 高级 Trait 高级 类型 高级函数和闭包 宏 隐藏着第二个语言,它没有强制内存安全保证:Unsafe Rust(不安全的 Rust) 和普通的 Rust 一样,但提供了额外的“超能力” Unsafe Rust 存在的原因: 静态分析是保守的。 使用 Unsafe Rust:我知道自己在做什么,并承担相应风险

    2023年04月24日
    浏览(35)
  • Rust编程语言入门之无畏并发

    Concurrent:程序的不同部分之间独立的执行(并发) Parallel:程序的不同部分同时运行(并行) Rust无畏并发:允许你编写没有细微Bug的代码,并在不引入新Bug的情况下易于重构 注意:本文中的”并发“泛指 concurrent 和 parallel 在大部分OS里,代码运行在进程(process)中,OS同时

    2023年04月19日
    浏览(55)
  • 【跟小嘉学 Rust 编程】十七、面向对象语言特性

    【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学 Rust 编程】六、枚举

    2024年02月10日
    浏览(74)
  • 如何在 macOS 上安装 Rust 编程语言

    安装Rust编程语言在Mac上是一个相对简单的过程,但它可能会涉及多个步骤。在本文中,我将详细说明如何在Mac上安装Rust,并提供一些常见问题的解决方法。请注意,由于软件和工具可能会发生变化,因此建议首先查看Rust官方网站以获取最新的安装说明。 目录 1.打开终端 2

    2024年02月01日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包