自 2015 年发布以来,Rust 已经成为开发者中最受喜爱的编程语言之一。Rust 具有出色的性能和安全特性,以直观简洁的语法著称。
Rust 适用于构建各种程序,包括 Web 应用、命令行工具和网络服务。Rust 拥有许多现代编程语言应具备的特性,如并发性、类型推断等。
开始使用 Rust
Rust 是一个跨平台的编程语言,可在大多数操作系统上运行。要开始使用Rust,请前往官方Rust网站,并安装适合您操作系统的首选版本。
安装完Rust后,您可以开始在具有.rs扩展名的Rust文件中编写程序。Rust非常灵活且易于学习。如果您具有先前的编程经验,您会发现它很简单。
Rust 中的变量和常量
Rust具有高度表达性,有多种声明变量的方法。您可以使用let关键字来声明变量。
以下是在Rust中声明变量的示例:
let a: String;
let b: i32;
let c: () = ();
a和b变量分别是一个字符串和一个整数。c变量是Rust的单位类型,用作函数和表达式的占位符。
在可选的数据类型声明之后,您可以使用等号来声明和初始化具有值的变量。
fn main(){
let age: String = String::from("five years old");
let age = 5; // equivalent to let age: i32 = 5;
println!("{}", age);
}
该程序在打印之前声明了两个age变量,并使用println!宏进行打印。第一个age变量指定了数据类型,而第二个没有。
在声明变量时,您不必指定变量的数据类型。Rust编译器会在编译时根据值的数据类型推断出类型。
您还可以使用const关键字类似于声明变量来声明常量:
const age: &str = "five years old";
您无法修改声明为常量的变量的值。
为 Rust 程序添加注释
Rust提供了单行注释和块注释的功能。您可以使用双斜杠(//)进行单行注释:
fn main() {
// This is a line comment
let x = 5; // This comment explains the purpose of the `x` variable
}
对于多行注释(块注释),使用斜杠后跟星号(/)开始块注释,并使用星号后跟斜杠(/)关闭块注释:
fn main() {
/*
This is a block comment that spans multiple lines.
It is often used to describe a larger block of code.
*/
let x = 5;
}
您的注释应该简明扼要。
Rust 中的数组
数组是具有固定大小的、相同数据类型的元素集合。默认情况下,Rust在堆栈上分配数组。
下面是如何在Rust中声明数组的方法:
fn main() {
let numbers = [1, 2, 3, 4, 5];
}
numbers数组包含五个元素。您可以使用索引访问数组中的位置上的值:
fn main() {
let numbers = [1, 2, 3, 4, 5];
let x = numbers[3];
println!("{}", x)
}
主函数打印访问数组的第四个元素的变量x的值。
Rust 中的向量
Rust提供了向量来弥补数组的局限性。向量具有动态大小,可以根据需要增长和缩小。
下面是在Rust中声明向量的方法:
fn main() {
let my_vec: Vec<i32> = vec![1, 2, 3, 4, 5];
let x = my_vec[3];
println!("{}", x)
}
my_vec向量是一个包含32位整数的向量。变量x访问向量的第四个元素,主函数将其值打印到控制台上。
Rust 的条件语句
条件语句是Rust程序中用于做决策的控制结构之一。你可以使用if和else关键字来处理程序中的决策。
下面是一个if语句的例子,根据两个整数是否相等将一个字符串打印到控制台上。
fn main() {
let a: i32 = 12;
if a == 12 {
println!("a equals twelve");
}
}
主函数使用println!宏打印字符串,因为变量等于12。
你可以使用else关键字来处理if语句为false的情况:
fn main() {
let a: i32 = 12;
if a == 123 {
println!("a equals twelve");
} else {
println!("a does not equal twelve");
}
}
在这个例子中,else语句会执行,因为a的值不等于123。
你可以使用match关键字来处理复杂的条件语句:
fn main() {
let age: i32 = 7;
match age {
1 => println!("one"),
2 => println!("two"),
3 => println!("three"),
_ => println!("zero"),
}
}
主函数使用match语句将age变量与匹配的case进行匹配,并执行与值匹配的表达式。下划线(_)是默认语句,在值有匹配时执行。
Rust 中的循环
Rust提供了用于重复任务的循环。Rust有三种主要类型的循环:loop、while和for循环。
loop关键字创建一个无限循环,直到遇到break关键字才会停止:
fn main() {
loop {
println!("重复打印,直到遇到break语句。");
break;
}
}
while循环在条件为true时重复执行代码块:
fn main() {
let mut count = 0;
while count < 5 {
println!("The count is {}", count);
count += 1;
}
}
for循环适用于迭代集合中的项,比如数组:
fn main() {
let numbers = [1, 2, 3, 4, 5];
for item in numbers.iter() {
println!("The current item is {}", item);
}
}
这个for循环遍历numbers数组,并将每个项打印到控制台上。
声明和调用 Rust 函数
使用fn关键字声明Rust函数,然后是函数名、参数列表和返回类型(如果有)。
下面是一个带有参数和返回类型的函数声明示例:
fn add(a: i32, b: i32) -> i32 {
return a + b;
}
add函数接受两个32位整数参数,并返回一个32位整数,即两个参数的和。
要从代码的其他位置调用函数,只需指定函数名和参数(如果有):
fn main() {
let result = add(2, 3);
println!("2 + 3 = {}", result);
}
result变量保存调用add函数的结果。main函数使用println!宏将结果打印到控制台上。
Rust 中的结构体
Rust 提供了结构体(struct)来定义自定义数据类型,用于将相关的值进行分组。结构体是创建具有特定属性的对象的蓝图。
下面是如何声明一个结构体:
struct Person {
name: String,
age: u32,
is_male: bool,
}
Person结构体有三个字段:一个String类型、一个无符号32位整数和一个布尔值。
在定义结构体之后,你可以在程序的其他部分创建它的实例:
fn main() {
let person1 = Person {
name: String::from("Candace Flynn"),
age: 16,
is_male: false,
};
}
person1变量是Person结构体的一个实例。在实例化时,你可以为结构体的字段赋值。你可以创建任意多个结构体的实例。
你可以在 Rust 中实现面向对象编程(OOP)的概念
Rust非常灵活,你可以使用内置的数据结构(如结构体)在Rust中实现面向对象编程的概念。
你可以使用结构体作为类的替代品。通过Rust的结构体,你可以定义类型的蓝图,并使用Rust提供的结构体功能实现不同的面向对象编程概念。