重组函数:将部分功能提炼为一个独立的函数,以便之后可被其他函数调用

2024-03-06 06:40

本文主要是介绍重组函数:将部分功能提炼为一个独立的函数,以便之后可被其他函数调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、这样做动机是什么?
  • 二、具体实现
    • 1.示例
    • 2.开始替换
      • 2.1 检查它们是否只被赋值一次
      • 2.2 替换basePrice中的临时变量
      • 2.3 替换discount中的临时变量
      • 2.4 最终的代码
  • 总结


前言

在程序中,我们会以一个临时变量来保存某一表达式的运算结果,现在我们将这个表达式提炼到一个独立函数,将这个临时变量的所有【被引用】替换为对新函数的调用,新函数可被其他函数使用。
示例:
在这里插入图片描述


一、这样做动机是什么?

临时变量存在的问题:它们是暂时的,而且只能在所属函数内使用。
如果把临时变量替换为一个查询式,那么同一个类中所有的函数都可以获取这个信息,代码可供重复使用。

二、具体实现

1.示例

代码如下(示例):

double getPrice(){int basePrice = quantity * itemPrice;double discount;if(basePrice > 1000) discount = 0.95;else discount = 0.98;return basePricce * discount;
}

现在将basePrice 和discount替换掉。

2.开始替换

2.1 检查它们是否只被赋值一次

将临时变量声明为final进行检测

double getPrice(){final int basePrice = quantity * itemPrice;final double discount;if(basePrice > 1000) discount = 0.95;else discount = 0.98;return basePricce * discount;
}

进行编译,如果没错则表明它们的确只被赋值一次,如果临时变量不知被赋值一次,我们就不应该对其进行重构。下面我们可以放心进行修改了。


2.2 替换basePrice中的临时变量

将临时变量声明为final进行检测

double getPrice(){//替换final int basePrice = basePrice();final double discount;//替换if(basePrice()> 1000) discount = 0.95;else discount = 0.98;//替换return basePrice() * discount;
}
//作为一个函数提炼出来
private int basePrice(){return quantity * itemPrice;
}

2.3 替换discount中的临时变量

double getPrice(){final int basePrice = basePrice();//替换final double discount();//替换return basePricce() * discount();
}
private int basePrice(){return quantity * itemPrice;
}
//作为一个函数提炼出来
private int discount(){//如果上一步没有将临时变量basePrice替换为查询式,将很难提取discountif(basePrice() > 1000) discount = 0.95;else discount = 0.98;
}

2.4 最终的代码

将临时变量声明为final进行检测

//可以看到getPrice()变得非常整洁
double getPrice(){return basePricce() * discount();
}
private int basePrice(){return quantity * itemPrice;
}
private int discount(){if(basePrice() > 1000) discount = 0.95;else discount = 0.98;
}

总结

我们常常使用临时变量保存循环中的累加信息,这种情况下,整个循环都可以被提炼为一个独立的函数,这也使原本的函数可以少掉几行扰人的循环码。
有时候我们可能会用单一的循环累加好几个值,例如这一篇文章所说:
链接: 对list数组的每条数据进行条件判断,拼接之后进行发送或者返回处理
这种情况下应该针对每个累加值重复一遍循环,这样就可以将所有的临时变量都替换为查询式。

这篇关于重组函数:将部分功能提炼为一个独立的函数,以便之后可被其他函数调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779148

相关文章

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.