前言
在之前我们已经学习了如何为 rust
代码写注释以及如何在 rust
代码中进行打印。详细内容可以参看上一篇文章
今天开始我们将正式进入 rust
这么语言的学习中。首先我们开始学习 rust
的基本数据类型。我们知道在 javascript
中数据类型有undefined
、null
、布尔值(Boolean
)、字符串(String
)、数值(Number
)、大整数(BigInt
)、Symbol
、对象(Object
),除对象(Object
)外其它数据类型都是基础数据类型。同样的 rust
有哪些基础的数据类型呢?带着这个问题我们开始吧。
变量的声明
JavaScript
中变量的声明有三种方式 var
let
const
,其中 var
已经不推荐使用了。在 rust
中变量声明有两种方式 let
const
。
let
在 rust
中,变量声明可以通过 let
关键字来进行。rust
是一种静态类型语言,但通常可以推断出变量的类型,因此在大多数情况下不需要显式指定类型。以下是几种常见的变量声明方式:
- 无类型的变量声明
let x = 5; // 推断类型为 i32
let y = "Hello"; // 推断类型为 &str
- 显式类型的变量声明
let x: i32 = 5; // 明确指定类型为 i32
let y: &str = "Hello"; // 明确指定类型为 &str
- 可变变:在
rust
中,变量默认是不可变的。如果需要声明一个可变变
let mut z = 5; // 可变变量
z = 10; // 修改变量值
- 解构赋值:可以通过解构来同时声明多个变量
let (a, b) = (1, 2); // 同时声明 a 和 b
const
在 rust
中,常量使用 const
关键字声明,即不可改变的值。并且必须显式指定类型。这些值在编译时就已经确定,并且在程序运行时不可更改。
- 常量声明:常量在编译时确定,并且不能被修改。
const MY_CONSTANT: i32 = 100; // 声明一个常量 MY_CONSTANT
要注意的是,rust
的变量绑定是独特的,一旦一个变量被绑定到一个值,就不能更改绑定到另一个值(除非是可变变量)。此外,Rust有严格的生命周期和所有权系统,这意味着你不能在值的生命周期结束后继续使用它。
数值类型
在 JavaScript
中,数值类型既是 Number
不区分整型和浮点型。而在 rust
中明确区分这两种类型的。
let num = 7; // 整型
let number = 3.1415; // 浮点型
整型
整型用于存储整数值,分为有符号和无符号两种类型。
长度 | 有符号 | 无符号 |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
arch | isize | usize |
fn main() {
// 整数类型
let signed_int: i32 = 42;
let unsigned_int: u32 = 42;
println!("Signed int: {}, Unsigned int: {}", signed_int, unsigned_int);
// 大小不同的整数类型
let small_signed: i8 = 127;
let large_unsigned: u64 = 18446744073709551615;
println!("Small signed: {}, Large unsigned: {}", small_signed, large_unsigned);
// 指针大小的整数类型
let pointer_size_signed: isize = 100;
let pointer_size_unsigned: usize = 100;
println!("Pointer size signed: {}, Pointer size unsigned: {}", pointer_size_signed, pointer_size_unsigned);
}
浮点型
rust
提供两种浮点数类型,分别是单精度和双精度。
长度 | 表示 |
---|---|
32-bit | f32 |
64-bit | f64 |
fn main() {
// 浮点数类型
let single_precision: f32 = 3.14;
let double_precision: f64 = 3.14159265359;
println!("Single precision: {}, Double precision: {}", single_precision, double_precision);
}
布尔类型
在 rust
中,布尔类型用于表示真(true
)和假(false
)两种状态。布尔类型在 rust
中由关键字 bool
表示。它主要用于条件判断和其他逻辑运算。
fn main() {
// 声明布尔变量
let t: bool = true;
let f: bool = false;
// 输出布尔变量的值
println!("t = {}, f = {}", t, f);
// 条件判断
if t {
println!("t is true");
} else {
println!("t is false");
}
// 逻辑运算
let result_and = t && f; // 结果为 false
let result_or = t || f; // 结果为 true
let result_not = !t; // 结果为 false
println!("result_and = {}, result_or = {}, result_not = {}", result_and, result_or, result_not);
}
字符类型
在 rust
中,字符类型是 char
,它主要用于表示 Unicode
字符。char
类型是一个固定大小的值,占用4个字节(32位),以单引号括定义,这使得它能够表示 Unicode
标准中的任何字符,包括字母、数字、标点符号、符号以及各种其他语言的字符。
fn main() {
// 声明并初始化字符变量
let letter: char = 'A';
let number: char = '1';
let symbol: char = '$';
let emoji: char = '😊';
// 打印字符变量
println!("Letter: {}", letter);
println!("Number: {}", number);
println!("Symbol: {}", symbol);
println!("Emoji: {}", emoji);
// 转义序列
let newline: char = '\n';
let tab: char = '\t';
println!("Newline: {:?}", newline); // 使用 {:?} 显示原始字符
println!("Tab: {:?}", tab);
}
总结
- 整数类型:
i8
,i16
,i32
,i64
,i128
,isize
,u8
,u16
,u32
,u64
,u128
,usize
- 浮点数类型:
f32
,f64
- 字符类型:
char
- 布尔类型:
bool
这些基本类型构成了 rust
编程的基础,是 rust
语言中的原子类型,它们不能被分解为更小的部分。了解它们的特点和用法对于编写高效可靠的程序非常重要。