Rust编程-通用编程概念

开胃菜:用Rust编写n阶斐波那契数列:

fn fiber(n:i32)->i32{
     if n <=1 {
        1
     }else{
       fiber(n-1) + fiber(n-2)
     }
}

 Rust函数的返回值,不用添加return关键字,就可以实现。还是很有趣的!!!

循环:

有三种循环:for、while和loop

1. for循环:

        a. 对数组a进行for循环:

for element in a.iter() {
}

        b. 对Range进行for循环:

for number in (1..4).rev() {
  println!("{}!", number);
}

for循环好处是不受数据结构元素长度的限制。for循环的安全性和简捷性使它成为了Rust中最为常用的循环结构。

2. while循环:

while index < 5 {

}

 相比loop循环使用if、else及break来完成整个循环,while已经很简洁了。

3. loop循环:

let result = loop {
  counter += 1;
  if counter == 10 {
    break counter * 2;
  }
};

 break关键字返回counter * 2,将循环的返回结果赋值给result。

条件判断:

if 条件与类型转换:

        Rust不会自动尝试将非布尔类型的值转换为布尔类型

let number = 3;
if number { // 这里是错误的,需要改成numbe != 0
  println!("number was three");
}

if 表达式:

let number = if condition {
    5
} else {
    "six"
};

强大的分支结构语法match:(待补充

注释:

1. 两道斜杠

在Rust中,注释必须使用两道斜杠开始,并持续到本行结尾

2.文档注释的注释格式(待补充

函数:

1. 函数返回类型:

         a. 函数返回类型使用->

         b. 使用return提前返回,或者使用隐式返回表达式

fn five() -> i32 {
 5
}

        c. 函数默认返回值是空元组()

2. 函数中的表达式和指令:

语句指那些执行操作但不返回值的指令,而表达式则是指会进行计算并产生一个值作为结果的指令

let y = {
  let x = 3;
  x + 1
};

  x+1是表达式,可以作为结果返回

数据类型:

 Rust内置两种复合数据类型:元祖和数组。

1. 数组:

       数组中的每一个元素都必须是相同的类型。Rust中的数组拥有固定的长度,一旦声明就再也不能随意更改大小。

       数组的类型定义:let a: [i32; 5] = [1, 2, 3, 4, 5];

      创建一个含有相同元素的数组:let a = [3; 5];

      非法的数组元素访问:索引超出了当前数组的长度,Rust就会发生panic。第一个涉及Rust安全原则。

2. Rust标准库也提供了一个更加灵活的动态数组(vector):(待补充)‘’

3. 元组:

元祖可以将其他不同类型的多个值组合进一个复合类型中。元组还拥有一个固定的长度:你无法在声明结束后增加或减少其中的元素数量。

元祖解构:

let tup = (500, 6.4, 1);
let (x, y, z) = tup;

标量类型:

Rust中内建了4种基础的标量类型:整数、浮点数、布尔值及字符

整数类型:

        

1. 符号整数类型的名称会以i开头,无符号整数以u开头 

2. arch是根据平台架构相关的整数类型通常是指isizeusize。在32位系统上,isize是32位(4字节);在64位系统上,则是64位(8字节);usize是一个无符号的整数类型,与isize相似,它的大小也是根据平台来定,用于与指针大小相匹配的无符号算术操作。它常用于集合的长度数组索引等场景,当确定索引值永远为非负时

3. 对于一个位数为n 的有符号整数类型,它可以存储从-(2^ (n -1) )到2 ^(n -1)-1范围内的所有整数;无符号整数类型而言,则可以存储从0到2 n -1范围内的所有整数

4.书写整数字面量

 除了Byte,其余所有的字面量都可以使用类型后缀,比如57u8,代表一个使用了u8类型的整数57。同时你也可以使用_作为分隔符以方便读数,比如1_000

5. 整数溢出:

编译时使用了带有--release标记的发布(release)模式,那么Rust就不会包含那些可能会触发panic的检查代码。作为替代,Rust会在溢出发生时执行二进制补码环绕。简而言之,任何超出
类型最大值的数值都会被“环绕”为类型最小值以u8为例,256会变为0,257会变为1

在调试(debug)模式下进行编译,那么Rust就会在程序中包含整数溢出的
运行时检测代码,并在整数溢出发生时触发程序的panic

浮点数:

两种类型是f32和f64。在现代CPU中f64与f32的运行效率相差无几,却拥有更高的精度,
所以在Rust中,默认会将浮点数字面量的类型推导为f64。

对于所有的数值类型,Rust都支持常见的数学运算:加法、减法、乘法、除法及取余

布尔类型:

字符类型:

        在Rust中,char类型被用于描述语言中最基础的单个字符。char类型使用单引号指定,而不同于字符串使用双引号指定。

       Rust中的char类型占4字节,是一个Unicode标量值。emoji表情都可以作为一个有效的char类型值

常亮与变量:

变量:

Rust中的变量默认是不可变的。为了能够让你安全且方便地写出复杂、甚至是并行的代
码。过在声明的变量名称前添加mut关键字来使其可变。mut还会向阅读代码的人暗示其他代码
可能会改变这个变量的值

常亮:

常量不仅是默认不可变的,它还总是不可变的。

常量可以被声明在任何作用域中,甚至包括全局作用域

在Rust程序中,我们约定俗成地使用以下画线分隔的全大写字母来命名一个常量:

const MAX_POINTS: u32 = 100_000;
 变量隐藏(shadow):
let x = 5;
let x = x + 1;
let x = x * 2;

通过使用let,我们可以对这个值执行一系列的变换操作,并允许这个变量在操作完成后保持自己的不可变性。

隐藏机制与mut的另一个区别在于:由于重复使用let关键字会创建出新的变量,所以我们可以在复用变量名称的同时改变它的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值