Rust学习笔记003:语句和表达式+函数+控制语句:IF,MATCH,LOOP

语句(Statements)和表达式(Expressions)

1. 语句(Statements):

语句是执行一些操作但不返回值的代码单元。例如,声明变量、赋值、函数调用、宏调用等都是语句。

// 声明变量的语句
let x = 5;

// 表达式语句(函数调用)
println!("Hello, World!");

// if 语句
if x > 0 {
    println!("x is positive");
} else {
    println!("x is non-positive");
}

// 函数定义语句
fn my_function() {
    // 函数体
}

在 Rust 中,语句末尾不需要分号,但如果在语句之间有多个表达式,需要用分号分隔。

2. 表达式(Expressions):

表达式是计算并产生一个值的代码单元。表达式可以是一个常量、变量、运算、函数调用等。每个表达式都有一个类型,并产生一个值。

let y = {
    let x = 5;
    x + 1 // 这是一个表达式
};

println!("The value of y is: {}", y);

在上述例子中,y 的值是一个块(Block)的最后一个表达式的值,即 x + 1

Rust 中的函数调用、宏调用、赋值等通常是表达式。例如,let x = 5; 本身就是一个表达式,它产生 ()(unit 类型的值)。

let x = {
    let y = 5;
    y * 2 // 这是一个表达式
};

在这个例子中,块 { ... } 作为一个表达式被赋值给变量 x

  • 下面的例子输出5
    在这里插入图片描述

函数

函数与命名 fn name() {}

  • 一些编程语言和框架强烈推荐或者约定使用 snake case 风格。例如,Rust、Python、Ruby 等都鼓励使用 snake case。Snake case 是一种命名规范风格,通常用于变量名、函数名和文件名等标识符。Snake case 的特点是将单词用下划线连接,并全部小写。这种风格使得标识符更易读,也更符合一些编程语言和工具的命名约定。

Snake case 示例:

  • 变量名: my_variable
  • 函数名: calculate_sum
  • 文件名: main_module.rs

在Rust中,snake case 是一种常见的命名风格,符合 Rust 的命名规范。以下是一些 Rust 中使用 snake case 的示例:

fn calculate_sum(a: i32, b: i32) -> i32 {
    // 函数体
    a + b
}

const MAX_NUM: usize = 100;

struct MyStruct {
    field_one: i32,
    field_two: f64,
}

fn main() {
    let my_variable = 42;
    let another_variable = 3.14;
}

函数参数

  • 基本类型约束: 需要在函数参数中使用特定的类型来约束参数的类型。例如:

    fn print_number(num: i32) {
        println!("Number: {}", num);
    }
    

    在上述例子中,num 参数的类型被限定为 i32

  • 使用泛型时: 使用泛型可以更灵活地约束参数的类型。例如:

    fn print_generic<T>(value: T) {
        println!("Value: {:?}", value);
    }
    

    在这里,T 是一个泛型参数,可以用于表示不同类型的参数。

函数返回值

  • 在 Rust 中,函数的返回值可以通过 -> 符号指定。Rust 的函数可以返回各种类型,包括基本类型、复合类型、引用和自定义类型等。

在这里插入图片描述

返回基本类型:

fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let result = add(2, 3);
    println!("Result: {}", result); // 输出:Result: 5
}

在上述例子中,add 函数返回一个 i32 类型的整数。

返回复合类型:

struct Point {
    x: f64,
    y: f64,
}

fn create_point(x: f64, y: f64) -> Point {
    Point { x, y }
}

fn main() {
    let point = create_point(1.0, 2.0);
    println!("Point: ({}, {})", point.x, point.y); // 输出:Point: (1, 2)
}

在这里,create_point 函数返回一个自定义的 Point 结构体。

返回引用:

fn get_first_char(s: &str) -> Option<char> {
    s.chars().next()
}

fn main() {
    let result = get_first_char("hello");
    match result {
        Some(c) => println!("First character: {}", c),
        None => println!("String is empty"),
    }
}

在这个例子中,get_first_char 函数返回一个 Option<char> 类型,表示可能返回一个字符或者 None

返回多个值:

Rust 中没有直接支持返回多个值的语法,但可以使用元组、结构体或者 Result 类型来返回多个值的组合。

fn calculate_values(a: i32, b: i32) -> (i32, i32) {
    (a + b, a * b)
}

fn main() {
    let (sum, product) = calculate_values(3, 4);
    println!("Sum: {}, Product: {}", sum, product);
}

在这里,calculate_values 函数返回一个包含两个值的元组。

if表达式:

  • 需要注意的一点:if后必须是一个布尔类型,像c++就会类型转换
    在这里插入图片描述
let number = 5;

if number > 0 {
    println!("Number is positive");
} else if number == 0 {
    println!("Number is zero");
} else {
    println!("Number is negative");
}

// if 表达式的值可以被赋给一个变量
let result = if number > 0 { "positive" } else { "negative" };
println!("Result: {}", result);

if let

在这里插入图片描述

if let 结构用于简化 match 表达式中的单一模式匹配。

let favorite_color: Option<&str> = Some("blue");

if let Some(color) = favorite_color {
    println!("Favorite color: {}", color);
} else {
    println!("No favorite color");
}

match 表达式

  • match 表达式用于模式匹配,可以更灵活地处理多种情况。
let fruit = "apple";

match fruit {
    "apple" => println!("It's an apple"),
    "orange" => println!("It's an orange"),
    _ => println!("Unknown fruit"),
}

loop 循环

  • loop 关键字用于创建一个无限循环,可通过 break 语句跳出。
let mut counter = 0;

loop {
    println!("Counter: {}", counter);
    counter += 1;

    if counter == 5 {
        break;
    }
}

while 循环

  • while 循环根据条件重复执行代码块。
let mut i = 0;

while i < 5 {
    println!("i: {}", i);
    i += 1;
}

while let

  • 类似于 while 循环,但是用于简化 match 表达式的单一模式匹配。
let mut stack = Vec::new();

stack.push(1);
stack.push(2);
stack.push(3);

while let Some(top) = stack.pop() {
    println!("Popped: {}", top);
}

for循环

  • for 循环用于迭代集合或者范围。
for number in 1..=5 {
    println!("Number: {}", number);
}

let fruits = ["apple", "orange", "banana"];

for fruit in fruits.iter() {
    println!("Fruit: {}", fruit);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/282060.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python教程(19)——python异常处理

异常处理 什么是异常异常处理方式try-except语句捕获异常类型 相关的异常类型 什么是异常 在计算机编程中&#xff0c;异常&#xff08;Exception&#xff09;是指在程序执行过程中发生的错误或异常情况。当出现异常时&#xff0c;程序无法正常继续执行&#xff0c;因此需要采…

【Redis-05】Redis如何实现保存键值对的保存及过期键的管理策略

在之前的文章我们介绍过&#xff0c;Redis服务器在启动之初&#xff0c;会初始化RedisServer的实例&#xff0c;在这个实例中存在很多重要的属性结构&#xff0c;同理本篇博客中介绍的数据库实现原理也会和其中的某些属性相关&#xff0c;我们继续看一下吧。 1.服务器和客户端…

JavaSE语法之十二:Object类

文章目录 一、概念二、获取对象信息三、对象比较equals方法四、hashcode方法 一、概念 Object是Java默认提供的一个类。Java里面除了Object类&#xff0c;所有的类都是存在继承关系的&#xff0c;默认会继承Object父类&#xff0c;即所有的类的对象都可以使用Object的引用进行…

安装与部署Hadoop

一、前置安装准备1、机器2、java3、创建hadoop用户 二、安装Hadoop三、环境配置1、workers2、hadoop-env.sh3、core-site.xml4、hdfs-site.xml5、linux中Hadoop环境变量 四、启动hadoop五、验证 一、前置安装准备 1、机器 主机名ip服务node1192.168.233.100NameNode、DataNod…

纯CSS的华为充电动画,它来了

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; Krpano专栏&#xff1a;想学Krpano的&#xff0c;冲 &#x1f514…

准备好通过 “Breakin’ B.I.G.” 在嘻哈音乐界大放异彩吧!

在 The Sandbox 推出人物化身系列后&#xff0c;是时候通过 “Breakin’ B.I.G.” 重返嘻哈音乐的黄金时代了。该体验于 12 月 20 日推出&#xff0c;一直持续到 1 月 3 日&#xff0c;让玩家回到 20 世纪 90 年代&#xff0c;体验以 Notorious B.I.G 为主角的 2D 街舞游戏。 获…

【深度学习-目标检测】01 - R-CNN 论文学习与总结

论文地址&#xff1a;Rich feature hierarchies for accurate object detection and semantic segmentation 论文学习 摘要&#xff08;Abstract&#xff09; 对象检测性能的现状&#xff1a; 在PASCAL VOC数据集上测量的对象检测性能在过去几年已经达到了一个高点。最佳性能…

python使用openpyxl为excel模版填充数据,生成多个Sheet页面

目标&#xff1a;希望根据一个给定的excel模版&#xff0c;生成多个Sheet页面&#xff0c;比如模版&#xff1a; 示例程序 import openpyxlexcel_workbook openpyxl.load_workbook("模版.xlsx") for _i in range(3): # 比如填充3个页面# 复制模版sheet页&#x…

arkts状态管理使用(@State、@Prop、@Link、@Provide、@Consume、@objectLink和@observed)

一、状态管理 1.在声明式UI中&#xff0c;是以状态驱动视图更新&#xff1a; ①状态&#xff08;State&#xff09;:指驱动视图更新的数据&#xff08;被装饰器标记的变量&#xff09; ②视图&#xff08;View&#xff09;:基于UI描述渲染得到用户界面 注意&#xff1a; ①…

机场信息集成系统系列介绍(6):机场协同决策支持系统ACDM*续集

目录 1、A-CDM实施效果评估背景 2、评估核心指标项 &#xff08;1&#xff09;机位效率 &#xff08;2&#xff09;登机效率 &#xff08;3&#xff09;推出效率 &#xff08;4&#xff09;滑行效率 &#xff08;5&#xff09;协同效率 3、其他指标项 &#xff08;1&a…

MongoDB Certified Associate Developer 认证考试心得

介绍 前段时间通过了 MongoDB Associate Developer 考试&#xff0c;也记下了一些心得&#xff0c;结果忘记发出来了&#xff0c;现在重新整理下。通过考试后证书是这样的: MongoDB 目前有两个认证证书 1. MongoDB Associate Developer 认证掌握使用MongoDB 来构建现代应用…

kivy开发一个登陆界面

Kivy Kivy是一个用于开发跨平台移动应用&#xff08;如Android和iOS&#xff09;以及桌面应用&#xff08;如Windows、Linux和macOS&#xff09;的Python框架。它采用开源许可证&#xff08;MIT许可证&#xff09;&#xff0c;提供了丰富的图形界面组件和工具&#xff0c;以便…

Tensorflow2.X的GPU版框架最快最稳搭建方法

一、环境基础 Windows10以上 已装Anaconda 支持GPU 二、搭建步骤 1. 在Anaconda中创建并进入虚拟环境 conda create -n envname python3.8 conda activate envname 注意&#xff1a;envname 替换为你自己想命名的&#xff0c;下文将以“Ljdenv”出现 2.安…

二叉树的后序遍历,力扣

目录 建议先刷一下中序遍历 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 注&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 代码实现&#xff08;递归&#xff09;&#xff1a; 代码实现&#x…

【2023年终总结】谈谈一个新人眼里的阿里方法论

写在开头 2023年转眼就过去了&#xff0c;今年我从一名大学生转变某阿里系大厂的“搬砖打工人”&#xff0c;这一转变真的是给我“涉世未深的纯洁心灵”带来了大大的“震撼”。 角色的转变是需要时间进行“内部消化”的。无论是对于个人的价值认知或者是行为方式来说&#xf…

面试官:谈谈对CyclicBarrier的理解

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

kivy中用anchrolayout

说明 AnchorLayout 是 Kivy 框架中用于管理界面元素位置的一种布局方式。AnchorLayout 的特点是&#xff0c;它可以将其子元素锚定到布局的边界上&#xff0c;例如顶部、底部、左侧或右侧。这使得在需要元素相对于其容器边界保持固定位置时非常有用。 界面 # mylayout.kvAnch…

K8s资源管理介绍

用这个官网下的&#xff0c;kube-flannel.yml &#xff0c;就不会nodes not-ready --- kind: Namespace apiVersion: v1 metadata:name: kube-flannellabels:k8s-app: flannelpod-security.kubernetes.io/enforce: privileged --- kind: ClusterRole apiVersion: rbac.author…

基于NASM搭建一个能编译汇编语言的汇编软件工具环境(利用NotePad++)

文章目录 一、创建汇编语言源程序二、Notepad的下载、安装、使用三、下载和安装编译器NASM3.1 下载NASM编译器3.2 安装并配置环境变量 四、编译汇编语言源程序&#xff08;使用命令&#xff09;五、下载和使用配套源码及工具六、将编译功能集成到Notepad 一、创建汇编语言源程序…

回首2023: 程序员跳出舒适圈

1 前言 今天的冬日暖阳高照&#xff0c;照耀着我穿着羽绒服的身体&#xff0c;让我感到火一般的燥热&#xff0c;仿佛错觉中已经到了阳春三月。刚刚把孩子洗好&#xff0c;我坐在电脑前&#xff0c;准备整理一下思绪&#xff0c;回顾一下2023年的生活和工作。 2 2023 回顾 回…
最新文章