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,欢迎大家一起交流学习~~~

相关推荐
PHASELESS411几秒前
Java二叉树深度解析:结构、算法与应用实践指南
java·开发语言·数据结构·算法
江湖十年8 分钟前
go-multierror: 更方便的处理你的错误列表
后端·面试·go
淋过很多场雨11 分钟前
现代c++获取linux系统版本号
linux·开发语言·c++
谦行20 分钟前
前端视角 Java Web 入门手册 5.4:真实世界 Web 开发——Java Web 代码组织与分层
java·后端·架构
Goboy23 分钟前
构建异步消息通信机制设计与实现
后端·程序员·架构
低技术力的Ayase26 分钟前
[UEC++]UE5C++各类变量相关知识及其API(更新中)
开发语言·c++·ue5
一个天蝎座 白勺 程序猿27 分钟前
Python(16)Python文件操作终极指南:安全读写与高效处理实践
开发语言·python·安全
八了个戒30 分钟前
「数据可视化 D3系列」入门第一章:Hello D3.js
开发语言·前端·javascript·数据可视化·canvas
汪小成33 分钟前
NestJS学习笔记-02-模块、控制器与服务,手把手构建你的第一个CRUD API!🚀
后端·nestjs
User_芊芊君子42 分钟前
【Java】面向对象程序三板斧——如何优雅设计包、封装数据与优化代码块?
java·开发语言