Rust学习笔记03:语句与表达式

本文详细介绍了在Rust中创建和运行测试求和函数的步骤,同时对比了CentOS和VSCode环境下的操作,并扩展到Scala、Python、Java和C语言实现,旨在展示不同编程语言在实现相似功能时的异同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、思维导图

  • Rust 中的语法可以分成两大类:语句(Statement)和表达式(Expression)。语句是指要执行的一些操作和产生副作用的表达式。表达式主要用于计算求值。语句又分为两种:声明语句(Declaration statement)和表达式语句(Expression statement)。
    在这里插入图片描述

二、案例演示 - 测试求和函数

(一)在CentOS上操作

1、创建项目 - test_func

  • 执行命令:cargo new --bin test_func
    在这里插入图片描述

  • 进入项目test_func
    在这里插入图片描述

2、修改主程序 - main.rs

  • 执行命令:vim src/main.rs
    在这里插入图片描述
// extern crate std; // 声明语句,导入std标准库
// use std::prelude::v1::*; // 导入std库里的prelude模块

fn main() {
    pub fn answer() -> () {
        let a = 100;
        let b = 150;
        assert_eq!(sum(a, b), 250);
        println!("{} + {} = {}", a, b, sum(a, b));
    }

    pub fn sum(a: i32, b: i32) -> i32 {
        a + b   // 作为函数返回值,跟scala语言类似
    }

    answer();
}

3、运行程序,查看结果

  • 执行命令:cargo run
    在这里插入图片描述

(二)在VSCode里操作

  • 启动VSCode,打开D:\rust_work文件夹
    在这里插入图片描述
  • 打开控制台
    在这里插入图片描述

1、创建项目 - test_func

  • 执行命令:cargo new --bin test_func
    在这里插入图片描述
  • 进入项目test_func
    在这里插入图片描述

2、修改主程序 - main.rs

  • src目录里的主程序main.rs里编写代码
    在这里插入图片描述
// extern crate std; // 声明语句,导入std标准库
// use std::prelude::v1::*; // 导入std库里的prelude模块

fn main() {
    pub fn answer() -> () {
        let a = 100;
        let b = 150;
        assert_eq!(sum(a, b), 250);
        println!("{} + {} = {}", a, b, sum(a, b));
    }

    pub fn sum(a: i32, b: i32) -> i32 {
        a + b   // 作为函数返回值,跟scala语言类似
    }

    answer();
}

3、运行程序,查看结果

(1)命令方式
  • 执行命令:cargo run
    在这里插入图片描述
(2)菜单方式
  • 在程序编辑区单击右键,弹出快捷菜单,选择【Run Code】 在这里插入图片描述
    在这里插入图片描述

(三)对代码进行解释

1、导入包与模块

  • 第1行和第2行是声明语句,它们并不需要求值,只是用来引入标准库包以及prelude模块的。之所以注释掉,因为Rust会为每个crate都自动引入标准库模块,除非使用#[no_std]属性明确指定了不需要标准库。

2、如何定义函数

  • 使用fn关键字定义了两个函数answersum。关键字fnfunction的缩写。
  • 函数answer没有输入参数,并且返回值为单元类型()。单元类型拥有唯一的值,就是它本身,为了描述方便,将该值称为单元值。
  • 单元类型的概念来自OCmal,它表示“没有什么特殊的价值”。所以,这里将单元类型作为函数返回值,就表示该函数无返回值。当然,通常无返回值的函数默认不需要在函数签名中指定返回类型。
  • 在函数answer中,使用let声明了两个变量ab,其后必须加分号。assert_eq!则是宏语句,它是Rust提供的断言,允许判断给定的两个表达式求值结果是否相同。像这种名字以叹号结尾,并且可以像函数一样被调用的语句,在Rust中叫作
  • 编写代码时,会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。
  • 函数sum的两个输入参数和返回值均指定为i32类型。其函数体只包含了一个表达式,用于计算ab的和,作为函数返回值。
  • 整个程序其实可以去掉换行符,完全写成一整行代码,而不影响程序编译。

3、程序运行说明

  • Rust编译器在解析代码的时候,如果碰到分号,就会继续往后面执行;如果碰到语句,则执行语句;如果碰到表达式,则会对表达式求值,如果分号后面什么都没有,就会补上单元值()
  • 当遇到函数的时候,会将函数体的花括号识别为块表达式(Block Expression)。块表达式是由一对花括号和一系列表达式组成的,它总是返回块中最后一个表达式的值。因此,对于answer函数来说,它也是一个块表达式,块中的最后一个表达式是宏语句,所以返回单元值()。对于sum函数来说,其最后一行是一个表达式,因为没有分号,所以直接返回其求值结果。
  • 从这个角度来看,可以将Rust看作一切皆表达式。由于当分号后面什么都没有时自动补单元值()的特点,我们可以将 Rust 中的语句看作计算结果均为()的特殊表达式。而对于普通的表达式来说,则会得到正常的求值结果。

三、Scala语言完成同样任务

  • net.hw.func包里创建TestFunc单例对象
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述

四、Python语言完成同样任务

  • 创建test_func.py程序
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述

五、Java语言完成同样任务

  • net.huawei.test包里创建TestFunc
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述

六、C语言完成同样任务

  • 编写test_func.c程序
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述
  • 修改程序,让断言失败
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒城译痴无心剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值