在本文中,我们将探索Rust中存在的一些基本编程概念,例如变量,条件和基本类型。为了充分利用本文,建议至少有一种以前的编程语言,例如Python,JavaScript或Java。
。什么是生锈
Rust是一种静态打字的编程语言,旨在性能和安全性。它最初是在Mozilla开发的,它迎合了使用低级字节调整代码的系统级程序员。您可以了解有关Rust here历史的更多信息。
安装
本文主要着重于教授编程概念,我们不会深入研究安装。如果您想在计算机上全球安装Rust,则可以按照here的说明进行操作。另外,您可以使用Rust Playground app与文章进行编码。
让我们直接潜入并开始探索生锈!
变量
在Rust中声明变量很简单。我们使用let
关键字来做到。
let even_number = 2;
这与JavaScript中的let
关键字相似,但Rust对其进行了不同的对待。默认情况下,生锈中的变量是不可变的,这意味着您不能更改分配给变量的值。
如上所示,我们的代码失败了,因为我们无法更改变量even_number
的值。要更改变量的值,我们必须添加代表“突变”的mut
关键字。
let mut even_number = 2;
现在,我们的代码运行良好并打印输出(注意:忽略警告标志,它们仅表示我们尚未使用even_number
变量)。
Rust中的变量只能具有一种类型,可以由Rust编译器明确分配或推断出一种类型。与JavaScript不同,一旦将类型分配给Rust中的变量,就无法更改。
let mut even_number = 2;
// This will not compile
even_number = true;
如上所述,Rust编译器为“不匹配类型”带来了错误。它希望even_number
变量始终是整数,但有一个布尔类型。
基本类型
布尔
布尔类型是一种只能具有两个值的类型:true或false。要声明Rust中的布尔值,我们使用bool
关键字。
let is_valid: bool = true;
默认情况下,声明为bool的变量将自动设置为false。
let is_updated: bool; // will be false
布尔类型主要用于条件中,例如if和其他陈述,您可以在其中检查变量是否为TRUE并进行相应进行。
整数
锈的整数是没有小数点的数字。 Rust中有两种类型的整数:signed
和unsigned
整数。
签名的整数
签名的整数可能是正面的或负的。示例包括:20,-20、34,-34等。通过在整数范围开始时添加i
来表示签名的整数。
let count: i64 = 1501
未签名的整数
未签名的整数只是正整数。示例包括:20、34、42、382728289等。未签名的整数是通过在整数范围开始时添加u
来表示的。
let age: u8 = 54
整数类型指定变量可以保留的数据长度。
签名:
长度 | 签名 | 范围 |
---|---|---|
8位 | i8 | -128至127 |
16位 | I16 | -32,768至32,767 |
32位 | i32 | -2.147E9至2.147E9 |
64位 | i64 | -9.223E18至9.223E18 |
128-bit | i28 | -1.701E38至1.701E38 |
对于未签名:
长度 | 未签名 | 范围 |
---|---|---|
8位 | U8 | 0至255 |
16位 | U16 | 0至65,535 |
32位 | U32 | 0至4.295E9 |
64位 | U64 | 0至1.844e19 |
128-bit | U28 | 0至3.403E38 |
如果我们使用整数类型并为该类型的范围下方或以下分配一个值,Rust会恐慌。
示例:
// this will not compile
let counter: i8 = 128;
浮子
浮子是具有小数点的数字。所有的浮子类型都签名。 Rust中有两种类型的浮子:f32
和f64
。
示例:
let amount: f32 = 20.50;
特点
这种类型类似于其他编程语言中的字符,并用char关键字表示。
示例:
let alphabet: char = 'a';
请注意,char
类型的值必须以单引号包装。
复合类型
数组
数组用于将同一类型的数据分组在一起。与JavaScript中的数组不同,Rust数组不是动态的。生锈阵列存储在堆栈上,因此必须在初始化时知道它们的大小和长度。
要声明数组,请使用语法[type; size]
,其中type
是要存储的数据类型,而size
是数组中的元素数量。
示例:
let students_age: [u8; 5] = [10, 12, 9, 11, 10];
数组中的值必须为相同的类型。您不能像在JavaScript中一样在一系列数字中拥有char
。
示例:
上面的示例失败,因为列表中包含了char
类型。
请注意,我们没有明确添加数组类型,因为Rust可以从提供的数据中推断出来。
访问和更新阵列
在Rust中访问数组元素类似于其他编程语言:我们使用该元素的索引。
示例:
fn main() {
let numbers = [3,2,3,5,7,8,9];
println!("{}", numbers[0]); // 3
println!("{}", numbers[4]); // 7
}
要更新或突变数组,我们必须使用mut
关键字。
示例:
fn main() {
let mut numbers = [3,2,3,5,7,8,9];
numbers[0] = 1;
println!("{:?}", numbers) // [1,2,3,5,7,8,9];
}
如上所述,阵列中的第一个数字从3更改为1。
nb ::?
是一个调试特征,您现在不应该担心这一点,但是您需要包括在内以显示数字数组。
向量
向量与数组相似,但具有动态性,这意味着它们的尺寸可以改变。它们存储在堆上而不是堆栈上。要表示向量类型,请使用Vec<T>
并使用vec![...]
初始化。
示例:
let counter: Vec<i8> = vec![4, -5, 7];
从上面我们声明一个具有三个值的i8
类型的向量。
我们还可以使用以下方式声明具有零初始值的向量:Vec::new()
示例:
let mut current_counts: Vec<i8> = Vec::new();
println!("{:?}", current_counts); // []
要向向量添加更多值,请使用.push
方法。
示例
let mut current_counts: Vec<i8> = Vec::new();
current_counts.push(5);
println!("{:?}", current_counts) // [5]
要从矢量中删除项目,请使用.pop
方法。
示例:
let mut counter: Vec<i8> = vec![4, -5, 7];
counter.pop();
counter.pop();
println!("{:?}", counter) // [4]
从上面我们称之为POP方法两次,该方法从向量中删除了两个元素。
也只有链接数组,我们还使用元素索引来访问向量中的这些元素。
示例:
let counter: Vec<i8> = vec![4, -5, 7];
println!("{}", counter[1] ); // -5
状况
Rust条件与其他编程语言相似。要有条件运行一个代码块,请使用if else
表达式。
示例
fn main() {
let count = 2;
if count > 2 {
println!("Count is greater than 2");
} else {
println!("Count is less than 2");
}
}
条件必须始终评估为布尔类型。下面的代码不会编译:
let count = 2;
// This will fail
if count {
println!("Count is greater than 2");
} else {
println!("Count is less than 2");
}
count
是一种整数类型,而不是bool
类型。与JavaScript不同,Rust不会隐式打字。
循环
Rust提供了三种循环:for
,while
和loop
。
用于循环
Rust中的FO循环类似于JavaScript中的for-in
循环。它主要与数组一起使用,允许您循环在每个元素上。
示例:
fn main() {
let numbers = [3,2,3,5,7,8,9];
for num in numbers {
println!("the number is: {num}");
}
}
您也可以在Rust for Loop的范围内循环。
示例:
fn main() {
for num in 0..10 {
println!("the number is: {num}");
}
}
循环
只要条件为true
,循环就可以重复执行代码块。当条件变为false
时,循环断开。
示例:
fn main() {
let numbers = [3,2,3,5,7,8,9];
let mut cal = 0;
let mut index = 0;
while cal <= 20 {
println!("the current calculated value is: {}", cal);
cal += numbers[index];
index += 1;
}
}
从上面的循环将继续进行,直到变量cal
大于20,然后停止。
环形
循环无限执行一个代码块,直到您使用break
关键字手动停止它。
示例:
fn main() {
let mut counter = 0;
loop {
counter += 1;
println!("The counter is currently {counter}");
if counter == 10 {
counter = counter * 2;
break;
}
};
println!("Total counter is {counter}");
}
功能
在Rust中声明功能类似于其他编程语言。到目前为止,我们已经看到了main
函数,该功能是Rust在运行代码时寻找的入口点。
我们可以用不同的名称创建自己的功能,并在main
函数中使用它们。
fn main() {
let result = addition(20, 20);
println!("result: {}", result);
}
fn addition(num1: i8, num2: i8) -> i8 {
num1 + num2
}
在上面的示例中,我们创建了一个名为addition
的函数,其中两个参数num1
和num2
,均为i8
,以及一个返回类型-> i8
。
请注意,在addition
功能中,我们没有明确添加return
关键字。这是有效的,因为RUST将隐式返回函数中不会以半符号结尾的任何行
锻炼
现在我们已经涵盖了很多基础,现在该通过练习来测试您的技能了:
编写一个使用println的程序!将所有数字从1到100打印,但两个例外。对于可除以3的数字,请打印“ Fizz”,而不是数字,而对于5(而不是3)的数字,则打印“嗡嗡声”。对于3和5都可以排除的数字,请打印“ FizzBuzz”。
总而言之,本文提供了Rust中常见编程概念的概述。我们探索了变量,条件,基本类型和复合类型,例如数组和向量。此外,我们涵盖了循环,功能,甚至通过练习来巩固我们的理解。 Rust对性能和安全性的关注使其成为系统级编程和低级优化的绝佳选择。当您继续使用Rust的旅程时,请记住,练习是掌握任何编程语言的关键。拥抱Rust富有表现力语法的力量及其强大的功能,以构建高效且安全的应用程序。愉快的编码!