Rust知识篇03-字符、布尔、单元类型、输出、语句表达式

Rust知识篇03-字符、布尔、单元类型、输出、语句表达式

字符类型(char)

类似英文中的字母,中文中的汉字

javascript 复制代码
fn main() {
    let _c = 'z';
    let _z = 'ℤ';
    let _g = '国';
    let _heart_eyed_cat = '😻';
    println!("{}, {}, {}, {}", _c, _z, _g, _heart_eyed_cat)
}

//输出
z, ℤ, 国, 😻

字符类型占用 4 个字节

javascript 复制代码
fn main() {
    let x = '中';
    println!("字符'中'占用了{}字节的内存大小", size_of_val(&x));
}

//输出 
字符'中'占用了4字节的内存大小

字符和字符串

Rust 的字符只能用 '' 来表示, "" 是留给字符串的

🍎字符和字符串区别

(单个其实就是字符(类似A),多个字符就是字符串(类似ABD))

字符 是单个文本单位,而字符串是由多个字符组成的文本。

  1. 字符(Character)
    • 定义:字符是单个字母、数字、符号或其他可显示或不可显示的符号。它通常用来表示文本中的单个单位。
    • 存储:字符通常占用一个字节(在ASCII编码中)或两个字节(在Unicode编码中)。
    • 示例Ab1# 都是字符。
    • 用途:字符主要用于表示文本的单个元素,常用于字符处理、字符比较等场景。
  2. 字符串(String)
    • 定义:字符串是由一系列字符组成的文本序列,可以包括空格、标点符号、数字等字符。字符串是字符的集合,可以是一个或多个字符。
    • 存储 :字符串通常是一个字符数组,大小取决于字符串的长度,每个字符通常占用一个或两个字节(取决于字符编码)。在一些语言中,字符串的结尾可能会有一个特殊的标识符(例如 C 语言中的 null 终止符 \0)。
    • 示例"Hello""123""abc123!" 都是字符串。
    • 用途:字符串用于表示更复杂的文本信息,通常在处理文本数据时用作输入、输出或存储信息的方式。

布尔(bool)

布尔类型有两个值:truefalse,布尔值占用内存的大小为 1 个字节

Rust 中布尔类型(<font style="color:rgb(36, 41, 47);">bool)主要用于流程控制

javascript 复制代码
// if 条件判断(if 语句)
fn main() {
    let is_raining:bool = true;
    if is_raining {
        println!("带伞出门");
    } else {
        println!("不用带伞");
    }
}

// while循环
fn main() {
    let mut count = 0;
    let continue_loop = true;
    while continue_loop {
        count += 1;
        println!("计数: {}", count);

        if count == 5 {
            break;
        }
    }
}

// 逻辑运算判断
fn main() {
    let has_ticket = true;
    let is_adult = false;

    if has_ticket && is_adult {
        println!("允许进场");
    } else {
        println!("不允许进场");
    }
}

单元类型(unit)

单元类型就是 ()

常见的下面输出的返回就是 ()

javascript 复制代码
println!("允许进场");

输出

Rust 中,println!print! 都用于输出文本,区别如下:

👉println!(注意是L的小写)

在输出文本后自动换行。也就是说,每次调用 println!,都会在输出的内容后面添加一个换行符 \n

可以用于输出文本并在结尾自动换行

plain 复制代码
fn main() {
    println!("Hello, world!");  // 会输出 "Hello, world!" 并换行
}

👉print!

print!输出但是不会自动换行。

plain 复制代码
fn main() {
    print!("Hello, ");  // 不会换行
    print!("world!");   // 会继续在同一行输出
}

👉eprintln!

eprintln!println! 类似,区别它输出的是标准错误流(stderr),而 println! 输出的是标准输出流(stdout)。eprintln! 也会自动换行

plain 复制代码
fn main() {
    eprintln!("This is an error message!");
}
  • 特点 :通常用于输出错误信息,和 println! 区别在于它发送到标准错误流而不是标准输出流。

👉format!

format! 用来将格式化的字符串返回为 String 类型,不输出到控制台。可以用于生成字符串而不是直接输出

plain 复制代码
fn main() {
    let name = "Alice";
    let age = 30;
    
    let formatted_string = format!("My name is {} and I am {} years old.", name, age);
    println!("{}", formatted_string);  // 输出: My name is Alice and I am 30 years old.
}

可以将我们需要格式化字符串存储到变量进行进一步处理

🍎实际应用-数字格式化
javascript 复制代码
//数字格式化
fn main() {
  let pi = 3.1415926535;
  let formatted = format!("Pi is approximately {:.3}", pi);  // 保留3位小数
  println!("{}", formatted);  
  // 输出: Pi is approximately 3.142
}

语句和表达式

语句(statement)和表达式(expression)

区分语句和表达式主要就是:语句没有返回值,表达式有返回值

🍎语句
javascript 复制代码
// 语句
fn main() {
    let _a = 8;
    let _b: Vec<f64> = Vec::new();
    let (_a, _c) = ("hi", false);
}
🍎表达式
javascript 复制代码
// 表达式
let x = {
    let temp = 10;
    temp + 5  // 注意这里没有分号,块的结果是 temp + 5
};

Rust 的函数体是由一系列语句组成,最后由一个表达式来返回值

javascript 复制代码
fn main() {
    let x= 5;
    let y = 10;
    let z = x + y;
    println!("The sum of {} and {} is {}", x, y, z);
    // The sum of 5 and 10 is 15
}

Rust需要明确区分基于语句(statement)和表达式(expression)的方式这两个概念

表达式是函数式语言的重要特征,表达式总要返回值。

javascript 复制代码
fn main() {
    let x=add_with_extra(5, 10);
    println!("The sum of X is {}", x);
   // The sum of X is 21
}
fn add_with_extra(x: i32, y: i32) -> i32 {
    let x = x + 1; // 语句
    let y = y + 5; // 语句
    x + y // 表达式
}
相关推荐
訾博ZiBo6 分钟前
VibeCoding 时代来临:如何打造让 AI 秒懂、秒改、秒验证的“AI 友好型”技术栈?
前端·后端
excel13 分钟前
彻底理解缓冲区:从概念、背压到可运行的 Fetch 流式示例
前端
Victor3562 小时前
Redis(25)Redis的RDB持久化的优点和缺点是什么?
后端
Victor3562 小时前
Redis(24)如何配置Redis的持久化?
后端
小蜜蜂嗡嗡3 小时前
【flutter对屏幕底部有手势区域(如:一条横杠)导致出现重叠遮挡】
前端·javascript·flutter
伍哥的传说4 小时前
Vue 3 useModel vs defineModel:选择正确的双向绑定方案
前端·javascript·vue.js·definemodel对比·usemodel教程·vue3.4新特性·vue双向绑定
胡gh9 小时前
页面卡成PPT?重排重绘惹的祸!依旧性能优化
前端·javascript·面试
ningqw9 小时前
SpringBoot 常用跨域处理方案
java·后端·springboot
你的人类朋友9 小时前
vi编辑器命令常用操作整理(持续更新)
后端
胡gh9 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试