当前位置: 首页 > article >正文

代码整洁之道(一)

在这里我要对一个知识点做出解释

隔指令 与询问

函数要么做什么事,要么回答什么事,但二者不可得兼。函数应该修改某对象的状态,或是返回该对象的有关信息。两样都干常会导致混乱。看看下面的例子:

public boolean set (String attribute, String value) ;

该函数设置某个指定属性,如果成功就返回true,如果不存在那个属性则返回false。 这样就导致了以下语句:

if (set ("username", "unclebob"))...从读者的角度考虑- -下吧。这是什么意思呢?它是在问usemame属性值是否之前已设置为unclebob吗?或者它是在问username属性值是否成功设置为unclebob呢?从这行调用很难判断其含义,因为set 是动词还是形容词并不清楚。作者本意,set 是个动词,但在if语句的上下文中,感觉它像是个形容词。该语句读起来像是说“如果username属性值之前已被设置为uncleob",而不是“设置username属性值为unclebob,看看是否可行,然后.....”。要解决这个问题,可以将set 函数重命名为setAndCheckIfExists,但这对提高if 语句的可读性帮助不大。真正的解决方案是把指令与询问分隔开来、防止混淆的发生。使用异 常替代返回错误码从指令式函数返回错误码轻微违反了指令与询问分隔的规则。它鼓励了在if语句判断中把指令当作表达式使用。

if (deletePage (page) == E_ 0K)

这不会引起动词/形容词混淆,但却导致更深层次的嵌套结构。当返回错误码时,就是在要求调用者立刻处理错误。
if (deletePage (page) == E _0K) {
if (registry. deleteReference (page .name) == E_ 0K) {
if (configKeys .deleteKey (page . name .makeKey()) ==E _0K) {
logger .1og ("page deleted") ;

转载于:https://www.cnblogs.com/muailiulan/p/11071299.html

http://www.lryc.cn/news/2413562.html

相关文章:

  • CSS 图片去色处理
  • 个人主页登陆界面
  • apache php mysql 开发_apache+php+mysql开发环境搭建
  • 怎样彻底删除系统服务项
  • 一个简单的WebService调用天气预报接口的demo
  • Java文字格斗小游戏-Day05
  • 世界机器人冠军王宇航_★​身边的榜样,为你喝彩:我校学子摘冠第七届河南省VEX U机器人挑战赛...
  • 设置导航栏nav全透明
  • 破解锐捷3.35-0618的密码
  • Struts2 框架(一) —— Struts2 开发示例、在 Action 中接收请求参数、在 Action 中使用三大作用域
  • VMWare DOS 文件共享(虚拟光驱法)
  • 动易cms5.0如何安装在远程服务器上,动易PowerEasy_SiteWeaver_CMS6.8安装教程
  • 双人成行运行提示dinput8.dll丢失怎么办?双人成行运行提示dinput8.dll丢失或报错的全面解决方案
  • ifv播放器android 版,DVR\IFV监控录象播放器(DVRPlayer)
  • 简单的Flash网络游戏源代码
  • FlashFXP 3.6 Final(正式版)注册码
  • Gin 框架学习笔记(01)— 自定义结构体绑定表单、绑定URI、自定义log、自定义中间件、路由组、解析查询字符串、上传文件、使用HTTP方法
  • java实现zigzag扫描
  • 信号采集系统设计要点
  • Myeclipse 错误An internal error has occured 解决办法
  • 定时任务
  • ListView的分页显示
  • django学习笔记一:搭建简易博客
  • 手把手教如何搭建Linux环境(搭建云服务器) (Linux基础篇p1)_linux系统搭建云平台
  • Windows修改右键新建菜单【Win10、Win11版】
  • 探秘高性能网络库:LiteNetLib
  • 博客大巴,自动登录,并发布信息开发小计。
  • dropbox 怎么使用_如何在一台PC上使用多个Dropbox帐户
  • 虾米穷逼 VIP 事件回顾和由此引发的思考
  • 每天一篇论文 316/365 用于欠驱动系统能量控制端到端学习的深拉格朗日网络