这篇文章主要是针对那些还没有尝试过Rust或者正在开始玩Rust的开发者。
在这篇文章中我们做一个简单的检索信息程序,将一个csv文件作为输入(Netflix的可用节目),并对数据集进行一些查询。 除此之外,我还会介绍一下我学到的最有趣的东西;同时附带一些有用的链接。
环境搭建
非常简单,只要按照下面的链接就可以了。
构建工具
Cargo 是Rust的依赖包管理程序。Cargo对Rust来说就像Maven对Java,Npm对Node,或者sbt对Scala一样的地位。 在任何Rust项目的根目录下都有一个Cargo.toml。这个文件可以是这样的:
从上面可以看出有几个可执行程序,它们必须被定义在bin部分。
可以看下面的链接,了解 cargo 是如何工作的:
doc.rust-lang.org/cargo/getti…
OOP
对象是用关键字 struct 来定义的。默认情况下,结构和属性的可见性是 private。要使它们公开,我们只需要设置关键字 pub:
- 方法:对象的方法编写在一个
impl代码块中。
- 同时每条语句都以分号结尾。 如果一个函数的最后一条语句没有以分号结束,它将被解释为:函数的返回。下面的两个例子都是一样的:
-
self关键字允许访问对象的属性和方法。 -
默认情况下,变量是不可变的。要使它们成为可变,我们需要使用关键字
mut。
- 类型:我们可以很容易地定义新的类型(或别名)。
-
Trait: 在某些方面类似于接口,但它们提供了额外的功能。
-
Trait包含要实现的方法的签名。另一方面,默认的实现也可以在trait中定义
-
另一方面,我们也可以为现有的类型提供trait的实现。
-
-
泛型: Rust支持泛型(Golang...你来得太晚了)。 这允许我们构建更多可重用的代码。
Trait部分的最后一个例子包含了一个用例。
import
我们可以通过使用关键字 use 来导入模块。在Rust中导入模块的语法很强大:
自定义错误
编写我们自己的业务错误对于编写易于阅读的代码是很有用的。要做到这一点,我们只需要为我们的结构实现 Trait Display & Error。
闭包
Rust中的闭包,也叫lambda表达式,一种捕获上下文环境的函数。例如,一个捕获x变量的闭包:
代码结构
就像在许多其他语言中一样,你会发现有几篇关于哪一种是组织rust项目的最佳方式的文章: dev.to/ghost/rust-…
宏
Rust 对 macro 有很好的支持。macro 是一种你能编写出其他代码的代码,这被称为元编程(metaprogramming)。宏提供了类似于函数的功能,但没有运行时的成本。然而会有一些编译时的成本,因为宏在编译时会被扩展。
一句话:元编程很强大。
函数式编程
Rust提供了高阶函数(HOF)。这些函数可以接收一个或多个函数和/或产生一个更有用的函数。HOF和懒惰迭代器使Rust具有了函数的味道:
相关链接:blog.madhukaraphatak.com/functional-…
代码
书籍和文章对于了解技术是不错,但实际上只有当你把你所读的东西付诸实践时,你才能学到东西。
你可以按照下面说的自行实践起来:
- 创建一个新的可执行文件(改Cargo.toml并在bin目录下创建一个新的文件)
- 打印发布日期在3年以内的节目的标题(大写)[以及其他你想尝试的查询]
- 为加载资源目录中的netflix.json文件编写一个实现「
cargo run resources/nextflix.json」
我的感觉
Rust看起来很不错,它提供了很好的机制来构建软件。我希望我能够继续不断学习下去,并且能够尽快可以在生产中用起来。
不过即使是文档也是如此之好,而且这门语言吸取了几种编程语言的精华,我担心它的成功将取决于在未来几年里有多少构建商业软件的框架出现。
遗憾的是,Rust社区并不大,而且说实话,我不知道有哪些公司愿意为这种挑战下注......
「这是我参与2022首次更文挑战的第 19 天,活动详情查看:2022首次更文挑战」。