天天看点

Rust编程语言(二)Rust基础1. 使用IDEA2. Rust编程基础概念

分享Rust编程语言的相关知识笔记,持续更新中!

​ 本章介绍Rust的基础学习,包含使用Clion,关键字,变量,数据类型,函数等!

1. 使用IDEA

一直使用终端,界面不太友好,对我们来说操作还是有一定的难度,我们可以选择现成的IDEA,Vscode,Clion进行项目开发!(前提:已经下载好装好Rust!!!)

  • 打开IDEA插件,搜索Rust,下载,然后重启IDEA
  • 新建项目->选择Rust->创建
    Rust编程语言(二)Rust基础1. 使用IDEA2. Rust编程基础概念
    Rust编程语言(二)Rust基础1. 使用IDEA2. Rust编程基础概念
  • 一个基础的Rust项目我们就创建好了,下面将介绍一些基本通用的编程概念!

2. Rust编程基础概念

2.1 关键字

Rust 语言有一组保留的 关键字(keywords),就像大部分语言一样,它们只能由语言本身使用。记住,你不能使用这些关键字作为变量或函数的名称。大部分关键字有特殊的意义,你将在 Rust 程序中使用它们完成各种任务;一些关键字目前没有相应的功能,是为将来可能添加的功能保留的。可以在Rust程序设计语言附录 A 中找到关键字的列表

2.2 变量

2.2.1 不可变量

在Rust中,变量默认是不可改变的!Rust 编译器保证,如果声明一个值不会变,它就真的不会变。这意味着当阅读和编写代码时,不需要追踪一个值如何和在哪可能会被改变,从而使得代码易于推导。

Rust编程语言(二)Rust基础1. 使用IDEA2. Rust编程基础概念

2.2.2 可变变量

如果想使自己的变量可以改变,只需要在变量前面添加

mut

即可!

Rust编程语言(二)Rust基础1. 使用IDEA2. Rust编程基础概念

既然有了可变变量的选择,那我们在平时打代码该选择可变的还是不可变的!这边官方给出的建议是权衡取舍!例如,使用大型数据结构时,适当地使用可变变量,可能比复制和返回新分配的实例更快。对于较小的数据结构,总是创建新实例,采用更偏向函数式的编程风格,可能会使代码更易理解,为可读性而牺牲性能或许是值得的。

2.2.3 变量和常量的区别

我们学习JAVA或者其他一些编程语言的时候也学到了常量,也是不能改变的量!在Rust中变量是默认不可改变的,而常量是一定不可以改变的!

声明常量使用关键字

const

而不是

let

,而且必须要注明值的类型!

常量可以在任何作用域中声明,包括全局作用域,这在一个值需要被很多部分的代码用到时很有用。

(Rust 常量的命名规范是使用下划线分隔的大写字母单词,并且可以在数字字面值中插入下划线来提升可读性)

Rust编程语言(二)Rust基础1. 使用IDEA2. Rust编程基础概念

2.2.4 隐藏

我们可以定义一个与之前变量同名的新变量,而新变量会 隐藏 之前的变量。Rustacean 们称之为第一个变量被第二个 隐藏 了,这意味着使用这个变量时会看到第二个值。可以用相同变量名称来隐藏一个变量,以及重复使用

let

关键字来多次隐藏.

mut

与隐藏的另一个区别是,当再次使用

let

时,实际上创建了一个新变量,我们可以改变值的类型,但复用这个名字。

3. 数据类型

Rust 是 静态类型(statically typed)语言,也就是说在编译时就必须知道所有变量的类型。

3.1 标量类型

3.1.1 整形

Rust编程语言(二)Rust基础1. 使用IDEA2. Rust编程基础概念

有符号 和 无符号 代表数字能否为负值,不知道使用哪种类型的数字时,我们使用Rust默认的类型即可!

3.1.2 浮点型

Rust 也有两个原生的 浮点数(floating-point numbers)类型,它们是带小数点的数字。Rust 的浮点数类型是

f32

f64

,分别占 32 位和 64 位。默认类型是

f64

,因为在现代 CPU 中,它与

f32

速度几乎一样,不过精度更高。

数值运算

Rust 中的所有数字类型都支持基本数学运算:加法、减法、乘法、除法和取余。

3.1.3 布尔型

正如其他大部分编程语言一样,Rust 中的布尔类型有两个可能的值:

true

false

3.1.4 字符类型

Rust 的

char

类型是语言中最原生的字母类型。Rust 的

char

类型的大小为四个字节(four bytes),并代表了一个 Unicode 标量值(Unicode Scalar Value),这意味着它可以比 ASCII 表示更多内容。在 Rust 中,拼音字母(Accented letters),中文、日文、韩文等字符,emoji(绘文字)以及零长度的空白字符都是有效的

char

值!

3.2 复合类型

3.2.1 元组

元组是一个将多个其他类型的值组合进一个复合类型的主要方式。元组长度固定:一旦声明,其长度不会增大或缩小。

tup

变量绑定到整个元组上,因为元组是一个单独的复合元素。为了从元组中获取单个值,可以使用模式匹配(pattern matching)来解构(destructure)元组值。

除了使用模式匹配解构外,也可以使用点号(

.

)后跟值的索引来直接访问它们。

元组的第一个索引值是 0

let u: (i32, i32, f64, char) = (1, 2, 3.1, 'a');
           

3.2.2 数组

与元组不同,数组中的每个元素的类型必须相同。Rust 中的数组与一些其他语言中的数组不同,因为 Rust 中的数组是固定长度的:一旦声明,它们的长度不能增长或缩小。

Rust 中,数组中的值位于中括号内的逗号分隔的列表中,数组非常有用。但是数组并不如 vector 类型灵活。vector 类型是标准库提供的一个 允许 增长和缩小长度的类似数组的集合类型。当不确定是应该使用数组还是 vector 的时候,你可能应该使用 vector

let a = [1,2,3,4];
print!("{}",a[2]);
           

4. 函数

函数遍布于 Rust 代码中。你已经见过语言中最重要的函数之一:

main

函数,它是很多程序的入口点。你也见过

fn

关键字,它用来声明新函数。

Rust 代码中的函数和变量名使用 snake case 规范风格。在 snake case 中,所有字母都是小写并使用下划线分隔单词。这是一个包含函数定义示例的程序:

Rust 不关心函数定义于何处,只要定义了就行!

4.1 函数参数

函数也可以被定义为拥有 参数(parameters),参数是特殊变量,是函数签名的一部分。当函数拥有参数(形参)时,可以为这些参数提供具体的值(实参)。技术上讲,这些具体值被称为参数(arguments),但是在日常交流中,人们倾向于不区分使用 parameter 和 argument 来表示函数定义中的变量或调用函数时传入的具体值。

必须要声明每个参数的类型!当一个函数有多个参数时,使用逗号分隔!

fn main() {
    test(1,4);
}

fn test(x:i32,y:i32){
    print!("{}",x+y);
}
           

4.2 返回值

Rust 是一门基于表达式(expression-based)的语言,这是一个需要理解的(不同于其他语言)重要区别。

表达式的结尾没有分号。如果在表达式的结尾加上分号,它就变成了语句,而语句不会返回值

函数可以向调用它的代码返回值。我们并不对返回值命名,但要在箭头(

->

)后声明它的类型。在 Rust 中,函数的返回值等同于函数体最后一个表达式的值。使用

return

关键字和指定值,可从函数中提前返回;但大部分函数隐式的返回最后的表达式。

5. 注释

在 Rust 中,注释必须以两道斜杠开始,并持续到本行的结尾。对于超过一行的注释,需要在每一行前都加上

//

,像这样:

6.if

fn main() {
    let number = 3;

    if number < 5 {
        println!("condition was true");
    } else {
        println!("condition was false");
    }
}


fn main() {
    let number = 6;

    if number % 4 == 0 {
        println!("number is divisible by 4");
    } else if number % 3 == 0 {
        println!("number is divisible by 3");
    } else if number % 2 == 0 {
        println!("number is divisible by 2");
    } else {
        println!("number is not divisible by 4, 3, or 2");
    }
}

fn main() {
    let condition = true;
    let number = if condition {
        5
    } else {
        6
    };

    println!("The value of number is: {}", number);
}
           

不像 Ruby 或 JavaScript 这样的语言,Rust 并不会尝试自动地将非布尔值转换为布尔值。必须总是显式地使用布尔值作为

if

的条件。

7.循环

Rust 有三种循环:

loop

while

for

loop

关键字告诉 Rust 一遍又一遍地执行一段代码直到你明确要求停止,使用关键字

break

跳出循环!

fn main() {
    loop{
        println!("aaa");
    }
}


fn main() {
   let mut a = 2;
    while a != 0 {
        println!("a");
        a=a-1;
    }
}

fn main() {
  let a = [1,2,3,6,7];
  for i in a.iter(){
      println!("{}",i)
  }
}