Rust入门4——基本编程概念

文章目录

    • [1. 变量与可变性](#1. 变量与可变性)
    • [2. 数据类型:标量类型](#2. 数据类型:标量类型)
    • [3. 数据类型:复合类型](#3. 数据类型:复合类型)
    • [4. 函数和注释](#4. 函数和注释)

1. 变量与可变性

声明变量使用let关键字

默认情况下,变量是不可变的

声明变量时,在let后加上mut关键字,就可以使变量可变

常量在绑定值后也不可变,但是和上面提到的变量有很多区别

  • 不可以使用mut,永远不可变
  • 声明使用const关键字,并且类型必须被标注
  • 可在任何作用域内被声明
  • 只能绑定到常量表达式,无法绑定到函数的调用结果或只能在运行时才能算出的值

隐藏shadowing

  • 可以使用相同的名字声明新的变量,新的变量会隐藏掉之前声明的同名变量
  • 使用let声明的同名新变量,它的类型可以与之前不同(比如之前是int,现在是string)

2. 数据类型:标量类型

数据类型有两个大类,一类是标量类型,一类是复合类型

基于使用的值,Rust编译器通常能够推断出它的具体类型。

但如果可能的类型比较多,例如把string转为整数的parse方法,就必须添加相应的标注,否则编译报错

一个标量类型代表一个单个的值,Rust中一共有4种主要的标量类型

  • 整数类型:比如u32,无符号整数,占32位。u代表无符号,i代表有符号。
    • Rust中的整数类型有i8,u8,i16,u16,i32,u32一直到128位
  • 浮点类型:f32,32位单精度浮点类型,f64,64位双精度浮点类型(默认类型)
  • 布尔类型:两种布尔类型true和false,一个字节,符号是bool
  • 字符类型:char类型,占4字节,单引号,单个字符

3. 数据类型:复合类型

Rust中提供了两种基本的复合类型:Tuple(元组)和数组

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

rust 复制代码
let tup: (i32,f64,u8) = (500,6.4,1);
let (x,y,z) = tup;
println!("{},{},{}",tup.0,tup.1,tup.2);
println!("{},{},{}",x,y,z);

数组:元素类型相同,且长度固定

rust 复制代码
let a = [1,2,3,4,5];
println!("{},{}",a[1],a[2]);

Rust中同样有类似c++stl中的vector

4. 函数和注释

Rust中使用fn关键字代表函数

rust 复制代码
fn main() {
    println!("main function!");
    func();
}
fn func(){
    println!("func execute!");
}

带参数

rust 复制代码
fn main() {
    println!("main function!");
    func(100,99);
}
fn func(x:i32,y:i32){
    println!("x = {}",x);
    println!("y = {}",y);
}

有返回值的函数

rust 复制代码
fn main() {
    println!("main function!");
    let res = func(3,4);
    println!("res = {}",res);
}
fn func(x:i32,y:i32) -> i32{
    println!("x = {}",x);
    println!("y = {}",y);
    return x + y;
}
相关推荐
badhope2 小时前
Mobile-Skills:移动端技能可视化的创新实践
开发语言·人工智能·git·智能手机·github
码云数智-园园3 小时前
微服务架构下的分布式事务:在一致性与可用性之间寻找平衡
开发语言
C++ 老炮儿的技术栈3 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
hz_zhangrl3 小时前
CCF-GESP 等级考试 2026年3月认证C++一级真题解析
开发语言·c++·gesp·gesp2026年3月·gespc++一级
Liu628883 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
IT猿手3 小时前
基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码
开发语言·matlab·无人机·openclaw·多无人机动态避障路径规划·无人机编队
AI科技星4 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
sunwenjian8864 小时前
Java进阶——IO 流
java·开发语言·python
波特率1152004 小时前
const关键字与函数的重载
开发语言·c++·函数重载
FL16238631294 小时前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#