Update hello-world.md

pull/355/head
tomoat 3 years ago committed by GitHub
parent 8d68d90c55
commit dbc1df54e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -4,7 +4,7 @@
## 多国语言的"世界,你好" ## 多国语言的"世界,你好"
还记得大明湖畔等你的 [VSCode](./editor.md) IDE 和通过 `Cargo` 创建的[世界,你好](./cargo.md)工程? 还记得大明湖畔等你的 [VSCode IDE](./editor.md) 和通过 `Cargo` 创建的[世界,你好](./cargo.md)工程?
现在使用 VSCode 打开[上一节](./cargo.md)中创建的 `world_hello` 工程, 然后进入 `main.rs` 文件,此文件是当前 Rust 工程的入口文件,和其它语言几无区别。 现在使用 VSCode 打开[上一节](./cargo.md)中创建的 `world_hello` 工程, 然后进入 `main.rs` 文件,此文件是当前 Rust 工程的入口文件,和其它语言几无区别。
@ -25,7 +25,7 @@ fn greet_world() {
} }
``` ```
打开终端,进入 `world_hello` 工程根目录,运行该程序(你也可以在 VSCode 中打开终端,方法是点击左下角的错误和警告图标),你的热情,好像一把火,燃烧了整个世界: 打开终端,进入 `world_hello` 工程根目录,运行该程序(你也可以在 VSCode 中打开终端,方法是点击VSCode上方菜单栏中的终端->新建终端,或者直接使用快捷键打开),你的热情,就像一把火,燃烧了整个世界:
```console ```console
$ cargo run $ cargo run
Compiling world_hello v0.1.0 (/Users/sunfei/development/rust/world_hello) Compiling world_hello v0.1.0 (/Users/sunfei/development/rust/world_hello)
@ -34,7 +34,6 @@ $ cargo run
Grüß Gott! Grüß Gott!
世界,你好 世界,你好
World, hello World, hello
sunfei@sunfeideMa
``` ```
花点时间来看看上面的代码首先Rust 原生支持 UTF-8 编码的字符串,这意味着你可以很容易的使用世界各国文字作为字符串内容。 花点时间来看看上面的代码首先Rust 原生支持 UTF-8 编码的字符串,这意味着你可以很容易的使用世界各国文字作为字符串内容。
@ -50,7 +49,7 @@ sunfei@sunfeideMa
## Rust语言初印象 ## Rust语言初印象
Rust 这门语言对于 Haskell 和 Java 开发来说,会觉得很熟悉,因为它们在高阶表达方面都很优秀,简而言之,可以很简洁的写出原本需要一大堆代码才能表达的含义,但是 Rust 又有所不同:它的性能是底层语言级别的性能,可以跟 C/C++ 相媲美。 Rust 这门语言对于 Haskell 和 Java 开发来说,会觉得很熟悉,因为它们在高阶表达方面都很优秀,简而言之,可以很简洁的写出原本需要一大堆代码才能表达的含义,但是 Rust 又有所不同:它的性能是底层语言级别的性能,可以跟 C/C++ 相媲美。
一句`So Easy` 的余音仍在绕梁,我希望它能继续下去,可是……人总是要面对现实,因此让我们来些狠的: `So Easy` 的余音仍在绕梁,我希望它能继续下去,可是……人总是要面对现实,因此让我们来些狠的:
```rust ```rust
fn main() { fn main() {
let penguin_data = "\ let penguin_data = "\
@ -96,18 +95,18 @@ fn main() {
``` ```
看完这段代码,不知道你的余音有没有嘎然而止,反正我已经在颤抖了,这就是传说中的下马威嘛?上面代码中值得注意的 Rust 特性有: 看完这段代码,不知道你的余音有没有嘎然而止,反正我已经在颤抖了,这就是传说中的下马威嘛?上面代码中值得注意的 Rust 特性有:
- 控制流:`for` 和 `continue` 在一起,实现循环 - 控制流:`for` 和 `continue` 在一起使用,实现循环控制
- 方法语法:由于 Rust 没有继承,因此 Rust 不是传统意义上的面向对象语言,但是它却从 `OO` 语言那里偷师了方法的使用 `record.trim()``record.split(',')` 等 - 方法语法:由于 Rust 没有继承,因此 Rust 不是传统意义上的面向对象语言,但是它却从 `OO` 语言那里偷师了方法的使用 `record.trim()``record.split(',')` 等
- 高阶函数编程:函数可以作为参数也能作为返回值,例如 `.map(|field| field.trim())`,这里 `map` 使用闭包函数作为参数,也可以称呼为 `匿名函数`、`lambda函数` - 高阶函数编程:函数可以作为参数也能作为返回值,例如 `.map(|field| field.trim())`,这里 `map` 方法中使用闭包函数作为参数,也可以称呼为 `匿名函数`、`lambda函数`
- 类型标注:`if let Ok(length) = fields[1].parse::<f32>()`, 通过 `::<f32>` 的使用,告诉编译器 `length` 是一个 `f32` 类型的浮点数,这种类型标注不是很常用,但是在编译器无法推断出你的数据类型时,就很有用了 - 类型标注:`if let Ok(length) = fields[1].parse::<f32>()`, 通过 `::<f32>` 的使用,告诉编译器 `length` 是一个 `f32` 类型的浮点数,这种类型标注不是很常用,但是在编译器无法推断出你的数据类型时,就很有用了
- 条件编译:`if cfg!(debug_assertions)`,说明紧跟其后的输出打印只在 `debug` 模式下生效 - 条件编译:`if cfg!(debug_assertions)`,说明紧跟其后的输出打印只在 `debug` 模式下生效
- 隐式返回Rust 提供了 `return` 关键字用于函数返回,但是在很多时候,我们可以省略它。因为 Rust 是[**基于表达式的语言**](../basic/base-type/statement-expression.md) - 隐式返回Rust 提供了 `return` 关键字用于函数返回,但是在很多时候,我们可以省略它。因为 Rust 是[**基于表达式的语言**](../basic/base-type/statement-expression.md)
在终端运行上述代码时,会看到很多 `debug: ...` 的输出, 上面有讲,这些都是 `条件编译` 的输出, 那么该怎么消除掉这些输出呢? 在终端运行上述代码时,会看到很多 `debug: ...` 的输出, 上面有讲,这些都是 `条件编译` 的输出, 那么该怎么消除掉这些输出呢?
读者大大普遍冰雪聪明,肯定已经想到:是的,在[认识Cargo](./cargo.md#手动编译和运行项目)中,曾经介绍过 `--release` 参数,因为 `cargo run` 默认是运行 `debug` 模式. 因此想要消灭那些 `debug:` 输出,需要更改为其它模式,其中最常用的模式就是 `--release` 也就是生产发布的模式。 读者大大普遍冰雪聪明,肯定已经想到:是的,在[认识Cargo](./cargo.md#手动编译和运行项目)中,曾经介绍过 `--release` 参数,因为 `cargo run` 默认是运行 `debug` 模式. 因此想要消灭那些 `debug:` 输出,需要更改为其它模式,其中最常用的模式就是 `--release` 也就是生产发布的模式。
具体运行代码就不给了,留给大家作为一个小练习,建议亲自动手尝试下。 具体运行代码就不给了,留给大家作为一个小练习,建议亲自动手尝试下。
至此Rust 安装入门就已经结束,相信看到这里,你已经发现了本书与其它书的区别,其中最大的区别就是:**这本书就像优秀的国外课本一样,不太枯燥,也希望这本不太枯燥的书,能伴你长行,犹如一杯奶茶,细细品之,唇齿香**。 至此Rust 安装入门就已经结束,相信看到这里,你已经发现了本书与其它书的区别,其中最大的区别就是:**这本书就像优秀的国外课本一样,不太枯燥,也希望这本不太枯燥的书,能伴你长行,犹如一杯奶茶,细细品之,唇齿香**。

Loading…
Cancel
Save