《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com)
3.1 Rust程序结构
我们从一个最简单的程序入手,来观察一个Rust的程序结构。
【例3.1】 第一个Rust例子
在命令行下用命令cargo new myrust新建一个Rust项目。
打开VS Code,打开文件夹myrust,并在VS Code中打开src下的main.rs,然后输入如下 代码:
// my first program in Rust
fn main()
{
println("Hello, world!");
}
学过C语言的朋友,应该一目了然,这个程序就是打印输出一行字符串"Hello, world!"。
按快捷键Ctrl+F5运行工程,在TERMINAL视图上可以看到运行结果:
Hello World!
以上代码是多数初学者学会写的第一个程序,它的运行结果是在屏幕上打出"Hello World!"这句话。虽然它可能是Rust可写出的最简单的程序之一,但其中已经包含每一个Rust程序的基本组成结构。下面我们就逐个分析其组成结构的每一部分:
// my first program in Rust
这是注释行。所有以两个斜线符号(//)开始的程序行都被认为是注释行,这些注释行是程序员写在程序源代码内,用来对程序进行简单解释或描述,对程序本身的运行不会产生影响。在本例中,这行注释对本程序是什么做了一个简要的描述。
fn main()
这一行为主函数(Main Function)的起始声明。fn是一个关键字,它用来声明新函数。关键字(Keyword)又称保留字,是整个语言范围内预先保留的标识符,用户不能用关键字作为变量名或函数名。
main函数是所有Rust程序运行的起始点。无论它是在源代码文件的开头、结尾还是中间,此函数中的代码总是在程序开始运行时第一个被执行。并且,由于同样的原因,所有Rust程序都必须有一个main函数。
main后面跟了一对圆括号,表示它是一个函数,main是函数名。Rust中所有函数都跟有一对圆括号,圆括号中可以有一些输入参数。main函数后面的花括号之间的内容称为函数体,里面的代码就是函数功能的具体实现,花括号必不可少。
println!("Hello, world!");
这一行用于向控制台打印输出一段字符串。println是一个宏,用于向控制台窗口输出内容,注意println后面紧跟了一个感叹号(!),这也是让人不爽的地方。我们后面还会详述宏println。注意这行代码以分号(;)结尾。分号标示了一个语句的结束,Rust的每一个代码语句都必须以分号结尾。Rust 程序员最常犯的错误之一就是忘记在语句末尾写上分号。
你可能注意到并不是程序中的所有行都会被执行。程序中可以有注释行(以//开头),然后有函数的声明(本例中为main函数),最后是程序语句(例如调用println!),最后这些语句行全部被括在主函数的花括号"{}"内。
本例中程序被写在不同的行中以方便阅读。其实这并不是必需的。本例也可以被写成一行 代码:
fn main() {println!("Hello, world!");} // my first program in Rust
可以看到,函数名、函数体(花括号中的内容)、注释都写在一行中了,而且最终程序运行结果依旧不变。但我们通常习惯分行写代码,分行写代码更方便让人阅读。
在Rust中,语句之间的分隔是以分号(;)为分隔符的。以下程序包含更多语句:
// my first program in Rust
fn main()
{
println!("Hello, world!");
println!("Down with 996!");
}
这段代码将在VS Code终端窗口中输出两行字符串:
Hello, world!
Down with 996!
输出"Hello, world!"和"Down with 996!"。在这个例子中,我们在两个不同的语句中调用了println!两次。再一次说明分行写程序代码只是为了方便阅读,因为这个main函数写成以下形式也没有任何问题:
fn main() {println!("Hello, world!"); println!("Down with 996!");}
为方便起见,也可以把代码分为更多的行来写:
// my first program in Rust
fn main()
{
println!(
"Hello, world!"
);
println!(
"Down with 996!");
}
运行结果依旧是两行字符串。
3.2 注 释
注释(Comments)是源代码的一部分,但会被编译器忽略。注释不会生成任何执行代码。使用注释的目的只是使程序员可以在源程序中插入一些说明解释性的内容。
在程序中,Rust 支持两种插入注释的方法:
// line comment
/* block comment */
第一种方法为行注释,告诉编译器忽略从//开始至本行结束的任何内容。第二种为块注释,告诉编译器忽略在/*符号和*/符号之间的所有内容,可能包含多行内容。
在以下程序中,我们插入了更多注释内容。
/* my second program in Rust
with more comments */
fn main()
{
println!("Hello world!");
println!("Down with 996!");
}
如果你在源程序中插入了注释而没有用//符号或/*和*/符号,编译器会把它们当成Rust的语句,那么在编译时就会出现一个或多个错误信息。