前言
在之前我们已经学习了如何为 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 语言中的原子类型,它们不能被分解为更小的部分。了解它们的特点和用法对于编写高效可靠的程序非常重要。