zoukankan      html  css  js  c++  java
  • Rust 通用编程概念

    通用编程概念

    变量、基本类型、函数、控制流

    变量与可变性

    rust中的变量默认是不可变的,这样是为了能够让你安全并且方便地写出复杂、甚至并行的代码。

    当一个变量是不可变时,一旦它绑定到了某个值上面,这个值就再也无法被改变了。

    1 let x = 5;m,
    2 println!("The value of x is : {}", x);
    3 x = 6;
    4     //^ cannot assign twice to immutable variable 
    5 println!("The value of x is : {}", x)

    编译时的错误提示信息可以帮助我们避免修改一个不可变变量,这种情形非常容易导致一些难以察觉的bug,因为我们的代码逻辑可能会依赖于绑定这个变量上的不可变的值,所以一旦这个值发生变化,程序就无法继续按照期望的方式运行下去,这种bug往往难以追踪,特别是修改操作只在某些条件下偶然发生的时候。在类似的情形下,编译时的错误提示信息就显得相当重要了。

    编译器能保证那些声明为不可变的值一定不会发生改变。这意味着你无须在阅读和编写代码时追踪一个变量会如何变化,从而使代码逻辑更加易于理解和推导。

    可变变量

    通过在声明的变量前添加mut关键字可以使其可变,mut还会向阅读代码的人暗示其他代码可能会改变这个变量的值。

    let mut x = 5;
    println!("The value of x is {}", x);
    x = 6;
    println!("The value of x is {}", x);

    当你在使用某些重型数据结构时,适当地使用可变性去修改一个实例,可能比赋值和重新返回一个新分配的实例要更有效;而当数据结构较为轻量的时候,采用更偏向函数式的风格,通过创建新变量来进行赋值,可能会使代码更加易于理解。

    变量与常量之间的不同

    常量,就像不可变变量一样,绑定到常量上的值无法被其他代码修改。

    常量和变量之间的区别:

    • 不能用mut关键字来修饰一个常量,常量不仅是默认不可变的,他总是不可变的。

    • 需要使用const关键字而不是let关键字来声明一个常量,在声明的同时,必须标注值的类型

    • 常量可以被声明在任何作用域中,甚至包括全局作用域。用途:可以被不同部分的代码所共享

    • 只能将常量绑定到一个常量表达式上,而无法将一个函数的返回值,或其他需要在运行时计算的值绑定到常量上

    const MAX_POINTS: u32 = 100_000;

    将整个程序中应编码的值声明为常量并给予其有意义的名字,可以帮助后来的维护者去理解这些值的意义,而使用同一常量来索引相同的应编码值也能为将来的修改提供方便。

    常量在整个程序运行的过程中都有自己声明的作用域内有效,这使得常量可以被用于在程序的不同代码之间共享值。

    隐藏

    一个新声明的变量可以覆盖掉旧的同名变量: 叫做第一个变量被第二变量隐藏了。

    let x = 5;
    let x = x + 1;
    let x = x * 2;
    println!("The value of x is {}", x);
    • 因为如果不是在使用let关键字的情况下重新为这个变量赋值,则会导致编译错误。通过使用let,可以对这个值执行一系列的变换操作,并允许这个变量在操作完成后保持自己的不变性。

    • 由于重复使用let关键字会创建出新的变量,所以我们可以在复用变量名称的同时改变它的类型。

    隐藏机制不同于将一个变量声明为mut,

    let sapce = "     ";
    let space = space.len();

    数据类型

    Rust中的每一个值都有其特定的数据类型,rust会根据数据的类型来决定应该如何处理他们:

    • 标量类型

    • 复合类型

    rust是一门静态类型语言,这意味着他在编译程序的过程中需要知道所有变量的具体类型。

    大部分情况下,编译器都可以根据我们绑定、使用变量的值来自动推导出变量的类型。

    let guess : u32 = "42".parse().expect("Not a number");

    这里必须显示的标注类型。

     

    标量类型

    标量类型是单个值类型的统称。

    • 整数

    • 浮点数

    • 布尔值

    • 字符

    整数类型:

    长度有符号无符号
    8bit i8 u8
    16bit i16 u16
    32bit i32 u32
    64bit i64 u64
    arch isize

    usize

    Isize 和 size 是两种特殊的整数类型,他们的长度取决于程序运行的目标平台。

    注意的:除了byte,其余所有的字面量都可以使用类型后缀。例如: b'a'

    rust对于整数字面量的默认推到类型i32通常是一个很好的选择。

    较为特殊的两个整型usize和isize则是主要用作某些集合的索引。

    整数溢出:在debug模式下发生整数溢出会发出pani!, 而在release模式下,不会包含那些触发panic的代码。

    rust会在溢出发生时执行二进制补码环绕,任何超出类型最大值的数据都会被环绕为类型最小值。

    浮点数类型

    在rust中,默认会将浮点数字面量的类型推到为f64.

    let x = 2.0; // f64
    let y: f32 = 3.0; //f32

    数值运算

    let difference = 43.0 - 23.0;
    let product = 3 * 3;
    let quotient = 56.7 / 32.2;
    let remainder = 43 % 3;

    布尔类型

    let t = true;
    let f: bool = false;

    字符类型 

    let x = 'z';

    rust中的char类型占四个字节,是一个unicode标量值。

    
    
    
    
     
  • 相关阅读:
    xml转义字符在mybatis动态sql中的使用
    jdbc类型与java类型
    aop日志(记录方法调用日志)
    mysql数据库关联查询【lert join】常见使用
    maven项目基本配置
    mapper文件的参数传入与获取
    idea新建项目出现push rejected如何解决
    快速从2个List集合中找出相同/不同元素
    Windows 环境下安装RocketMQ
    RabbitMQ java客户端集成 Spring 开发环境
  • 原文地址:https://www.cnblogs.com/Davirain/p/13291291.html
Copyright © 2011-2022 走看看