代码重构之重构过长的参数列表

简介: 如何处理过长的函数参数列表
一个函数,往往都需要接收参数,通过参数去完成某些事情,在<<代码整洁之道>>中,作者提出,一个函数的参数应该尽可能的短,最好只有一个,其次是两个,如果出现三个及其以上的参数,那你应该引起注意了。那么如果拿到一段长参数的函数我们应该怎么办?如何去重构呢?

一、过长参数的定义

方法的参数过多,或者存在不必要的参数。

二、过长参数带来的影响

方法不易被理解和使用,方法不稳定,难以维护

三、重构方法

  • 以查询或者计算取代参数:如果参数列表中的某些参数,可以通过现有的其他参数计算得出,那计算的参数就可以省略掉,比如得到一个人的出生日期就能推算出他的年龄。

如下代码是计算某个演出票的基本信息,票只有符合年龄范围才能购买,学生和儿童票有优惠。Performance对象里是演出的基本信息,里面包含了basicPrice基本票价,所以此方法可以去掉basicPrice参数,改成直接从Performance获取

 /**
     * 获取票据信息
     * 
     * @param name 姓名
     * @param age 年龄
     * @param isChild 是否儿童
     * @param isStudent 是否学生
     * @param ageFloor 年龄上限
     * @param ageCeiling 年龄下限
     * @param performance 演出信息
     * @param basicPrice 基本票价
     * @return 票据信息
     */
    public String getTicketInfo(String name, int age, boolean isChild, boolean isStudent, int ageFloor, int ageCeiling,
        Performance performance, double basicPrice) {
        if ((age < ageFloor || age > ageCeiling)) {
            throw new IllegalArgumentException("age is out of valid range, cannot buy ticket!");
        }

        return getPerformanceInfo(performance)
            + getConsumerInfo(name, age, isStudent, isChild)
            + getPriceInfo(isChild, isStudent, basicPrice);
    }

在这里插入图片描述

  • 保持对像的完整:有时候,一个函数的参数,可能就是一个对象的成员变量,为什么不干脆用这个对象做参数呢?下面的函数中,原本是传入年龄的上限和下线,但其他地方其实有相关的对象,那干脆直接用已经定义好的对象就行了。

在这里插入图片描述

  • 引入参数对象,函数中的某些参数,可以自己手动封装到一个对象中,如下,参数中有很多自动都是用户相关的信息,所以重构的时候通过新增一个用户类去简化这些参数

在这里插入图片描述

  • 移动函数到合适的类,将一些参数封装到对象之后,如果某些操作是根据封装的那些字段处理的,不如把这个函数也移动到刚刚封装的对象里边。

在这里插入图片描述

  • 移除标记参数,某些入参属于标记,根据入参执行两种不同的代码逻辑,可以考虑使用三目运算符简化参数

在这里插入图片描述

相关文章
|
7月前
在代码优化过程中,常见的错误和bug包括以下几点
在代码优化过程中,常见的错误和bug包括以下几点
|
28天前
|
设计模式 JavaScript 安全
TypeScript性能优化及代码质量提升的重要性、方法与策略,包括合理使用类型注解、减少类型断言、优化模块导入导出、遵循编码规范、加强代码注释等
本文深入探讨了TypeScript性能优化及代码质量提升的重要性、方法与策略,包括合理使用类型注解、减少类型断言、优化模块导入导出、遵循编码规范、加强代码注释等,旨在帮助开发者在保证代码质量的同时,实现高效的性能优化,提升用户体验和项目稳定性。
42 6
|
5月前
|
开发者
软件交付问题之有效地减少代码中的逻辑错误,如何解决
软件交付问题之有效地减少代码中的逻辑错误,如何解决
|
5月前
|
JSON 前端开发 Java
代码的应用重构问题之BaseActivity类的主要功能问题如何解决代码缩减的主要问题如何解决
代码的应用重构问题之BaseActivity类的主要功能问题如何解决代码缩减的主要问题如何解决
|
5月前
|
设计模式 存储
代码优化设计问题之优化枚举的getByName方法以提高效率问题如何解决
代码优化设计问题之优化枚举的getByName方法以提高效率问题如何解决
|
5月前
|
数据库
代码的应用重构问题之BaseActivity类的主要功能问题如何解决
代码的应用重构问题之BaseActivity类的主要功能问题如何解决
|
6月前
|
算法 前端开发 Java
Bug复盘:接口异步返回的重要性
Bug复盘:接口异步返回的重要性
|
开发工具
代码重构之重复代码处理
介绍使用IDEA去重构重复的代码块
代码重构之重复代码处理
|
SQL 缓存 NoSQL
写代码有这16个好习惯,可以减少80%非业务的bug
每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~1. 修改完代码,记得自测一下...
354 0
|
设计模式 JavaScript 前端开发
如何优雅的消除系统重复代码
在程序猿的日常工作中,不仅要跟随业务侧的发展不断开发新的需求,同时也需要维护老的已有平台。无论是开发新需求还是维护老系统,我们都会遇到同样一个问题,系统中总是充斥着很多重复的代码。
29582 11
如何优雅的消除系统重复代码