Rust编程学习(一): 变量与数据类型

我们先从Rust基本的变量声明定义与数据类型开始学习,了解这门语言基本特性。

1 变量与可变性

  1. 变量声明

    变量声明以let关键字开头,x为变量名,变量名后紧跟冒号和数据类型,但是rust编译器有自动推导变量类型的功能,可以省略显式的声明。

    let x:i32 = 10;
    //等价于
    let x = 10;

  2. 默认变量是不可变的 只读状态

    let x = 10;
    x = 20;//错误❌ 不能对 不可变 变量进行赋值

  3. 可变变量

    mut关键字将变量x声明为可变变量,即x为可写状态

    let mut x=10;//x可变
    x = 20; //修改变量值

  4. 变量遮蔽(shadow)

    Rust允许在同一个代码块中声明一个与之前已声明变量同名的新变量,新变量会遮蔽之前的变量,即无法再去访问前一个同名的变量,这样就实现了变量遮蔽(类似于覆盖)。

    fn main() {
    let x = 3;
    let x = x * 2;
    println!("x: {}", x); //输出:x:6

    复制代码
       let x = "Hello, Rust!";
       println!("x: {}", x);//输出:Hello, Rust!

    }

变量遮蔽的实质是通过let关键字声明了一个新的变量,只是名称恰巧与前一个变量名相同而已,但它们是两个完全不同的变量,处于不同的内存空间, 可以不同,值的类型也可以不同。

2 常量定义

常量是指绑定到一个标识符且不允许改变的值,一旦定义后就没有任何方法能改变其值了。常量名通常是大写字母 ,且必须指定常量的数据类型

复制代码
const MAX_NUM: u32 = 1024;

常量与不可变变量对比:

1)常量声明使用const关键字,且必须注明值的类型。

2)常量不能遮蔽,不能重复定义。

3)常量可以在任何作用域中声明,包括全局作用域。

4)常量只能被赋值为常量表达式或数学表达式,不能是函数返回值,或是其他在运行时才能确定的值。

3. 基本的数据类型

Rust的基本数据类型有整数类型、浮点数类型、布尔类型、字符类型、范围类型等。

1. 整数类型

长度 有符合 无符号
8位 i8 u8
16位 i16 u16
32位 i32 u32
64位 i64 u64
128位 i128 u128
arch isize usize

定义与使用

复制代码
let integer1: u32 = 17;       // 显式类型声明
let integer2 = 17u32;         // 类型后缀声明
let integer3 = 17;            // 默认i32类型
let integer4: u32 = 0b10001;  // 二进制
let integer5: u32 = 0o21;     // 八进制
let integer6: u32 = 0x11;     // 十六进制
let integer7 = 50_000;        // 数字可读性分隔符_

为了方便阅读数值较大的数字,Rust允许使用下划线""作为虚拟分隔符来对数字进行可读性分隔。比如,为了提高50000的可读性,可以写成50_000。Rust在编译时会自动移除数字可读性分隔符""。

2. 浮点数类型

f32 :单精度浮点数,小数点后至少有6位有效数字。
f64:双精度浮点数,小数点后至少有15位有效数字。 定义与使用:

复制代码
let float1: f32 = 1.1;        // 显式类型声明
let float2 = 2.2f32;          // 类型后缀声明
let float3 = 3.3;             // 默认f64类型
let float4 = 11_000.555_001;  // 数字可读性分隔符_

3. bool(布尔)类型

Rust使用bool来声明布尔类型的变量,布尔类型只有两个可能的取值,即true或false。 例如:

复制代码
let t: bool = true;           // 显式类型声明
let f = false;                // 隐式类型声明

4. 字符类型

Rust使用UTF-8作为底层的编码。字符类型代表的是一个Unicode标量值(Unicode Scalar Value),包括数字、字母、Unicode和其他特殊字符。这个字符类型区别于C/C++中的定义,每个字符占4个字节。

复制代码
let c = 'z';
let c1 = '✅';

5. 范围类型

范围类型常用来生成从一个整数开始到另一个整数结束的整数序列,有左闭右开和全闭两种形式,比如(1..5)是左闭右开区间,表示生成1、2、3、4这4个数字;(1..=5)是全闭区间,表示生成1、2、3、4、5这5个数字。

复制代码
fn main() {
   print!("1-5: ");
   
   for i in 1..5 {
       print!("{} ", i);
   }
   println!();
}

4 demo测试

编写一个简单的demo巩固上面的知识点。

命令:cargo new demo1_datatype创建工程。

测试代码:

复制代码
fn main() {
    let x = 5; //默认类型i32
    let x = x+1; //遮蔽x=5,此时x=6
    println!("遮蔽变量 x={}", x);

    let mut y = 5;
    y += 10; //可变变量
    println!("可变变量 y={}", y);

    const MAX_VALUE:i32=100*32; //常量
    println!("MAX_VALUE={}", MAX_VALUE);

    let z:char = '》'; //字符类型
    println!("字符类型 z={}, size={}字节", z, std::mem::size_of::<char>());

    let f = false; //布尔类型
    println!("布尔类型 f={}", f);

    for i in 1..=5 { //for循环  范围类型
        print!("{} ", i);
    }
    println!("");
}

编译输出:

5 小结

我们先从基础语法开始学习,循序渐进掌握它的精髓。此处我也给大家推荐一下rust官方教程链接:Rust 程序设计语言 - Rust 程序设计语言 中文版

我是小C,欢迎大家一起交流学习~~~

相关推荐
南风999几秒前
Claude code安装使用保姆级教程
后端
爱泡脚的鸡腿1 分钟前
Node.js 拓展
前端·后端
蚂蚁背大象1 小时前
Rust 所有权系统是为了解决什么问题
后端·rust
布列瑟农的星空2 小时前
前端都能看懂的rust入门教程(五)—— 所有权
rust
子玖3 小时前
go实现通过ip解析城市
后端·go
Java不加班3 小时前
Java 后端定时任务实现方案与工程化指南
后端
心在飞扬3 小时前
RAG 进阶检索学习笔记
后端
Moment3 小时前
想要长期陪伴你的助理?先从部署一个 OpenClaw 开始 😍😍😍
前端·后端·github
Das1_3 小时前
【Golang 数据结构】Slice 底层机制
后端·go