控制流程是编程的最基本构建块。早期语言没有数据结构或功能的概念,只有程序流。这些控制流结构随着时间的推移而发展,从简单的分支和循环到Rust中可用的复杂值表达式。
在本章中,我们将开始开发项目,该项目将构成本书中所有代码示例的基础。第一个项目的要求立即引入。然后,我们将为您提供可操作的步骤,将项目需求转换为带有测试的代码大纲。最后,我们将为完整的可交付成果开发代码。学习成果:
- 收集项目要求
- 根据项目要求构建解决方案
- 在功能样式中使用和识别表达式
- 使用集成和单元测试来测试解决方案
技术要求
最新版本的Rust是运行提供的示例所必需的:
https://www.rust-lang.org/en-US/install.html
本章的代码也可以在GitHub上找到:
https://github.com/PacktPublishing/Hands-On-Functional-Programming-in-RUST
每章都包含具体的安装和构建说明
README.md文件。
设计程序
为了设计程序,让我们看一下项目所需的各个方面。
收集项目要求
考虑到这种情况:您的工程公司正在考虑签订合同,为房地产开发商设计控制电梯的软件。该合同列出了正在开发的三座不同高度和非均匀电梯设计的建筑物。电梯设计正由其他分包商最终确定,并将在软件合同授予后不久提供。
要提交您的建议,您的公司应展示您的电梯控制软件的基本功能。然后,一旦获奖,您将被要求将这些功能集成到最终软件中,以及适应物理电梯规格和行为所需的修改。
为了赢得提案,您的团队同意在几个关键点上超越竞争对手。也就是说,您的电梯应该执行以下操作:
- 减少在楼层之间移动的时间 更准确地停在每个楼层的位置
- 为运输中的乘客提供更顺畅的乘坐体验
- 作为伴随项目提案的可交付项目,您需要提供电梯行为的模拟。您负责进一步的细节和实施。
现在应该解决以下问题:
-
程序访问和存储哪些数据?
-
该计划期望什么输入?
-
该程序应该产生什么输出?
经过一番考虑,您的团队对某些行为表示同意:
- 该程序应强调电梯的位置,速度和加速度。速度决定了行驶持续时间。加速度决定了乘坐舒适性。静止的位置决定了停止精度。这些是贵公司强调的关键卖点,因此演示软件应该反映相同的信息。
- 作为输入,程序应该采用描述楼层数和楼层高度的文件,最后是电梯要处理的楼层请求列表。
- 程序的输出应该是有关电梯位置,速度和加速度的实时信息。处理完所有楼层请求后,程序应打印位置,速度和加速度的平均值和标准偏差。
根据需求构建代码映射
为了概述我们的代码解决方案,我们将使用stubs方法。要使用此过程,我们只需正常启动代码项目,并在我们考虑它们时填写高级详细信息。在我们最终确定大纲之前,细节将不会实现。在我们对整个程序设计感到满意之后,我们就可以开始实现程序逻辑了。我们现在开始这个项目。
创建一个Rust项目
要创建一个新的Rust项目,我们将执行以下步骤(或者,您可以调用新的货物):
1.为Rust项目创建一个新文件夹
2.创建Cargo.toml文件,如下所示:
[package]
name = "elevator"
version = "1.0.0"
[dependencies]
3.创建src / main.rs文件,如下所示:
fn main()
{
println!("main")
}
现在,我们可以用货物构建来构建项目。
为每个程序编写存根
需求
计划要求通常表示为结果。运行它时该程序应该有什么影响?用代码回答这个问题通常是直截了当的。以下是有条不紊地将项目需求转换为代码的步骤列表:
1.列出所有计划要求
2.列出每个需求的依赖关系或先决条件
3.从需求和依赖项列表中创建依赖关系图
4.编写实现依赖关系图的存根通过实践,这些步骤可以组合成编写存根代码的单个步骤。但是,如果您在项目的体系结构阶段变得不堪重负,那么明确地执行这些步骤可能会有所帮助。这是将复杂问题分解为较小问题的可靠方法: