徐昊 · TDD 项目实战 70 讲
徐昊
Thoughtworks 中国区 CTO
18159 人已学习
新⼈⾸单¥98
登录后,你可以任选4讲全文学习
课程目录
已完结/共 88 讲
实战项目二|RESTful开发框架:依赖注入容器 (24讲)
实战项目三|RESTful Web Services (44讲)
徐昊 · TDD 项目实战 70 讲
15
15
1.0x
00:00/00:00
登录|注册

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
立即购买
登录 后留言

全部留言(26)

  • 最新
  • 精选
  • 🐑
    置顶
    大家好~我是TDD这门课的编辑辰洋~ 🎐我来友情提示一下下~ 01-04是视频演示,好对TDD有个感性的认识。 05-10是对演示的复盘,同时也会讲解TDD的相关知识点。比如测试的基本结构,TDD中的测试是啥~ 所以,如果你在01-04的操作卡壳了,可以从05开始学,看看5-10,这才是重点哇。看完再回头去看01-04~
    2022-03-22
    3
  • webmin
    通过观察最初列出的TODO List与最后完成的代码,感觉两者更像是接口定义与实现的关系,TODO List是列出了想要的功能定义,功能的实现是可以有多种的方式和不同的质量的,TDD是帮助我们从可用代码进化到优质代码的一种优秀的工程实践方法。 到达目标(TODO List)的路很多条,在没有上帝视角的情况下,唯有通过实践才能得知在当前条件下哪个路径是最佳的,TDD可以帮助减小改进的成本,固化测试知识,每进行一次回归测试收益就增加一次。

    作者回复: good

    2022-03-27
    5
  • hippie
    个人 C# 版本代码最终示例:https://github.com/hippieZhou/geektime.tdd

    编辑回复: 用自己熟悉的语言写了一遍哎!真棒👍

    2022-05-15
    1
  • aoe
    感受到了极限编程的气息! 学习笔记:http://wyyl1.com/post/19/04/

    作者回复: good

    2022-03-27
    1
  • 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程序员,为什么能这么6
    2022-03-22
    1
    23
  • 阿崔cxr
    文中几个点 都是当初学习 tdd 的时候 纠结半天的点 比如 1. 一开始从接口出发 那么这么大的步骤如何驱动出来 2. 重构出来多个类之后,应该如何选择测试哪个 (是继续测试大的,或者测试小的功能) 当初自己思考了很久, 这几篇文章就可以明白了。 这节约了太多时间了 [苦涩]
    2022-03-17
    7
  • 🌊
    高手之上的高高手
    2023-09-15归属地:上海
    1
收起评论
显示
设置
留言
26
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部