第2章 Rust初体验1/8:prelude:简化代码的自动标准库加载:猜骰子冷热游戏

本文主要是介绍第2章 Rust初体验1/8:prelude:简化代码的自动标准库加载:猜骰子冷热游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

讲动人的故事,写懂人的代码

在跑过Hello world程序后,三个人觉得这样还不过瘾,于是决定把那本Rust书里的猜数字游戏换个新面孔,变成“猜骰子冷热”游戏,然后一起动手实现一下。这样我们就能更深入地体验到Rust编程的乐趣啦。
在这里插入图片描述

(顺便说一句,如果你想找这本书的所有代码,那就去github上找wubin28的账号,搜rust_adventure就能找到啦。)

在本章里,我们还是会通过与Java和C++相关特性的对比,来讨论一些Rust的重要知识点:

  1. prelude:简化代码的自动标准库加载
  2. 变量值绑定:默认不可变增强代码安全性
  3. 带有&的引用参数:避免不必要的数据复制
  4. 类型推断:提升代码简洁性
  5. 类型的关联函数:简化对象创建和初始化
  6. 使用Result进行错误处理:编译时错误检查增强代码安全性
  7. 使用println!宏及其占位符打印字符串:编译时的类型检查可避免运行时错误
  8. 提供标准库之外功能的Library Crate:简化包管理和依赖管理
  9. Crate的版本号遵循SemVer规范:轻松理解版本意义
  10. Trait方法的隐式调用:提高代码可读性
  11. Cargo Doc:便于本地查阅依赖库API定义
  12. match表达式和模式匹配:更富表达力
  13. 变量遮蔽:省去起相似变量名麻烦
  14. Option枚举及其变体:能避免空指针异常问题
  15. as进行类型转换:显式而简洁的语法
  16. loop里的String::new()是否会增大内存占用?
  17. 错误处理时不关心具体错误类型的下划线:提高代码可读性
  18. 末尾不带分号的表达式即代码块返回值:更简洁的语法

2.1 “猜骰子冷热”游戏(Dicey Temperatures)需求

三个人一起讨论了如何改编这款字符终端游戏,然后艾极思就把”猜骰子冷热“游戏的需求记录了下来。

  • 首先,程序会生成两个骰子的点数之和,这个数是2到12之间的随机整数。
  • 然后,程序会提示玩家猜两个骰子的点数之和。
  • 如果玩家第一次输入点数之和就答错了,程序就会提示‘第一次猜就错了哦’(You guessed it wrong on the first try.)。
  • 如果玩家第二次或之后输入点数之和也答错了,但这次猜测比上次更接近正确答案,程序就会提示‘更热了’(Hotter.)。
  • 如果离正确答案更远了,程序就会提示‘更冷了’(Colder.)。
  • 如果距离正确答案的距离和上次一样,程序就会提示‘不冷不热’(Neither cold nor hot.)。
  • 如果玩家猜对了,程序就会提示‘恭喜你答对了!’(You win!)

2.2 “猜骰子冷热”游戏的7个用户故事

在公司的Rust培训课堂上,讲师贾克强把"猜骰子冷热"的游戏需求分享给了大家。

他有个很棒的想法,那就是让懂Java的同事尽量和懂C++的同事一起进行结对编程,这样我们就可以用三种语言来实现这个游戏啦。通过比较这三种语言的相似和不同之处,我们就有机会更深入地了解这三种语言,尤其是Rust的相关概念。

为了让大家能从基础到进阶地实现这个游戏,贾克强把需求分解成了下面的7个用户故事,他期待大家按照顺序用这三种语言实现,并做一下比较哦。

  1. 获取并显示玩家猜的点数之和
  2. 生成点数之和的随机答案
  3. 比较答案与点数之和
  4. 一直让玩家不断猜
  5. 玩家在猜对后程序退出
  6. 玩家的输入若不是数字则继续猜
  7. 玩家输入的数字若越界则继续猜

2.3 故事1: 获取并显示玩家猜的点数之和

故事1其实挺简单的,Rust版本的话,可以参考书上的例子来做哦。

赵可菲的动作真的很快!一眨眼的功夫,Rust版和Java版就已经完成了,还给全班讲解了代码呢。

2.3.1 Rust版故事1

use std::io;fn main() {println!("Guess the sum of two dice!");println!(

这篇关于第2章 Rust初体验1/8:prelude:简化代码的自动标准库加载:猜骰子冷热游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050909

相关文章

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

游戏闪退弹窗提示找不到storm.dll文件怎么办? Stormdll文件损坏修复技巧

《游戏闪退弹窗提示找不到storm.dll文件怎么办?Stormdll文件损坏修复技巧》DLL文件丢失或损坏会导致软件无法正常运行,例如我们在电脑上运行软件或游戏时会得到以下提示:storm.dll... 很多玩家在打开游戏时,突然弹出“找不到storm.dll文件”的提示框,随后游戏直接闪退,这通常是由于

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java