我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java优化函数的构成有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java优化函数的构成有哪些

这篇文章主要介绍了Java优化函数的构成有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java优化函数的构成有哪些文章都会有所收获,下面我们一起来看看吧。

1. Extract Method (提炼函数)

解释:

如果发现一个函数的代码很长, 很可能的一种情况是这个函数做了很多事情, 找找看函数中有没有注释, 往往注释都是为了解释下面一块代码做的什么事情, 可以考虑将这块代码提炼(Extract)成一个独立的函数.

这样做的好处不言而喻, 是面向对象五大基本原则中的单一职责原则 (Single Responsibility Principle), 比较长的函数被拆分成一个个小函数, 将有利于代码被复用.

冲动前:

public void Print(Employee employee)   {   //print employee's information   Console.WriteLine("Name:" + employee.Name);   Console.WriteLine("Sex:" + employee.Sex);   Console.WriteLine("Age:" + employee.Age);   //print employee's salary   Console.WriteLine("Salary:" + employee.Salary);   Console.WriteLine("Bonus:" + employee.Bonus);   }

冲动后:

public void Print(Employee employee)   {   //print employee's information   PrintInfo(employee);   //print employee's salary   PrintSalary(employee);   }   public void PrintInfo(Employee employee)   {   Console.WriteLine("Name:" + employee.Name);   Console.WriteLine("Sex:" + employee.Sex);   Console.WriteLine("Age:" + employee.Age);   }   public void PrintSalary(Employee employee)   {   Console.WriteLine("Salary:" + employee.Salary);   Console.WriteLine("Bonus:" + employee.Bonus);   }

2. Inline Method (将函数内联)

解释:

有些函数很短, 只有一两行, 而且代码的意图也非常明显, 这时可以考虑将这个函数干掉, 直接使用函数中的代码.物件中过多的方法会让人感到不舒服, 干掉完全不必要的函数后代码会更简洁.

冲动前:

public bool IsDeserving(int score)   {   return IsScoreMoreThanSixty(score);   }   public bool IsScoreMoreThanSixty(int score)   {   return (score > 60);   }

冲动后:

public bool IsDeserving(int score)   {   return (score > 60) ;   }

3. Inline Temp (将临时变量内联)

解释:

如果有一个临时变量 (Temp)用来表示某个函数的返回值, 一般来说, 这样的做法挺好的. 但如果这个临时变量实在多余, 将这个临时变量内联之后毫不影响代码的阅读, 甚至这个临时变量妨碍了其它重构工作, 就应该将这个临时变量内联化.

把这个临时变量干掉的好处在于减少了函数的长度, 有时可以让其它重构工作更顺利的进行.

冲动前:

int salary = employee.Salary;   return (salary > 10000);

冲动后:

return (employee.Salary > 10000);   Replace Temp With Query (用查询式代替临时变量)

解释:

程序中有一个临时变量(Temp)用来保存某个表达式的计算结果, 将这个计算表达式提炼(Extract)到一个独立的函数(即查询式Query)中, 将这个临时变量所有被调用的地方换成对新函数(Query)的调用, 新函数还可以被其它函数使用.

好处在于减少函数长度, 增加代码复用率, 有利于代码进一步的重构. 并且注意 Replace Temp With Query 往往是 Extract Method 之前必不可少的步骤, 因为局部变量会使代码不太容易被提炼, 所以在进行类似的重构前可以将它们替换成查询式.

下面的这个例子不是很有必要使用Replace Temp With Query, 主要展示如何 Replace Temp With Query. 试想"冲动前"函数中有很多个代码块都使用到 totalPrice, 突然有一天我发现这个函数太长, 我需要将这一块块的代码提炼成单独的函数, 这样就需要将 totalPrice = price * num; 放到每一个提炼出来的函数中. 而如果原来函数中使用的是查询式, 就不存在这个问题. 如果查询式中的计算量很大, 也不建议使用 Replace Temp With Query.

冲动前:

public double FinalPrice(double price, int num)   {   double totalPrice = price * num;   if (totalPrice > 100)   return totalPrice * 0.8;   else   return totalPrice * 0.9;   }

冲动后:

public double FinalPrice(double price, int num)   {   if (TotalPrice(price, num) > 100)   return TotalPrice(price, num) * 0.8;   else   return TotalPrice(price, num) * 0.9;   }   public double TotalPrice(double price, int num)   {   return price * num;   }

5. Introduce Explaining Variable (引入可以理解的变量)

解释:

很多时候在条件逻辑表达式中, 很多条件令人难以理解它的意义, 为什么要满足这个条件? 不清楚. 可以使用Introduce Explaining Variable将每个条件子句提炼出来, 分别用一个恰当的临时变量名表示条件子句的意义.

好处在于增加了程序的可读性.

冲动前:

if((operateSystem.Contains("Windows"))&&   (browser.Contatins("IE")))     {     //do something    }

冲动后:

bool isWindowsOS = operateSystem.Contains("Windows");   bool isIEBrowser = browser.Contatins("IE");   if (isWindowsOS && isIEBrowser)   {   //do something   }

6. Split Temporary Variable (撇清临时变量)

解释:

例如代码中有个临时变量在函数上面某处表示长方形周长, 在函数下面被赋予面积, 也就是这个临时变量被赋值超过一次, 且表示的不是同一种量. 应该针对每次赋值, 分配一个独立的临时变量.

一个变量只应表示一种量, 否则会令代码阅读者感到迷惑.

冲动前:

double temp = (width + height) * 2;   //do something   temp = width * height;   //do something

冲动后:

double perimeter = (width + height) * 2;   //do something   double area = width * height;   //do something

7. Remove Assignments to Parameters (消除对参数的赋值操作)

解释:

传入参数分"传值"和"传址"两种, 如果是"传址", 在函数中改变参数的值无可厚非, 因为我们就是想改变原来的值. 但如果是"传值", 在代码中为参数赋值, 就会令人产生疑惑. 所以在函数中应该用一个临时变量代替这个参数, 然后对这个临时变量进行其它赋值操作.

冲动前:

public double FinalPrice(double price, int num)   {   price = price * num;   //other calculation with price   return price;   }

冲动后:

public double FinalPrice(double price, int num)   {   double finalPrice = price * num;   //other calculation with finalPrice   return finalPrice;   }

8. Replace Method with Method Object (用函数物件代替函数)

解释:

冲动的写下一行行代码后, 突然发现这个函数变得非常大, 而且由于这个函数包含了很多局部变量, 使得无法使用 Extract Method, 这时 Replace Method with Method Object 就起到了杀手锏的效果. 做法是将这个函数放入一个单独的物件中, 函数中的临时变量就变成了这个物件里的值域 (field).

冲动前:

class Bill   {   public double FinalPrice()   {   double primaryPrice;   double secondaryPrice;   double teriaryPrice;   //long computation   ...   }   }

冲动后:

class Bill   {   public double FinalPrice()   {   return new PriceCalculator(this).compute();   }   }   class PriceCalculator   {   double primaryPrice;   double secondaryPrice;   double teriaryPrice;   public PriceCalculator(Bill bill)   {   //initial   }   public double compute()   {   //computation   }   }

9. Substitute Algorithm (替换算法)

解释:

有这么一个笑话:

某跨国日化公司, 肥皂生产线存在包装时可能漏包肥皂的问题, 肯定不能把空的肥皂盒卖给顾客, 于是该公司总裁命令组成了以博士牵头的专家组对这个问题进行攻关, 该研发团队使用了世界上***精尖的技术 (如红外探测, 激光照射等), 在花费了大量美金和半年的时间后终于完成了肥皂盒检测系统, 探测到空的肥皂盒以后, 机械手会将空盒推出去. 这一办法将肥皂盒空填率有效降低至5%以内, 问题基本解决.

而某乡镇肥皂企业也遇到类似问题, 老板命令初中毕业的流水线工头想办法解决之, 经过半天的思考, 该工头拿了一台电扇到生产线的末端对着传送带猛吹, 那些没有装填肥皂的肥皂盒由于重量轻就都被风吹下去了...

这个笑话可以很好的解释 Substitute Algorithm, 对于函数中复杂的算法, 尽量想办法将这个算法简单化, 从而达到与之前同样甚至更好的效果.

关于“Java优化函数的构成有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Java优化函数的构成有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java优化函数的构成有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java优化函数的构成有哪些

这篇文章主要介绍了Java优化函数的构成有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java优化函数的构成有哪些文章都会有所收获,下面我们一起来看看吧。1. Extract Method (提炼函数)解
2023-06-17

java构造函数的特点有哪些

Java构造函数的特点有以下几点:1. 构造函数的名称必须与类名完全相同,且没有返回类型,包括void类型。2. 构造函数在创建对象时被自动调用,用于初始化对象的成员变量。3. 构造函数可以有多个参数,用于接收外部传递的数据。4. 构造函数
2023-08-31

C++ 递归函数的优化技巧有哪些?

为了优化递归函数的性能,可以采用以下技巧:使用尾递归:将递归调用放在函数末尾,避免递归开销。备忘录化:存储已计算的结果,避免重复计算。分治法:分解问题,递归解决子问题,提高效率。C++ 递归函数的优化技巧递归函数是一种强大的编程工具,但是
C++ 递归函数的优化技巧有哪些?
2024-04-17

PHP 函数的性能优化策略有哪些?

php 函数性能优化策略包括:减少函数调用,使用循环或缓存机制;简化函数内容,将复杂操作分解为更小的代码块;优化参数传递,使用传引用参数和设置默认值;使用高效的数据结构,如哈希表或数组;启用 php 优化选项,如 opcache 和内存限制
PHP 函数的性能优化策略有哪些?
2024-04-10

APK结构优化的方法有哪些

这篇文章主要介绍“APK结构优化的方法有哪些”,在日常操作中,相信很多人在APK结构优化的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”APK结构优化的方法有哪些”的疑惑有所帮助!接下来,请跟着小编
2023-06-04

java函数有哪些?

java函数有哪些?java有很多函数,函数就是方法,JDK中有很多包,每个包中有很多类,每个类中都有很多方法。所以java的函数是很多的。比如String这个类中,valueOf()、split()、toArrayChar(),等等都是函数。具体的使用我们可
java函数有哪些?
2018-07-17

C++ 函数返回值的优化技巧有哪些?

c++++ 函数返回值优化技巧:直接返回变量:避免创建局部变量副本。返回引用:避免返回值赋值操作。返回右值引用:避免临时对象额外复制。使用移动语义:实现移动构造函数和赋值运算符,避免不必要复制。实战案例:通过直接返回变量或右值引用优化数组求
C++ 函数返回值的优化技巧有哪些?
2024-04-11

网站结构优化的方法有哪些

这篇文章主要介绍“网站结构优化的方法有哪些”,在日常操作中,相信很多人在网站结构优化的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”网站结构优化的方法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-10

PHP函数的优势有哪些?

php 函数提供了代码重用性、模块化、封装、错误处理和内存管理等优势,通过预定义的代码块简化开发,实战案例中展示了计算列表总和和格式化日期的操作。PHP 函数的优势PHP 函数是一组预定义的代码块,可提供可重复使用的功能,简化开发过程。它
PHP函数的优势有哪些?
2024-04-18

优化golang函数与goroutine交互的原则有哪些?

golang 中优化函数和 goroutine 交互的原则包括:使用无缓冲通道进行通信以避免数据丢失。使用互斥锁或读写锁保护共享资源。使用信号量或等待组限制 goroutine 的并发数量。对于高吞吐量通信,考虑使用有缓冲通道。优化 Gol
优化golang函数与goroutine交互的原则有哪些?
2024-05-04

Java技能的优化方法有哪些

这篇文章主要讲解了“Java技能的优化方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java技能的优化方法有哪些”吧!1 通用篇“通用篇”讨论的问题适合于大多数Ja
2023-06-17

Java性能的优化技巧有哪些

这篇文章主要讲解了“Java性能的优化技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java性能的优化技巧有哪些”吧!1.对象的生成和大小的调整。 JAVA程序设计中一个普遍的问题
2023-06-17

Java的性能优化细节有哪些

今天小编给大家分享一下Java的性能优化细节有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 尽量在合适的场合使用单
2023-06-04

Java性能优化的细节有哪些

这篇文章主要介绍“Java性能优化的细节有哪些”,在日常操作中,相信很多人在Java性能优化的细节有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java性能优化的细节有哪些”的疑惑有所帮助!接下来,请跟
2023-06-16

java内存优化的方法有哪些

减少使用不必要的对象:避免在循环中创建新对象,尽量重用已经存在的对象。使用合适的数据结构:选择合适的集合类或数据结构,以便在存储和访问数据时能够高效利用内存。避免过多的自动装箱和拆箱:自动装箱会创建新的对象,消耗额外的内存。对于基本类型
2023-10-27

php性能优化函数有哪些使用技巧?

对于使用PHP开发的网站或应用程序来说,性能优化是非常重要的。一个高性能的网站能够提供更好的用户体验,同时也能够减少服务器的负载。在优化PHP性能中,我们需要关注一些特定的函数和技巧。下面是一些常见的PHP性能优化函数的使用技巧。使用缓存函
2023-10-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录