`
dcj3sjt126com
  • 浏览: 1871080 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

程序员修炼之道-DRY与巧合编程

阅读更多

DRY(Don’t Repeat Yourself)是架构设计中经常用到的一句话,这一原则应用非常广泛,在程序设计中同样会用到,不少代码或许不知不觉中违反了这一定义,如《程序员修炼之道》一书中就有如下一题,重构下面一段代码

if (state == TEXAS) {
    rate = TX_RATE;
    amt = base * TX_RATE;
    calc = 2 * basis(amt) + extra(amt) * 1.05;
} else
    if ( (state == OHIO || (state == MAINE)) {
rate = ((state == OHIO) ? OH_RATE : ME_RATE);
amt = base * rate;
calc = 2 * basis(amt) + extra(amt) * 1.05;
if (state == OHIO)
points = 2;
} else {
    rate = 1;
    amt = base;
    calc = 2 * basis(amt) + extra(amt) * 1.05;
}

 


 
可能很多人读此代码都有似曾相识之感,不错,我们身边不少程序员就是如此编程的。这段代码就是由于太多Repeat造成罗嗦难懂,结构复杂,维护困难。大家可能都会迅速想到两点重构方法
1. amt, calc 可以移出来
2. 第2个if可以拆分

但是这样就完美了吗?4个if/else是否让人闻到一股不对劲的气味?这段程序是否还是传统结构化编程思维?if条件中state再增多程序会怎样?因此虽然是一段很短的代码,但是重构优化实际是无止境的。



再谈巧合编程(Don’t Programmer by Coincidence),在很多项目中其实也很常见,巧合编程就是有问题的代码在开发过程中恰好能运行通过,但是运行在别的环境很容易就出问题,比如下面的C++代码
a = 2;
b = 3;
if (a + b != 5) exit(1);

什么情况会exit(1)?

传统智慧认为,项目一旦进入编码阶段,工作主要就是机械的把设计转换成可执行语句。这种态度是许多程序低效、不可维护的最大原因。

我们大多数人都能够几乎自动地驾驶汽车,我们不用明确的命令我们的脚踩刹车,或是命令手动方向盘,我们只是想“减速并右转”。但是,可靠的司机会不断查看周围的情况,检查潜在的问题,并且让自己在万一发生意外时处在有利的位置上。编码也是这样。

因此开发过程质量问题非常重要, 有经验的程序员懂得如何避开前进过程中的各种雷区。Code review就是在你的驾驶过程中,由另外一名有经验的驾驶员坐在副驾的座位上,帮你纠正各种危险的驾驶习惯,避免在当时或以后踏入各种已知的雷区。

  • 大小: 19.3 KB
分享到:
评论

相关推荐

    前端开源库-json-dry

    **压缩包子文件的文件名称列表:** "json-dry-master" 这个文件名暗示了这是项目的主要分支或者源码仓库,通常在Git版本控制系统中,“master”分支代表项目的主线代码。在解压后,这个目录可能包含了项目的所有源...

    Ruby-dryrun直接从命令行中尝试任何Android库在你的手机上

    标题 "Ruby-dryrun直接从命令行中尝试任何Android库在你的手机上" 提供了关于一个名为 `dryrun` 的工具的信息,该工具允许开发者在Android设备上快速测试库的功能,无需完整的集成过程。这个工具是用Ruby语言编写的...

    PyPI 官网下载 | stem-dry-run-1.5.4.tar.gz

    标题中的"PyPI 官网下载 | stem-dry-run-1.5.4.tar.gz"表明这是一个在Python Package Index(PyPI)上发布的开源软件包,名为`stem-dry-run`,版本为1.5.4,且已打包成`.tar.gz`格式。这种格式是Linux和Unix系统中...

    go-dry:Go的DRY(不要重复自己)软件包

    为了深入了解`go-dry`包,可以下载`go-dry-master`压缩包,里面包含了源代码、示例以及可能的测试用例。通过对源码的学习,开发者可以更好地理解如何在自己的项目中应用DRY原则,提升代码质量和可维护性。 总的来说...

    开源项目-moncho-dry.zip

    开源项目-moncho-dry.zip,Dry v0.8b1 released: featuring Docker Swarm support

    程序员修练之道英文版

    《程序员修炼之道》是一本备受推崇的编程领域经典著作,英文原版名为"The Pragmatic Programmer",由Andrew Hunt和David Thomas共同撰写。这本书旨在帮助程序员提升技能、提高工作效率,并在软件开发过程中培养出更...

    Android-dryrun.zip

    Android-dryrun.zip,尝试任何android库的演示项目,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。

    json-dry::sun_with_face:JSON-dry允许您序列化和恢复包含循环引用,日期,正则表达式,类实例的对象。

    JSON-dry允许您对包含循环引用,日期,正则表达式等的对象进行字符串化处理。 它也可以用于序列化和恢复您自己的类的实例。 目录 安装 $ npm install json-dry 用法 基本例子 这是一个字符串对象(包含对同一对象...

    基于Java语言的ly-dry-cleaning干洗店平台整合设计源码

    该项目为基于Java语言的ly-dry-cleaning干洗店平台整合设计源码,总文件量195个,涵盖168个Java源文件、17个XML配置文件、2个Markdown文档、2个YAML文件、1个Git忽略文件、1个许可证文件、1个JPG图片文件、1个属性...

    NX二次开发UF-CLONE-set-dryrun 函数介绍

    NX二次开发UF_CLONE_set_dryrun 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士,...

    NX二次开发UF-CLONE-ask-dryrun 函数介绍

    NX二次开发UF_CLONE_ask_dryrun 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士,...

    vuex-dry:[不再维护]`vuex-dry`有助于保持您的vuex代码干燥

    vuex-dry有助于使您的vuex代码保持干燥。 它没有介绍使用vuex的任何全新方法。 它仅需最少的代码即可帮助您构建模块,并添加一些便捷的getter,变异和操作。 vuex-dry是用TypeScript编写的,因此对TypeScript友好。...

    movie-dryrun-1:与Steve K配对编程

    标题中的“movie-dryrun-1:与Steve K配对编程”表明这是一个关于软件开发的项目,特别是关于电影浏览应用的。在这个项目中,开发者与一个名为Steve K的人进行了配对编程,这是一种常见的团队协作方式,可以提高代码...

    A LBM approach for wet-dry boundary treatment

    一种基于格子Boltzmann理论的干湿边界处理方法,刘海飞,丁禹,本文基于一维浅水方程的格子Boltzmann模型,开发了一种干湿边界处理方法。通过Chapman-Enskog和泰勒展开公式,将干网格和湿网格联系起来�

    kubernetes常用命令表

    $ kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] ``` ##### 1.2 示例: ```shell # ...

    Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版

    《Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版》是针对现代Web开发的一本经典教程,专注于使用Ruby on Rails框架实现敏捷开发方法。这本书的中文版为中国的开发者提供了便利,使他们能够更好地理解和应用这个...

    化工应用数学-02.2-python编程基础-python高级语法-讲义1

    在Python编程中,掌握基础语法是至关重要的,特别是在化工应用数学这样的领域,Python因其简洁的语法和强大的计算能力成为常用工具。本讲义主要涵盖了Python的条件语句、三目操作符、循环语句(while和for)、range...

    Web开发敏捷之道-应用Rails进行敏捷Web开发(中英版)

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,强调DRY(Don't Repeat Yourself)原则,致力于提高开发效率和代码可读性。Rails的核心理念...

    程序员必须遵守的编程原则.docx

    ### 程序员必须遵守的编程原则 在软件开发领域,遵循良好的编程原则对于创建高效、可维护的代码至关重要。以下是对《程序员必须遵守的编程原则》文档中提到的关键原则的深入解析。 #### 1. 不要自我重复 (DRY - ...

Global site tag (gtag.js) - Google Analytics