知识大全 JBuilder2005实现重构之类内部提炼
Posted 变量
篇首语:历览千载书,时时见遗烈。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JBuilder2005实现重构之类内部提炼相关的知识,希望对你有一定的参考价值。
JBuilder2005实现重构之类内部提炼 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
提炼方法 对于一个方法体庞大的方法 可以使用Extract Method将其一部分代码提炼到一个小方法中 并在原处添加提炼方法的调用 如果方法中存在重复的代码段 则这个代码段很有必须提炼为一个单独的方法 以便复用 要将一块代码提炼为一个单独的方法 只需要选中这块代码 并通过Ctrl+Shift+R >Extract Method调出提炼方法的重构对话框来进行操作 JBuilder会分析选中代码块中所引用的上下文变量 目标方法定义相应的参数 通过方法入参来传递这些变量 如下面的drive()方法在Horse java中定义 其代码如下 代码清单 未提炼方法前的drive()方法 public void printQuotation(int amount) printBanner(); System out println( 单价 +price); System out println( 购买只数 +amount); System out println( 总价: +(price * amount)); 我们希望将第 ~ 行代码块抽取到一个称为printDetail()的方法中 选中第 ~ 行的代码 >Ctrl+Shift+R >Extract Method调出提炼方法对话框 如下图所示 educity cn/img_ / / / jpg> 在Method name中键入printDetail 按OK后 JBuilder将选中的代码块提炼到新的方法中 并在原方法处插入提炼方法的调用 代码清单 进行方法提炼后的代码 public void printQuotation(int amount) printBanner(); printDetail(amount);//在源处插入对抽取出方法的引用 //抽取出来的方法 private void printDetail(int amount) System out println( 单价 +price); System out println( 购买只数 +amount); System out println( 总价: +(price * amount)); printDetail()方法有一个入参用于传递代码块所引用的上下文变量 在第 行的调用处将变量通过printDetail()的amount入参传入 内联方法 内联方法是提炼方法的反操作 即用方法体替换方法调用 当方法是private且再没有其他地方调用该方法时 JBuilder在内联方法后 一并删除这个被内联的方法 如我们将光标放置代码清单 的第 行printDetail()处 Ctrl+Shift+R >Inline Method JBuilder直接将printDetail()方法体内联到第 行处 因为在Horse java中没有其他地方调用printDetail()所以 该函数内在联后将从Horse java中删除 内联后代码如代码清单 所示 如果系统中所有函数都似乎只是对另一个函数的简单委托 形成过多的间接层 过多的委托将使程序的关系变得不易理解 此时可以使用内联方法去除这些无用的委托方法 提炼变量 我们曾经说过 不同的方法有重复的代码块时 须考虑将其抽取为一个独立的方法 不同的类有重复的方法时 须考虑抽取到一个新的类中 相似的 如果一个方法中多次重复出现同一个表达式 此时你可以考虑将这些相同的表达式提炼为一个局域变量 请看下面的代码 代码清单 重复的表达式 public void printAccountPrice(int amount) if(amount <= ) System out println( 总价 + (amount * price)) ; else if(amount <= ) System out println( 总价(打 折) + (amount * price) * ) ; else System out println( 总价(打 折) + (amount * price) * ) ; 在printAccount()方法中表达式amount*price重复出现 次 我们可以在函数开始处引入一个局域变量 用这个变量替换这个表达式 Ctrl+Shift+R >Introduce Variable调出引入变量的对话框 如下图所示 educity cn/img_ / / / jpg> 引入变量对话框 Name totalPrice 引入的变量名 Type 变量类型 不可变 JBuilder自动断定 Expression 你所选中的计算表达式 Include all read expressions 如果此选项勾选 则JBuilder将在方法范围内查找所有重复的表达式 一并替换 你没有什么理由不选择这个设置项 按OK后完成重构 重构后代码如下所示 代码清单 引入局域变量去除重复表达式 public void printAccountPrice(int amount) double totalPrice = (amount * price); if(amount <= ) System out println( 总价 + totalPrice) ; else if(amount <= ) System out println( 总价(打 折) + totalPrice * ) ; else System out println( 总价(打 折) + totalPrice * ) ; 特别的 如果一个表达式过于复杂 应当按特定意义划分成多个部分 每个部分抽取成一个独立的局域变量 以提高程序的可读性 如下面是计算n个圆锥的造价 n*Math PI*r*r*h/ *price 可以将其重构为以下的形式 double s = Math PI*r*r*h/ ;//圆锥体积 totalPrice = n * s * price;//n个圆锥造价 内联变量 和内联方法一样 内联变量是提炼变量的反操作 有两种内联变量的方法 如果你将光标放置在变量的定义处进行内联变量重构 所有引用该变量的地方都被替换 变量定义语句被删除 如果你将光标置于引用变量处进行内联变量操作 则可以有两种选择 只对当前的位置进行变量内联或内联变量的所有引用处 我们使用代码清单 演示第二种内联变量的方法 将光标置于第 行代码的totalPrice处 Ctrl+Shift+R >Inline Variable调出内联变量的重构对话框 如下图所示 educity cn/img_ / / / jpg> 内联变量对话框 Variable 选择内联的变量 Expression 内联的表达式 Replace all occurrences 内联所有引用totalPrice变量的地方 否则只内联当前引用处 cha138/Article/program/Java/hx/201311/25824相关参考
JBuilder2005实现重构之分布式重构 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由于
JBuilder2005实现重构之重构前的侦察 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 有
JBuilder2005代码审查功能体验(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 代
JBuilder2005代码审查功能体验(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 命
JBuilder2005单元测试之JUnit框架 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 JBuilder2005 Struts深度体验之改造
JBuilder2005Struts深度体验之改造 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 JBuilder2005 Struts深度体验之概述
JBuilder2005Struts深度体验之概述 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
JBuilder2005单元测试之创建测试固件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在
JBuilder2005创建开发文档之编写注释 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 可
JBuilder2005单元测试体验之测试配置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在