ICode9

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

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

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

标签: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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

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

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

ICode9版权所有