04|TDD演示(4):实现对于列表参数的支持
徐昊
你好,我是徐昊。今天我们来继续进行命令行参数解析的 TDD 演示。
首先让我们回顾一下题目与需求与代码进度。如前所述,题目源自 Bob 大叔的 Clean Code 第十四章:
我们中的大多数人都不得不时不时地解析一下命令行参数。如果我们没有一个方便的工具,那么我们就简单地处理一下传入 main 函数的字符串数组。有很多开源工具可以完成这个任务,但它们可能并不能完全满足我们的要求。所以我们再写一个吧。
传递给程序的参数由标志和值组成。标志应该是一个字符,前面有一个减号。每个标志都应该有零个或多个与之相关的值。例如:
-l -p 8080 -d /usr/logs
“l”(日志)没有相关的值,它是一个布尔标志,如果存在则为 true,不存在则为 false。“p”(端口)有一个整数值,“d”(目录)有一个字符串值。标志后面如果存在多个值,则该标志表示一个列表:
-g this is a list -d 1 2 -3 5
"g"表示一个字符串列表[“this”, “is”, “a”, “list”],“d"标志表示一个整数列表[1, 2, -3, 5]。
如果参数中没有指定某个标志,那么解析器应该指定一个默认值。例如,false 代表布尔值,0 代表数字,”"代表字符串,[]代表列表。如果给出的参数与模式不匹配,重要的是给出一个好的错误信息,准确地解释什么是错误的。
确保你的代码是可扩展的,即如何增加新的数值类型是直接和明显的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
徐昊在本文中通过TDD演示了对于列表参数的支持。文章首先回顾了需求与代码进度,并指出了代码中存在的不易察觉的坏味道,通过重构和消除重复代码来改善代码质量。接着详细介绍了如何实现列表参数解析,包括任务分解、红/绿/重构循环和代码的清理与重构。作者强调了TDD的三个特点:将功能分解成任务、随时执行测试以验证功能、感受认知的提升。最后,作者提出了思考题,鼓励读者尝试使用TDD实现命令行参数解析的功能,并欢迎读者分享学习心得。整篇文章通过实际案例生动地展示了TDD的工作方式,对于想要学习TDD的读者具有很好的指导意义。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《徐昊 · TDD 项目实战 70 讲》,新⼈⾸单¥98
《徐昊 · TDD 项目实战 70 讲》,新⼈⾸单¥98
立即购买
登录 后留言
全部留言(26)
- 最新
- 精选
- 🐑置顶大家好~我是TDD这门课的编辑辰洋~ 🎐我来友情提示一下下~ 01-04是视频演示,好对TDD有个感性的认识。 05-10是对演示的复盘,同时也会讲解TDD的相关知识点。比如测试的基本结构,TDD中的测试是啥~ 所以,如果你在01-04的操作卡壳了,可以从05开始学,看看5-10,这才是重点哇。看完再回头去看01-04~2022-03-223
- webmin通过观察最初列出的TODO List与最后完成的代码,感觉两者更像是接口定义与实现的关系,TODO List是列出了想要的功能定义,功能的实现是可以有多种的方式和不同的质量的,TDD是帮助我们从可用代码进化到优质代码的一种优秀的工程实践方法。 到达目标(TODO List)的路很多条,在没有上帝视角的情况下,唯有通过实践才能得知在当前条件下哪个路径是最佳的,TDD可以帮助减小改进的成本,固化测试知识,每进行一次回归测试收益就增加一次。
作者回复: good
2022-03-275 - hippie个人 C# 版本代码最终示例:https://github.com/hippieZhou/geektime.tdd
编辑回复: 用自己熟悉的语言写了一遍哎!真棒👍
2022-05-151 - aoe感受到了极限编程的气息! 学习笔记:http://wyyl1.com/post/19/04/
作者回复: good
2022-03-271 - davix//TODO: -d a throw exception 這個case的含義不能理解,請教老師
作者回复: a不是数字
2022-05-03 - Frode照葫芦画瓢写了一版本:https://gitee.com/frode_success/tdd.git 这周的目标把本周更新的三节理论课学习完成后,再独立写一遍
作者回复: nice
2022-03-28 - Leo交作业,请多多指教 https://github.com/JTR354/tdd-practice
编辑回复: 非常赞~
2022-03-19 - Frode我好像是个假的java程序员,为什么能这么62022-03-22123
- 阿崔cxr文中几个点 都是当初学习 tdd 的时候 纠结半天的点 比如 1. 一开始从接口出发 那么这么大的步骤如何驱动出来 2. 重构出来多个类之后,应该如何选择测试哪个 (是继续测试大的,或者测试小的功能) 当初自己思考了很久, 这几篇文章就可以明白了。 这节约了太多时间了 [苦涩]2022-03-177
- 🌊高手之上的高高手2023-09-15归属地:上海1
收起评论