首页 > 编程语言 >02.通用编程概念

02.通用编程概念

时间:2022-11-27 19:26:06浏览次数:83  
标签:02 通用 变量 Tuple 编程 let 数组 类型 Rust

变量与可变性

  • 声明变量使用let 关键字
  • 默认情况下,变量是不可变的 (Immutable)
  • 声明变量时,在变量前面加上 mut,就可以使变量可变

变量与常量

  • 常量 (constant),常量在绑定值以后也是不可变的,但是它与不可变的变量有很多区别:
    • 不可以使用 mut,常量永远都是不可变的
    • 声明常量使用 const 关键字,它的类型必须被标注
    • 常量可以在任何作用域内进行声明,包括全局作用域
    • 常量只可以绑定到常量表达式,无法绑定到函数的调用结果或只能在运行时才能计算出的值
  • 在程序运行期间,常量在其声明的作用域内一直有效
  • 命名规范:Rust 里常量使用全大写字母,每个单词之间用下划线分开

Shadowing(隐藏)

  • 可以使用相同的名字声明新的变量,新的变量就会 shadow(隐藏)之前声明的同名变量
    • 在后续的代码中这个变量名代表的就是新的变量
  • shadow 和把变量标记为 mut 是不一样的:
    • 如果不使用let 关键字,那么重新给非 mut 的变量赋值会导致编译时错误
    • 而使用let 声明的同名新变量,也是不可变的
    • 使用 let 声明的同名新变量,它的类型可以与之前不同

数据类型

  • 标量和复合类型
  • Rust 是静态编译语言,在编译时必须知道所有变量的类型
    • 基于使用的值,编译器通常能够推断出它的具体类型
    • 但如果可能的类型比较多(例如把 String 转为整数的 prse 方法) ,就必须添加类型的标注,否则编译会报错

标量类型

  • 一个标量类型代表一个单个的值
  • Rust 有四个主要的标量类型!
    • 整数类型
    • 浮点类型
    • 布尔类型
    • 字符类型

整数溢出

  • 例如: u8 的范围是0-255,如果你把一个 u8 变量的值设为 256,那么:
    • 调试模式下编译:Rust 会检查整数溢出,如果发生溢出,程序在运行时就会 panic
    • 发布模式下 (--release) 编译:Rust 不会检查可能导致 panic 的整数溢出。
      • 如果溢出发生:Rust 会执行“环绕”操作:
        • 256变成0,257 变成1...

浮点类型

  • Rust 有两种基础的浮点类型,也就是含有小数部分的类型
    • f32,32位,单精度
    • f64,64位,双精度
  • Rust 的浮点类型使用了IEEE-754 标准来表述
  • f64 是默认类型,因为在现代 CPU 上f64 和f32 的速度差不多,而且精度更高。

字符类型

  • Rust 语言中 char 类型被用来描述语言中最基础的单个字符。
  • 字符类型的字面值使用单引号
  • 占用 4 字节大小
  • 是 Unicode 标量值,可以表示比 ASCII 多得多的字符内容:拼音、中日韩文、零长度空白字符、emoii 表情等。
    -U+0000到U+D7FF
    • U+EO00到U+1FFFF
  • 但 Unicode 中并没有“字符”的概念,所以直觉上认为的字符也许 Rust 中的概念并不相符

复合类型

  • 复合类型可以将多个值放在一个类型里
  • Rust 提供了两种基础的复合类型: 元组 (Tuple ) 、数组

Tuple

  • Tuple 可以将多个类型的多个值放在一个类型里。
  • Tuple 的长度是固定的:一旦声明就无法改变

创建Tuple

*在小括号里,将值用逗号分开

  • Tuple 中的每个位置都对应一个类型,Tuple 中各元素的类型不必相同

获取Tuple的元素值

  • 可以使用模式匹配来解构 (destructure)一个 Tuple 来获取元素的值
let tuple = ("1",2,false);
let (x,y,z)=tuple;

访问Tuple的元素

  • 在 fuple 变量使用点标记法,后接元素的索引号

数组

  • 数组也可以将多个值放在一个类型里
  • 数组中每个元素的类型必须相同
  • 数组的长度也是固定的

声明一个数组

let arr=[1,2,3,4,5];

数组的用处

  • 如果想让你的数据存放在 stack(栈)上而不是 heap(堆)上,或者想保证有固定数量的元素,这时使用数组更有好处
  • 数组没有 Vector 灵活 (以后再讲)
    • Vector 和数组类似,它由标准库提供
    • Vector 的长度可以改变
    • 如果你不确定应该用数组还是 Vector,那么估计你应该用 Vector。

函数

函数体中的语句与表达式

  • 函数体由一系列语句组成,可选的由一个表达式结束
  • Rust 是一个基于表达式的语言
  • 语句是执行一些动作的指令
  • 表达式会计算产生一个值
  • 函数的定义也是语句
  • 语句不返回值,所以不可以使用 let 将一个语句赋给一个变量
//表达式赋值
let y={
        let x=1;
        x+3
    };

函数的返回值

  • 在 ->符号后边声明函数返回值的类型,但是不可以为返回值命名
  • 在 Rust 里面,返回值就是函数体里面最后一个表达式的值
  • 若想提前返回,需使用 return 关键字,并指定一个值
    • 大多数函数都是默认使用最后一个表达式最为返回值

控制流

if else,else if

let num=if condition {5} else {6};

rust循环

loop,while,for

range

  • 标准库提供
    *指定一个开始数字和一个结束数字,Range 可以生成它们之间的数字 (不含结束)
  • rev 方法可以反转 Range
for num in (1..4).rev(){
    println!("{}!",num);
}

标签:02,通用,变量,Tuple,编程,let,数组,类型,Rust
From: https://www.cnblogs.com/huiteresa/p/16930364.html

相关文章

  • 2022-2023-1 20221325《计算机基础和程序设计》第十三周学习总结
    班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13作业目标:《C语言程序设计》第12章作业......
  • NOIP2022 Prewalk
    2022.11.25PreTalkNOIP前的一晚不知觉5个月飞逝,作为高二生也3月有余。很喜欢Alex_Wei说过的,收获来源于成长一切都是未知,我们渴望、尝试从已知推向或者说推导未知之......
  • 2022-2023-1 20221422 《计算机基础与程序设计》第十三周学习总结
    作业信息班级链接https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求https://www.cnblogs.com/rocedu/p/9577842.html这个作业的目标学习云班......
  • Bochs编程环境安装
    Bochs编程环境安装写在前面为了更好的记录自己学习过程以及踩过的坑,记录一下《操作系统真相还原》的编程环境安装。安装过程参考了CSDN的这篇博客:安装VmwareStation......
  • 网络编程周回顾
    目录软件开发架构架构总结网络编程前戏OSI七层协议简介OSI七层协议之物理连接层OSI七层协议之数据链路层网络相关专业名词OSI七层协议之网络层OSI七层协议之传输层传输层之......
  • CVE-2021-42287、CVE-2021-42278 漏洞复现——名词解析
    DNSlogDNSlog就是存储在DNS服务器上的域名信息,它记录着用户对域名www.baidu.com等的访问信息,类似日志文件LDAPLDAP的全称是LightweightDirectoryAccessProtocol......
  • rac dg活动复制完成后,备库节点1查询数据库状态时报错ORA-00204、ORA-00202,且告警日志
    问题描述:racdg活动复制完成后,备库节点1查询数据库状态时报错ORA-00204、ORA-00202,且告警日志中出现ORA-15025、ORA-27041异常,如下所示:说明:racdg磁盘组采用的是多路径+ud......
  • 20221127 英语笔记
    Word\(\textsf{tent}n.\)帐篷\(\textsf{notice}n.\)布告\(\textsf{recently}adv.\)近期\(\left\{\begin{array}{ll}\textsf{accept}&\textsf{主观意义下(你......
  • NOIP2022 游记
    无所谓失败可言,等待你是明天。Day2022.11.27Day2022.11.25写过一篇总结应该算是,没来得及发出,Siteishere。Day2022.11.26NOIP2022如约而至8:30开考,T1plant30......
  • P8867 [noip2022]建造军营 题解
    题意:给定一张图,选择一些点和一些边,使得割断任意没有选的边,被选中的点仍连通。对\(10^9+7\)取膜。\(n\leq5\cdot10^5\)这篇题解会略讲缩边,详讲自己推dp状态与......