【Rust精华小册】5. 我们的第一个Rust程序

Rust语言学习者,通常都会有其它语言的背景,很少有人从零入门Rust。

Rust语言应该有一门适合初学者的教程,来帮助大家使用Rust作为入门语言,我非常希望有人能使用原汁原味Rust的思维在计算机世界攻城略地。这并不说学完这门语言就可以懈怠了,如果没有《操作系统》和《组成原理》等知识的加持根本无法自如运用Rust。例如,标准库中的线程API就是对系统调用的直接封装,因此学习这些知识有利于提高Rust技术水平。假如你在操作系统之上做应用开发,必定需要对操作系统实现与系统调用有所了解。

我们这门课程假设学习者没有编程知识。那么我们需要介绍一些极为基础的内容,如果你已经非常熟悉,可以快速略过。

我们继续使用上节课创建的oskwgbin来讲解。

程序的基本结构

这一节,我们详细讲解main.rs文件中写的代码:

rust 复制代码
fn main() {
    println!("Hello World!");
}

这段代码功能是将Hello World打印出来。

这是一个固定的模式,我们创建一个源文件,在文件中编写如下代码:

rust 复制代码
fn main() {
 
}

这个框架内部就是我们编写代码的地方,后续介绍到函数,我们会详细介绍它,这里你先记住即可。

标识符

函数名以及后续将学到的变量名、结构体等各种自定义的名字都叫标识符,遵循标识符的命名规则。

  • 首字母:必须是字母(a-z、A-Z)、下划线(_)或美元符号($)。- 不能是数字。
  • 后续字符:可以是字母、数字、下划线、美元符号、撇号(')或非空格的 Unicode 字符。不能包含空格或控制字符。
  • Rust 标识符是大小写敏感的。
  • 不能使用 Rust 关键字作为标识符。 举例: 合法的标识符:_variable、my_function、camelCase、UPPER_CASE、snake_case 不合法的标识符:1variable、$function、#hashtag、空格 、'string'

关键字

Rust 关键字是用于定义语法规则和限制名称空间中的标识符的特殊标识符。包含已经使用的关键字和保留关键字。例如这里的fn就是要定义一个函数。所有关键字: doc.rust-lang.org/std/index.h...

接下来看函数内部,Rust与其他语言不同,它的输出语句用的println!是一个宏,作用是将括号中的内容打印出来,双引号中的内容叫字符串,字符串我们后面课程再介绍。最后有一个;,表示这一句代码结束。就像我们写文章,每句话结束都加句号一样。

rust 复制代码
println!("Hello World!");

比如下面的代码,我们就可以实现先打印Hello World!,再打印跟程序饲养员学🦀编程到控制台。

rust 复制代码
fn main() {
    println!("Hello World!");
    println!("跟程序饲养员学🦀编程");
}

运行效果如下:

如果代码缺失分号,那么编译器会认为第一句代码没有结束,也就出现了语法错误,编译器会尽可能的提示出错的地方。

RustRover会给出快速修复的办法。

程序员最讨厌的有两件事,自己写代码要写注释看别人代码时没注释。可见注释是让我们程序员又爱又恨的存在。

注释和文档

注释会被编译器忽略,所以说注释仅用于帮助其它开发者理解代码的功能和逻辑,要言简意赅的描述清楚代码的功能,复杂的算法上还需要举例说明,如果注释在方法上则需要说明入参和返回的作用等等。

Rust中有下面三类注释:

  1. 单行注释
  2. 多行注释
  3. 文档注释

单行注释//

rust 复制代码
// 程序入口函数
fn main() {
    // 打印HelloWorld
    println!("Hello, world!");
}

多行注释 /* */

rust 复制代码
/*
我
是
程
序
饲
养
员
程序入口函数
无参数
无返回值
 */
fn main() {
    println!("Hello, world!");
}

文档注释

文档注释有两种形式,使用三斜线///和使用/** 注释内容 */包裹。在执行cargo doc指定时,会解析成web文档的格式,方便调用者阅读。现在见到这种能够认即可,后续课程会介绍文档的编写格式,以及阅读文档等方面的内容。

总结

本节课介绍了程序的基本结构,以及标识符和关键字,并且在IDE中运行了我们编写的程序。同时介绍了两种注释,一种是单行注释,另一种是多行注释。注释会被编译器忽略,同时避免使用过多的注释,以免影响代码的可读性。

相关推荐
2025年一定要上岸4 分钟前
【Django】-10- 单元测试和集成测试(下)
数据库·后端·python·单元测试·django·集成测试
程序员海军16 分钟前
这才是Coding该有的样子!重新定义编程显示器
前端·后端
_風箏19 分钟前
Shell【脚本 05】交互式Shell脚本编写及问题处理([: ==: unary operator expected)[: ==: 期待一元表达式
后端
Cache技术分享19 分钟前
151. Java Lambda 表达式 - 使用 Consumer 接口处理对象
前端·后端
用户5769053080120 分钟前
Python实现一个类似MybatisPlus的简易SQL注解
后端·python
hello早上好22 分钟前
Spring AOP静态与动态通知的协作原理
后端·架构
MacroZheng39 分钟前
狂揽9.3k star!号称终端版Postman项目,太炫酷了!
java·spring boot·后端
Lemon程序馆1 小时前
Mysql 常见的性能分析手段
数据库·后端·mysql
东阳马生架构1 小时前
Dubbo源码—1.服务发布的主要流程
后端
meiguiyulu1 小时前
深入理解 CountdownLatch:多线程同步的得力助手
后端