【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中运行了我们编写的程序。同时介绍了两种注释,一种是单行注释,另一种是多行注释。注释会被编译器忽略,同时避免使用过多的注释,以免影响代码的可读性。

相关推荐
计算机学姐12 分钟前
基于SpringBoot的咖啡店管理系统【个性化推荐+数据可视化统计+配送信息】
java·vue.js·spring boot·后端·mysql·信息可视化·tomcat
LSTM971 小时前
使用 Python 将图片转换为 PDF (含合并)
后端
小江的记录本1 小时前
【注解】常见 Java 注解系统性知识体系总结(附《全方位对比表》+ 思维导图)
java·前端·spring boot·后端·spring·mybatis·web
小飞Coding1 小时前
MyBatis Mapper 实现原理彻底解密——从动态代理到 JDBC 执行全链路剖析
后端·mybatis
Mr.45671 小时前
Spring Boot 集成 PostgreSQL 表级备份与恢复实战
java·spring boot·后端·postgresql
LucianaiB1 小时前
王炸组合!腾讯云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!
后端
白露与泡影1 小时前
探索springboot程序打包docker的最佳方式
spring boot·后端·docker
开心就好20251 小时前
本地执行 IPA 混淆 无需上传致云端且不修改工程的方案
后端·ios
架构师沉默1 小时前
为什么一个视频能让全国人民同时秒开?
java·后端·架构