Kotlin:
重构代码

如何操作:

这里有一个Kotlin代码片段,展示了一个常见的代码异味及其重构后的版本。我们从一大块做了太多事情的代码开始:

fun processOrders(orders: List<Order>) {
    for (order in orders) {
        print("订单ID: ${order.id}")
        // 计算订单总额
        var total = 0.0
        for (item in order.items) {
            total += item.price
        }
        // 应用折扣
        if (order.customer.isVIP) {
            total *= 0.9
        }
        print("总计: $total")
        // 更多处理...
    }
}

为了更好的可读性和关注点分离而重构:

fun printOrderSummary(order: Order) {
    print("订单ID: ${order.id}")
    val total = calculateTotal(order)
    print("总计: $total")
}

fun calculateTotal(order: Order): Double {
    var total = order.items.sumOf { it.price }
    return if (order.customer.isVIP) total * 0.9 else total
}

fun processOrders(orders: List<Order>) {
    orders.forEach { printOrderSummary(it) }
}

这里没有示例输出,因为我们没有改变功能,但代码的可读性和可维护性得到了巨大的提升!

深入了解

重构作为一个概念自编程开始以来就存在,但直到1990年代,尤其是在Martin Fowler于1999年出版《重构:改善既有代码的设计》之后,才真正作为一门学科蓬勃发展。这本书为这种实践命名,并定义了一种有组织的应用方法,包括重构技术的目录。

与重构的替代方案相比:你可以从头开始重写代码(风险高且耗时),或者简单地进行附加更改(导致软件膨胀和潜在的技术债务)。重构找到了甜点——它在保持低风险的同时,现代化并清理代码。

在实施方面,开始重构之前拥有一套健全的测试是至关重要的,以确保你不会意外改变程序的行为。许多现代IDE(包括Kotlin的IntelliJ)都有自动化重构工具来重命名变量、提取方法等,这可以加速过程并减少错误。

另见