清除代码异味

 

今天,Venkat Subramaniam 就关于清除代码异味的话题给我们做了一个非常有趣的演讲。下面就是我记录的一些他的话。

  为什么我们需要有质量的代码?

  • 敏捷开发方法是用来应付那些要求代码做大量改动的反馈信息的方法。
  • 如果程序没有用一种好的表达方式来表现,那程序会很难读,难维护,难修改。

  什么是代码异味?

  • 代码异味是一种由写的很差的代码引起的一种有臭味的感觉,一种程序什么地方会有问题的感觉
  • 异味更多的是来自一种直觉,而不是一种有据可查的标准,当你看到有味的代码时你就“感觉”到了
  • 如果你不把异味清除,不久之后你就会习惯这种气味,不再对它有察觉
  • 用任何语言都能写出有异味的代码:即使最简单安全的语言,你也能做出天才才能想出的蠢事:)
  • 我们经常会意识不到自己在写很臭的代码,经常需要外人为我们指出这点
    • 边注:如果你不想刻意去批评某人的程序,不要说“太愚蠢了”,要说“哦,这很有意思…。可有一种更好的方法你知道吗”

  重复的代码

  • 会引起程序里面多个地方相同的错误
  • 印度小伙:每两个月我们都会把这相同的错误修改一次
  • Venkat:你们去掉了重复的代码了吗?
  • 印度小伙:你说的这个方法不错!

  不必要的复杂

  • 程序员本质上讲高兴去处理复杂的问题
  • 复杂最恐怖

  异常处理

  • 问:有什么比一个空的异常捕捉代码更糟糕的?
    • try{... } catch (Exception e){}
  • 答:一个带有注释的空异常捕捉代码!
    • try{... } catch (Exception e){// is this required? }
  • Java的异常检查:好还是不好?
  • 如果你不想处理一个异常,就把它传递下去
  • 如果你想捕捉两个异常,使用两个catch代码,不要只写一个而用If条件处理

  Switch语句& 按类型的条件判断

  • Switch语句和按类型的条件判断通常可以用多形性来代替

  长方法

  • 你不能在一屏上看到整个方法
  • 这通常意味着一个方法承担这多重任务
  • 难于调试
  • 不可测试
  • 难于重用-> 导致程序员从方法的其它地方拷贝粘贴出重复的代码
  • 复杂的条件语句-> 挑战大脑的逻辑分析能力
  • 方法长度:组织归纳水平比控制代码行数更重要

  方法组成模式

  • 方法里的所有语句都必须处在同一个归纳层次上

  无用的注释

  • 让代码自我表白
  • 标注为什么这样,而不是如何这样
  • 对方法表现进行描述等于重复表现
  • 这样的注释等于重复写一遍代码
    • i += 1 //递增
  • 长方法里用来描述这个方法有不同的功用的注释
    • 把里面的功能片段提取成小方法& 删除注释
  • IDE排泄物:IDE自动产生的注释空白占位符
  • 糟糕的注释通常产生于TDD*
    • *(TDD:Threat driven development,恐吓驱动开发)——你应该为方法的表象写注释,你应该为长方法写注释,等
  • 产品里的注释:
    • //上帝保佑,我实在不知道这是什么意思

  变量名称

  • 使用能表意的名称
  • 不要用单个字母做名称
  • 也不要使用太长的名称

  继承

  • 继承更多的是被滥用了
  • 组合通常优于继承
  • 在一对一关系中使用继承,满足Liskov替换原则
  • 不要用继承来实现方法重用
  • 重用方法时,委托是个更好的选择

  粘手的语言

  • 这种语言更容易导致犯错误

  最臭的代码

  • 冗长的类
  • 重复的代码
  • 淘汰的方法
  • 不必要的塑型(cast)
  • 过度使用设计模式

  代码除味

  • 代码复查!
    • 写出之后尽快进行
    • 要增量进行
    • 要复查测试用例
  • 可使用结对编程
    • 但要保持结对伙伴的经常变动,否则你会习惯你的气味,不再会有察觉
    • 结对伙伴一、两天调换一次

  一些设计原则

  一些参考书籍

  问和答

  • 关于使用代码检测工具,例如PMD:这样的工具非常的有用,它能让你捕捉到很直接的问题,使你的代码复查工作专注于高层面的设计原则问题
  • 关于IDE上附加的工具:不要自己去运行它们。让这些工具在后台自动的运行(或智能化)
  • 动态语言里需要重构吗:动态语言里没有太多的自动重构工具,但程序员仍然应该手动的重构
  • 关于动态语言的设计模式:每种语言都有自己的模式和特色。例如:smalltalk的execute around method模式
  • 关于掌握多种语言
    • 你应该知道处理一个问题的多种范式,多种风格和多种方式
    • 一种语言中学到的特色方法应用到其它语言里
    • 知道各种不同方式的各自风险
  • 关于编程语言趋势:对函数性编程,移动设备编程兴趣浓厚
  • 关于著书:长时间的思考书中的各项主题,多做这方面话题的讨论,吸取精华。当开始动手去写时,已经胸有成竹,2周内把书写成
  • 关于思考文献:思考文献很有用,但你也要多看看批评性的思考性文章,它们是关于你如何去思考的(double loop learning?)
  • 关于学习:在用户组里跟其它人合作,交流,讨论。你并不能学到所有的东西,但要努力缩小自己的“你不知道你不知道的东西”,让它成为“你知道你不知道的” 
k8s篇之underlay网络和overlay区别 underlay和overlay 阅读详情

相关推荐

STM32F407标准库下ADC多通道DMA采集的配置与优化

本文详细介绍了STM32F407标准库下ADC多通道DMA采集的配置与优化方法。通过GPIO模拟输入配置、ADC时钟和模式设置、DMA传输参数配置等关键步骤,实现高效的多通道数据采集。文章还提供了性能优化技巧和常见问题排查指南,帮助开发者提升采样速率和稳定性。

weixin_29192141的博客 433

代码异味(code smell):代码的坏味道

定义: 由于设计缺陷或不良编码习惯而引入程序的、导致深层次质量问题的代码症状。 常见的代码异味: 1 BLOB 实现多个职责、具有大量属性、操作、与数据类有依赖关系的类。 2 依恋情结 (Feature Envy) 一个类过度使用另一个类的方法。 3 过长方法 (Long Method) 函数方法的代码过长。 4 过长参数列表 (Long Pa...

qq_36911138的博客 6604

5.FxBlue跟单常见问题

fxblue喊单ea和fxblue跟单会在mt4/mt5客户端ea栏目里记录fxblue在跟单复制订单过程中的全面记录。在遇到问题时,我们首先要恢复默认参数尝试,然后再到ea栏找报错提示。 ​ 需要注意的是,是EA选项卡,而不是日志选项卡。 此外,您可以在 MT4/5 软件终端面板的"EA"选项卡中查看跟单记录,您可以通过右键单击 Experts 日志并从 MT4/5 的弹出菜单中选择“打开”来打开每日日志文件以及历史文件。 5.1 No “heartbeat” received 没有收到“心跳” 接收方

weixin_44406393的博客 1874

代码的坏味道(转https://www.jianshu.com/p/4494c25bf302)

假设一段代码是不稳定或者有一些潜在问题的,那么代码往往会包括一些明显的痕迹。 正如食物要腐坏之前,常常会发出一些异味一样。 我们管这些痕迹叫做“代码异味”。 參考资料: Bad Smell(代码的坏味道) Code smells Duplicated Code --------(反复代码)难维护。 解决方法:提取公共函数。 Long Method ------------(函数长)难理解。 解决方法:拆分成若干函数。 Large Class ------------(类大)难理解。 解决方法:拆分成若干类。

qq_43510643的博客 550

Blender----利用DEM(tif)生成三维模型

利用DEM(tif)生成三维模型

LongJ_Sir的博客 5422

Miniconda3迁移(附图详细过程)

服务器上目录占满,想要将conda迁移到其他目录下的操作方法,详细教程。

2301_77554343的博客 6942

重构之道--清除代码异味

重构之道--清除代码异味 为什么我们需要有质量的代码? 敏捷开发方法是用来应付那些要求代码做大量改动的反馈信息的方法。如果程序没有用一种好的表达方式来表现,那程序会很难读,难维护,难修改。   什么是代码异味? 代码异味是一种由写的很差的代码引起的一种有臭味的感觉,一种程序什么地方会有问题的感觉异味更多的是来自一种直觉,而不是一种有据可...

weixin_30872789的博客 230

Linux安装部署PostgreSQL详细步骤

Linux安装部署PostgreSQL详细步骤

2301_77356579的博客 9321

Bad Smell(代码的坏味道)

1.Duplicated Code(重复的代码)臭味行列中首当其冲的就是Duplicated Code。如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好。最单纯的Duplicated Code就是[同一个class内的两个方法含有相同表达

sulliy的专栏 1万+

Python 爬虫实战:美团大众点评餐厅数据爬取与分析

本文摘要:美团/大众点评餐厅数据爬虫实战指南 本文详细介绍了如何开发一个完整的餐厅数据爬虫系统,涵盖从环境配置到数据可视化的全流程。主要内容包括: 项目目标:爬取餐厅基本信息(名称、评分、价格等)及详情数据,支持市场分析和商业决策 技术方案:使用Python生态工具(Requests、Playwright、Pandas等)构建爬虫系统 核心挑战:破解大众点评的字体反爬机制和美团的API签名验证 实现细节:提供完整的代码示例,包括字体解析、签名生成、请求重试等关键功能 数据应用:支持将结果导出为CSV/Exc

u014481728的博客 315

Codex CLI 手机号验证失败?5 种接码平台实测对比与绕过地区限制的 3 步操作

揭示 Codex CLI 手机号验证失败的真实原因在于上下文污染而非网络问题,分析其通过 ASN、Accept-Language 和 TLS SNI 三重加权风控的机制,并实测对比 5 种接码平台在 DNS 解析路径、ASN 干净度和复用间隔上的差异,提出剥离浏览器指纹、固化 TLS SNI、隔离

weixin_42627902的博客 730

代码异味 (Code smells)

如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹。 正如食物要腐坏之前,经常会发出一些异味一样。 我们管这些痕迹叫做 代码异味 。 No.1 重复代码 (Duplicated Code) 解决方案: 同一个class内的两个函数含有相同的表达式。——需要Extract Metho

双手成就你的梦想 1085

SAP Fiori Launchpad 概述

SAP Fiori launchpad 是托管 SAP Fiori 应用程序的 shell,并为应用程序提供导航、个性化、嵌入式支持和应用程序配置等服务。SAP Fiori Launchpad 是移动和桌面设备上 SAP Fiori 应用程序的入口点。启动板显示带有图块的主页,其中可以显示实时状态指示器,例如打开的任务数量。每个图块代表用户可以启动的业务应用程序。这包括 SAP Business Suite 事务应用程序和 SAP Smart Business 分析应用程序。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 931

[查异常网]-20160401-清除代码异味

想下班早的码农都关注我~~~         为什么我们需要有质量的代码? a)敏捷开发方法是用来应付那些要求代码做大量改动的反馈信息的方法。 b)如果程序没有用一种好的表达方式来表现,那程序会很难读,难维护,难修改。 查异常网 关注了该问题什么是代码异味? 1k 代码异味是一种由写的很差的代码引起的一种有臭味的感觉,一种程序什么地方会有问题的感觉 20 异味更多的是来自一种直觉,而不是一

505

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

清除代码异味[转自掰掰开发]

为什么我们需要有质量的代码? 敏捷开发方法是用来应付那些要求代码做大量改动的反馈信息的方法。  如果程序没有用一种好的表达方式来表现,那程序会很难读,难维护,难修改。 什么是代码异味? 代码异味是一种由写的很差的代码引起的一种有臭味的感觉,一种程序什么地方会有问题的感觉  异味更多的是来自一种直觉,而不是一种有据可查的标准,当你看到有味的代码时你就“感觉”到了  如...

weixin_33712987的博客 90

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

清除代码异味(转载)

今天,Venkat Subramaniam 就关于清除代码异味的话题给我们做了一个非常有趣的演讲。下面就是我记录的一些他的话。   为什么我们需要有质量的代码? 敏捷开发方法是用来应付那些要求代码做大量改动的反馈信息的方法。 如果程序没有用一种好的表达方式来表现,那程序会很难读,难维护,难修改。   什么是代码异味? 代码异味是一种由写的很差的代码引起的一种有臭味的感觉,...

weixin_30362801的博客 156

Venkat 演讲翻译:你要清除代码中的异味

今天,Venkat Subramaniam 就关于清除代码异味的话题给我们做了一个非常有趣的演讲。下面就是我记录的一些他的话。 为什么我们需要有质量的代码? 敏捷开发方法是用来应付那些要求代码做大量改动的反馈信息的方法。 如果程序没有用一种好的表达方式来表现,那程序会很难读,难维护,难修改。 什么是代码异味? 代码异味是一种由写的很差的代码引起的一种有臭味的感觉,一种程序什么...

weixin_33919950的博客 113
上一篇: 考考你的C/C++应用能力
下一篇: 学习JAVA浮点数必看文章!
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值