Skip to content

分解代码提高可读性的优点

清晰易懂、便于调试、增强复用性、提升维护性、便于协作、符合规范。

能帮助你编写高质量的示例代码,同时让学习者和维护者受益。

实现题目

给定一个非递减整数数组,和一个 target,要求你找到数组中最小的一个数 x,可以满足 x*x > target。一旦不存在,则返回 -1。

数组: [1, 3, 5, 7, 9, 11, 13, 15]
target:9
输出是 5

未分解写法

Python

def solve(arr, target):
    l, r = 0, len(arr) - 1
    ret = -1

    while l <= r:
        m = (l + r) // 2
        if arr[m] * arr[m] > target:
            ret = m
            r = m - 1
        else:
            l = m + 1

    if ret == -1:
        return -1
    else:
        return arr[ret]

print(solve([1, 3, 5, 7, 9, 11, 13, 15], 9))

#####输出#####
5

分解写法

Python

def comp(x, target):
    """
    核心判断
    """
    return x * x > target


def binary_search(arr, target):
    """
    在非递减整数数组中查找目标元素,返回其索引。
    如果未找到,返回 -1。
    参数:
        arr: 非递减整数数组
        target: 要查找的目标值
    返回:
        目标索引或 -1
    """
    l, r = 0, len(arr) - 1
    ret = -1

    while l <= r:
        m = (l + r) // 2
        if comp(arr[m], target):
            ret = m
            r = m - 1
        else:
            l = m + 1

    return ret


def solve(arr, target):
    """
    给定一个非递减整数数组,和一个 target;
    要求你找到数组中最小的一个数 x,可以满足 x*x > target。
    一旦不存在,则返回 -1。
    """
    index = binary_search(arr, target)

    if index != -1:
        return arr[index]

    return -1

print(solve([1, 3, 5, 7, 9, 11, 13, 15], 9))

#####输出#####
5

可读性对比

分解写法,做了以下优化,提高代码可读性。

  • 将函数拆分,让每个函数,专注做一件事
  • 添加注释,便于后续代码维护

最后更新: