返回顶部
首页 > 资讯 > 精选 >Java优化函数的构成有哪些
  • 400
分享到

Java优化函数的构成有哪些

2023-06-17 13:06:37 400人浏览 薄情痞子
摘要

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

这篇文章主要介绍了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优化函数的构成有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Java优化函数的构成有哪些

本文链接: https://lsjlt.com/news/289140.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java优化函数的构成有哪些
    这篇文章主要介绍了Java优化函数的构成有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java优化函数的构成有哪些文章都会有所收获,下面我们一起来看看吧。1. Extract Method (提炼函数)解...
    99+
    2023-06-17
  • java构造函数的特点有哪些
    Java构造函数的特点有以下几点:1. 构造函数的名称必须与类名完全相同,且没有返回类型,包括void类型。2. 构造函数在创建对象...
    99+
    2023-08-31
    java
  • PHP 函数的性能优化策略有哪些?
    php 函数性能优化策略包括:减少函数调用,使用循环或缓存机制;简化函数内容,将复杂操作分解为更小的代码块;优化参数传递,使用传引用参数和设置默认值;使用高效的数据结构,如哈希表或数组;...
    99+
    2024-04-10
    php 性能优化
  • C++ 递归函数的优化技巧有哪些?
    为了优化递归函数的性能,可以采用以下技巧:使用尾递归:将递归调用放在函数末尾,避免递归开销。备忘录化:存储已计算的结果,避免重复计算。分治法:分解问题,递归解决子问题,提高效率。 C+...
    99+
    2024-04-17
    c++ 递归函数 优化技巧
  • APK结构优化的方法有哪些
    这篇文章主要介绍“APK结构优化的方法有哪些”,在日常操作中,相信很多人在APK结构优化的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”APK结构优化的方法有哪些”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-04
  • java函数有哪些?
    java函数有哪些?java有很多函数,函数就是方法,JDK中有很多包,每个包中有很多类,每个类中都有很多方法。所以java的函数是很多的。比如String这个类中,valueOf()、split()、toArrayChar(),...
    99+
    2018-07-17
    java入门 java 函数
  • java有哪些函数
    java中常用的函数有:1.random()函数,返回一个随机数;2.sqrt()函数,返回参数的算术平方根;3.abs()函数,返回参数的绝对值;java中常用的函数有以下几种random()函数java中random()函数的作用是用于...
    99+
    2024-04-02
  • C++ 函数返回值的优化技巧有哪些?
    c++++ 函数返回值优化技巧:直接返回变量:避免创建局部变量副本。返回引用:避免返回值赋值操作。返回右值引用:避免临时对象额外复制。使用移动语义:实现移动构造函数和赋值运算符,避免不必...
    99+
    2024-04-11
    c++ 函数返回值优化
  • Python构造函数有哪些
    Python中的构造函数是__init__函数Python中子类如果定义了构造函数,父类的构造函数是不会执行的。__init__函数使用方法:class A:def __init__(self, name):self.name = name...
    99+
    2024-04-02
  • 网站结构优化的方法有哪些
    这篇文章主要介绍“网站结构优化的方法有哪些”,在日常操作中,相信很多人在网站结构优化的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”网站结构优化的方法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-10
  • PHP函数的优势有哪些?
    php 函数提供了代码重用性、模块化、封装、错误处理和内存管理等优势,通过预定义的代码块简化开发,实战案例中展示了计算列表总和和格式化日期的操作。 PHP 函数的优势 PHP 函数是一...
    99+
    2024-04-18
    php函数 函数优势
  • HTML结构语义化有哪些优点
    本篇内容主要讲解“HTML结构语义化有哪些优点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML结构语义化有哪些优点”吧!   为什么要web语义化? ...
    99+
    2024-04-02
  • 优化golang函数与goroutine交互的原则有哪些?
    golang 中优化函数和 goroutine 交互的原则包括:使用无缓冲通道进行通信以避免数据丢失。使用互斥锁或读写锁保护共享资源。使用信号量或等待组限制 goroutine 的并发数...
    99+
    2024-05-04
    并发 golang 数据丢失 同步机制
  • java数据结构有哪些
    java中的数据结构有:1.ArrayList,链表;2.LinkedList,线性表;3.HashMap,提供了key-value键值对数据存储机制;4.HashSet,不允许存在重复元素;java中的数据结构有以下几种ArrayList...
    99+
    2024-04-02
  • Java性能优化的细节有哪些
    这篇文章主要介绍“Java性能优化的细节有哪些”,在日常操作中,相信很多人在Java性能优化的细节有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java性能优化的细节有哪些”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-16
  • Java技能的优化方法有哪些
    这篇文章主要讲解了“Java技能的优化方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java技能的优化方法有哪些”吧!1         通...
    99+
    2023-06-17
  • Java性能的优化技巧有哪些
    这篇文章主要讲解了“Java性能的优化技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java性能的优化技巧有哪些”吧!1.对象的生成和大小的调整。 JAVA程序设计中一个普遍的问题...
    99+
    2023-06-17
  • Java的性能优化细节有哪些
    今天小编给大家分享一下Java的性能优化细节有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 尽量在合适的场合使用单...
    99+
    2023-06-04
  • java内存优化的方法有哪些
    减少使用不必要的对象:避免在循环中创建新对象,尽量重用已经存在的对象。 使用合适的数据结构:选择合适的集合类或数据结构,以便在存储...
    99+
    2023-10-27
    java
  • php性能优化函数有哪些使用技巧?
    对于使用PHP开发的网站或应用程序来说,性能优化是非常重要的。一个高性能的网站能够提供更好的用户体验,同时也能够减少服务器的负载。在优化PHP性能中,我们需要关注一些特定的函数和技巧。下面是一些常见的PHP性能优化函数的使用技巧。使用缓存函...
    99+
    2023-10-21
    压缩 调试 优化技巧:缓存
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作