返回

函数式编程入门经典 读书笔记

前端

函数式编程入门经典 读书笔记 第一章

在函数式编程范式中,函数被视为一等公民,拥有与其他数据结构类似的特性,例如不可变性和引用透明性。这意味着函数可以作为参数传递给其他函数,也可以作为返回值。此外,函数式编程强调避免副作用,即函数在执行过程中不会修改其外部环境。

引用透明性

引用透明性意味着函数对于相同的输入总是产生相同的结果,而不会产生副作用或依赖于其执行时的外部状态。这一属性使得函数式代码更容易推理和测试。例如,考虑以下函数:

def add_percent(amount, percent_value):
    return amount + (amount * percent_value)

此函数计算给定金额加上百分比值后的新金额。由于函数不依赖于外部状态,因此对于相同的输入,它总是产生相同的结果。

不可变性

不可变性是函数式编程中的另一个关键概念。这意味着函数不能修改其输入的参数或任何外部状态。这使得函数式代码更加可靠,因为可以保证函数不会意外地修改程序的其他部分。

例如,以下函数使用可变列表来存储结果:

def sum_numbers(numbers):
    result = []
    for number in numbers:
        result.append(number)
    return result

此函数会修改输入列表,这可能会导致意外结果。相反,我们可以使用不可变列表并创建一个新的列表来存储结果:

def sum_numbers(numbers):
    result = []
    for number in numbers:
        result += [number]
    return result

现在,该函数不会修改输入列表,从而提高了代码的可靠性。

副作用

函数式编程避免产生副作用。副作用是函数执行时对外部环境产生的影响,例如修改变量或执行 I/O 操作。副作用会使代码难以推理和测试,因为它们引入了不确定性。

例如,以下函数打印消息并返回结果:

def print_and_return(value):
    print("The value is:", value)
    return value

此函数产生了副作用,即打印消息,这可能会干扰程序的其他部分。相反,我们可以使用纯函数来执行相同的功能:

def get_value(value):
    return value

该函数不产生副作用,从而使代码更加可靠。

结论

函数式编程范式通过强调引用透明性、不可变性和避免副作用,提供了许多好处。这些原则有助于提高代码的可靠性、可测试性和可维护性。通过理解和应用这些概念,开发者可以编写出更简洁、更健壮的代码。