生锈中常见编程概念简介
#javascript #初学者 #编程 #rust

在本文中,我们将探索Rust中存在的一些基本编程概念,例如变量,条件和基本类型。为了充分利用本文,建议至少有一种以前的编程语言,例如Python,JavaScript或Java。

什么是生锈

Rust是一种静态打字的编程语言,旨在性能和安全性。它最初是在Mozilla开发的,它迎合了使用低级字节调整代码的系统级程序员。您可以了解有关Rust here历史的更多信息。

安装

本文主要着重于教授编程概念,我们不会深入研究安装。如果您想在计算机上全球安装Rust,则可以按照here的说明进行操作。另外,您可以使用Rust Playground app与文章进行编码。

让我们直接潜入并开始探索生锈!

变量

在Rust中声明变量很简单。我们使用let关键字来做到。

   let even_number = 2;

这与JavaScript中的let关键字相似,但Rust对其进行了不同的对待。默认情况下,生锈中的变量是不可变的,这意味着您不能更改分配给变量的值。

code representing rust variable declaration without mut keyword

如上所示,我们的代码失败了,因为我们无法更改变量even_number的值。要更改变量的值,我们必须添加代表“突变”的mut关键字。

 let mut even_number = 2;

code representing rust variable declaration with mut keyword

现在,我们的代码运行良好并打印输出(注意:忽略警告标志,它们仅表示我们尚未使用even_number变量)。

Rust中的变量只能具有一种类型,可以由Rust编译器明确分配或推断出一种类型。与JavaScript不同,一旦将类型分配给Rust中的变量,就无法更改。

 let mut even_number = 2;
// This will not compile
 even_number = true;

image showing we can change variable types in rust

如上所述,Rust编译器为“不匹配类型”带来了错误。它希望even_number变量始终是整数,但有一个布尔类型。

基本类型

布尔

布尔类型是一种只能具有两个值的类型:true或false。要声明Rust中的布尔值,我们使用bool关键字。

let is_valid: bool = true; 

默认情况下,声明为bool的变量将自动设置为false。

let is_updated: bool; // will be false 

布尔类型主要用于条件中,例如if和其他陈述,您可以在其中检查变量是否为TRUE并进行相应进行。

整数

锈的整数是没有小数点的数字。 Rust中有两种类型的整数:signedunsigned整数。

签名的整数

签名的整数可能是正面的或负的。示例包括: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中有两种类型的浮子:f32f64

示例:

   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

示例:

example code showing you can't add multiple types to a single array in Rust

上面的示例失败,因为列表中包含了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提供了三种循环:forwhileloop

用于循环

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的函数,其中两个参数num1num2,均为i8,以及一个返回类型-> i8

请注意,在addition功能中,我们没有明确添加return关键字。这是有效的,因为RUST将隐式返回函数中不会以半符号结尾的任何行

锻炼

现在我们已经涵盖了很多基础,现在该通过练习来测试您的技能了:

编写一个使用println的程序!将所有数字从1到100打印,但两个例外。对于可除以3的数字,请打印“ Fizz”,而不是数字,而对于5(而不是3)的数字,则打印“嗡嗡声”。对于3和5都可以排除的数字,请打印“ FizzBu​​zz”。

总而言之,本文提供了Rust中常见编程概念的概述。我们探索了变量,条件,基本类型和复合类型,例如数组和向量。此外,我们涵盖了循环,功能,甚至通过练习来巩固我们的理解。 Rust对性能和安全性的关注使其成为系统级编程和低级优化的绝佳选择。当您继续使用Rust的旅程时,请记住,练习是掌握任何编程语言的关键。拥抱Rust富有表现力语法的力量及其强大的功能,以构建高效且安全的应用程序。愉快的编码!