ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Rust基础(01) 通用编程概念

2022-07-20 01:31:06  阅读:56  来源: 互联网

标签:01 i32 编程 数据类型 元组 let 返回值 Rust


本文面向有一定编程基础的同学

Rust 中的基本数据类型

标量

Rust 基本数据类型(标量)大的来说分为整型,浮点型,字符型,布尔型。
整型中分为按照是否有符号位分为有符号整型和无符号整型,按位数分为8位,16位,32位,64位。两者结合产生8种整型数据类型,及有符号的:i8, i16, i32, i64,以及无符号的:u8, u16, u32, u64,同时还有 isize,和 usize 两种依据操作系统架构而定的两种类型,及在 32位操作系统中为 i32u32,在64位操作系统中为 i64u64(可对比Golang 中的int类型)。

浮点型则只有 f32f64 两种类型,同样只有两种类型的还有布尔类型,只有 falsetrue,不做赘述。

字符型则是使用单引号包裹的单个字符,关于字符型,我们会在以后有机会深入探讨,此处先按下不表。

对于数值型 Rust 允许在数值末尾添加具体数据类型作为标识如 789u8 就标识值为 789的无符号8位整数(显然已经超出范围)。

复合类型

Rust基本数据类型中的复合数据类型包括元组和数组。
数组与其他语言基本相似:

  • 使用方括号包裹
  • 使用逗号作为分隔
  • 元素必须是相同数据类型
  • 通过方括号加下标访问数组元素
  • 下标从0开始
  • 数组长度不可变
let arr = [1,2,3,33];
arr[0];

元组与数组的概念基本相似,不同点在于

  • 元组中的元素数据类型可以不同
  • 元组使用圆括号包裹元素
  • 元组通过点加下标访问元素
let tup = (1,2,3,"$");
tup.0;

变量及其声明

Rust 通过 let 关键字定义变量比如下面这样:

let i = 100;

也可以在声明的时候指定变量的数据类型

let i: i32 = 100;

如果不在申明的时候指定数据类型,则编译器会通过赋值来进行类型推断。比较特殊的是元组和数组的指定数据类型方式如下:

// 在方括号中第一个位置表示元素数据类型,第二个位置表述元素个数
let arr:[u8; 4] = [1,2,3,33];
// 元组则是依次指定所有元素的数据类型
let tup:(u8,u8,u8,&str) = (1,2,3,"$");

控制流

控制流无外乎就是分支和循环。

分支

Rust 的分支有:ifmatch。即便不用说明你也应该能猜到既然支持 if 那么对于 if-else, if-else-if这样的结构自然也是支持的,在写法上与其他语言(如Golang)也基本一样,if 语句只能判断 bool 值——没有C语言那样的非零既为真的规则,Rust 中传给 if 进行判断的表达式最终必须要得出一个 bool 值。

if 5  > 2 {
	println!("5 > 2");
}

关于 match 会在后续和模式匹配一起讲解,此处先挖一个坑,你可以你可以理解为 match 是Rust 提供的一个比switch更牛逼的多路分支结构语句(只能这样粗略的认为,Rust 并没有提供 switch 语句,而且 match 与 switch 的可比性并不强,这样说只是意在帮你快速构建一个Rust的印象)。

循环结构

Rust 中的循环结构有:loop, while,do-while,for。

// 一個普通的 for 循環,`..` 是 `Range` 的語法
for i in 1..100 {
    print!("{},",i);
}
println!();

// 普通的 loop 循環,直到手動調用 break 退出之前都會一直循環執行
let mut i = 100;
loop {
    print!("{},",i);
    i -= 1;
    if i <= 0 {
        break;
    }
}
println!();

// 另一個普通的 loop 循環,但是可以通過 break 返回一個值
let mut i = 1000;
let mut c:u32 = 0;
let count = loop {
    c += 1;
    i /= 2;
    if i <= 0 {
        break c
    }
};
println!("{}", count);

// 這個沒啥好說的
while i < 100 {
    i += 1;
}

除了在 loop 中可以通過 break 返回值之外,Rust 基本與其他語言的循環控制結構沒啥不一樣。

函數

在講函數之前稍微提兩個概念: 表達式和语句——经过一系列的动作之后没有任何返回的叫語句,有返回的叫表達式。假如把 Rust 当中的任何行爲都看作函數調用,那麼就是有返回值的函數是表達式,沒有返回值的函數是語句(不要說你把返回值當參數傳遞的情況)。
那麼這兩個概念有什麼作用呢?那就是關於函數返回值,除了顯示的調用 return 返回,Rust 會講函數的最後一個語句的結果當作返回值返回,而不需要使用 return 手動返回。比如下面的函數都返回相同的結果。.

fn add_1(a: i32, b: i32)-> i32{
    a+b
}

fn add_2(a: i32, b: i32)-> i32{
    return a+b;
}

從這兩個例子中你也可以看見:

  • fn 是函數申明關鍵字
  • fn 之後的是函數名
  • 返回值數據類型通過 -> 指定
  • 參數需要指定數據類型(不可以像 go 那樣一次指定多個參數的數據類型)
  • 返回值通過 return指定或由最後一個表達式返回。

标签:01,i32,编程,数据类型,元组,let,返回值,Rust
来源: https://www.cnblogs.com/ltozvxe/p/16492593.html

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有