讲动人的故事,写懂人的代码
- 故事梗概:
- 在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;
- 然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而不至被裁员,她必须领会编程如何"快速"才能有真正的意义。
上次聊到,Java程序员赵可菲和C++程序员席双嘉在Rust大神贾克强的带领下,找到了AI编程小助手艾极思把Rust编程书中的游戏需求改成了“猜骰子冷热”,现在得重新写一遍代码了。
他们用 cargo new
命令开了个新的Rust项目,并且把Cargo.lock
文件也上传到版本库去了。
下一步,就是要开始为“猜骰子冷热”游戏写代码了。
3.1 列出“猜骰子冷热”游戏的用户故事
赵可菲:“在这个AI写代码的时代,最快的写代码方式就是告诉艾极思你的需求,然后让它帮你写。”
席双嘉:“这主意不错哦!但是我们才刚开始学Rust,艾极思如果直接给我们一大堆最后的代码,我们可能会一头雾水。”
“要不我们按照书上的方法,把游戏的需求分成一些小的用户故事。一点一点来学习。”
赵可菲点点头。
他们两个列出了“猜骰子冷热”游戏的7个用户故事,改编自Guessing Game的故事:
1 获取玩家猜的两个骰子点数之和并显示给玩家 2 生成两个骰子点数之和的随机答案 3 比较答案与玩家猜的点数之和 4 将玩家猜的点数之和字符串转换为数字以便比较 5 允许玩家在没猜对后继续猜 6 玩家在猜对后程序退出 7 玩家的输入若不是数字,则继续猜
赵可菲照着书上的代码,写出了故事1“获取玩家猜的两个骰子点数之和并显示给玩家”的代码:
use std::io;
fn main() {
println!("Guess the sum of two dice!");
println!("Please input your guess (between 2 and 12).");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
println!("You guessed: {guess}");
}
3.2 自动加载标准库的prelude
贾克强:“我来考考你们。这段代码里,哪些是用了prelude的标准库?哪些又得自己use标准库呢?”
席双嘉:“书上说,io::stdin()
不在prelude里,得用use std::io
自己来use。”
“但是,哪些用了prelude的标准库,我就不知道了。”
赵可菲一边翻书一边说:“prelude是啥来着?”
贾克强:“Rust的标准库功能多得很。但是,如果每个功能都得手动use,那就太麻烦了。同样,use一堆你根本不用的功能也不妥。所以,要找个平衡。”
“prelude就是Rust自动use到每个Rust程序的功能清单。它尽量保持简洁,主要关注那