Introduce Explainning Variable(引入解释性变量)

Summary:

  • 将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途。

Tips:

  • 在条件逻辑中,Introduce Explaining Variable可以用来将每个条件子句提炼出来,以一个良好命名的临时变量来解释对应条件子句的意义。

Comments by Allen Lee:

Inline Temp与Introduce Explaining Variable:

  • 两者在一定程度上(外表行为)恰恰相反。前者把临时变量的表达式直接插入调用方以便去掉临时变量,后者却把相关表达式提炼出来用一个临时变量代替。
  • 前者要去掉的临时变量所代表的表达式是比较简单的,一般用来储存直接对某个函数或者某个对象的成员函数调用所得到的返回值,如order.GetResult();(函数样式)或者order.Result;(C# property 样式);而后者要提炼的表达式确实比较复杂,至少不是一眼可以看出其含义的,如textBox1.Text.ToUpperCase().Contains("@");。
  • 前者一般是为实施其他重构原则,例如Extract Method,铺平道路所用;而后者则一般为提高代码,尤其是不能一眼看出其含义的复杂表达式,的可读性所用。
  • 后期优化时,有时某些表达式虽然比较简单,例如order.GetResult();,但由于其内部算法复杂并只赋值一次,如果把它使用Inline Temp直接嵌入调用方,那么每次需要用到的时候都进行一次计算将会付出很大的代价。此时我们可能首先看看是否能够把该函数进行Extract Method,再看看是否能够Substitute Algorithm,尽量把函数分割,实在没办法的时候,我们就只能重新引入临时变量把结果储存一次留为后用。

Introduce Explaining Variable与Replace Temp with Query:

  • 这两者可以看情况组合使用。当我们发现某些表达式返回的结果其实可以对外开放,那么,我们可以用Introduce Explaining Variable引入临时变量,然后用Replace Temp with Query把这个临时变量提取到一个单独的Query。
  • 这两者组合使用有时候也等效于直接使用Extract Method。所以,如果你有时候发现要提炼的函数由于临时变量太多而逻辑不清晰,不妨把Extract Method的过程拆成这两者来用,往往会收到意想不到的效果。

转载于:https://www.cnblogs.com/allenlooplee/archive/2004/10/21/54360.html

Introduce Explainning Variable相关推荐

  1. 6.5 Introduce Explaining Variable(引入解释性变量)

    概括         你有一个复杂的表达式.          将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名来解释表达式用途.       例子 if((platform.toUp ...

  2. android studio中Option + Enter选择了disable 'introduce local variable'

    今天在AS中,使用Option + Enter生成变量时,不小心做了如下操作,然后 使用Option + Enter生成变量时没反应了. 解决方法: 打开Preferences/Editor/Inte ...

  3. ieda-自动引入局部变量(introduce local variable)快捷键

    idea中 一个很好用的快捷键,自动创建对象类型和对象名. ctrl+alt+V 将自动创建一个对象和对象名,快捷键 ctrl+alt+V , introduce local variable 非常方 ...

  4. intellij IDEA中 introduce local variable 快捷键自动补全

    intellij IDEA中 introduce local variable 快捷键自动补全 解决:Alt+Enter 就会弹出如下界面 选择后 便可以自动补全

  5. Mac idea 代码自动补全快捷键 introduce local variable(引入局部变量)

    Mac idea 变量的自动补全 自动补全前代码: MyBatisUtils.getSqlSession(); 自动补全后代码: SqlSession session = MyBatisUtils.g ...

  6. Introduce Explaining Variable(引入解释性变量)

    难于理解的复杂表达式 if ((platform.toUpperCase().indexOf("MAC") > -1) &&(brower.toUpperCa ...

  7. 6.5 Introduce Explaining Variable 引入解释性变量

    将复杂表达式的结果放进一个临时变量,通过该变量的名称解释表达式的用途 更多精彩 更多技术博客,请移步 asing1elife's blog 动机 表达式可能非常复杂而且难以阅读 在较长的算法中可以运用 ...

  8. idea调用自己的方法(introduce local variable)

    可以使用alt + Enter快捷键来创建相应类型的变量增加开发的效率,例如创建对象的时候就可以使用这个

  9. idea怎么样调出来 introduce local variable(idea自动创建变量)

    使用alt + Enter快捷键来创建相应类型的变量增加开发的效率 如 使用前: 使用时:(按alt+enter) 使用后: idea自动给我们创建了一个相应的对象 并起了名字

最新文章

  1. AlarmManager与PendingIntent的联合使用(一)
  2. Istio:一个用于微服务间通信的服务网格开源项目
  3. JS实现点击左边标题栏,右边显示对应信息
  4. mysql版本 hibernate_Mysql 不同版本 说明
  5. maven没有resource文件夹_maven项目中没有resource文件夹的问题
  6. jks与keystore的区别
  7. es6基本语法,vue基本语法
  8. 笔记之配置 solr和zookeeper遇到的问题
  9. TypeScript 再次发布一个奇怪的版本:3.3.4000
  10. py2topy3+cmd 命令
  11. 如何将pdf压缩到最小?怎么将pdf文档压缩至更小?
  12. 如何用 css 画一个正方体
  13. python的repl模式_ESP32学习4-烧录MicroPython并使用REPL
  14. 面试利器,精心整理了份Python数据分析,知识点高清速查表!
  15. 激光雷达(LiDAR)辐射对身体有害吗?
  16. 解析dwg文件圆弧段被直线化解决方案及相关可能出现的问题(AutomationException: 0x800401f5和AutomationException: 0x80040228)
  17. [2]工作流框架:支持MySQL的Flowable安装
  18. 关于sizeof()使用的几个圈套
  19. 华为云+GitHub搭建个人博客
  20. python 爬取音乐

热门文章

  1. 分圆多项式 cyclotomic polynomial
  2. 服务器如何检测当前网站php版本,以及修改php上传附件参数
  3. 安卓开发 中文教程(14):新手福音——动作栏(Action Bar)
  4. Python多线程处理
  5. RPM软件包管理器dnf
  6. Vue + ElementUI上传带图片的表单
  7. 昆山市招商理念何以如此恐怖?
  8. W ndows32病毒危不危险,现在 Windows 病毒还多吗?
  9. js 数组操作 以固定位数 为一组 循环数组
  10. 23岁产妇坐月子双腿险被截肢,产后绝对不能做这八件事!