面试题答案
一键面试let numbers: [Int?] = [1, nil, 3]
let sum = numbers.compactMap { $0 }.reduce(0, +)
优点
- 代码简洁:使用
compactMap
和reduce
函数,一行代码就能完成解包和求和操作,相比传统循环,代码量更少,更易读。 - 声明式编程:函数式编程强调描述“做什么”而不是“怎么做”。
compactMap
用于安全解包可选值,reduce
用于求和,代码意图明确。 - 可链式调用:方便与其他函数式方法链式调用,增加代码的灵活性和功能性。
潜在风险
- 性能开销:在处理大量数据时,函数式方法的链式调用可能会产生额外的性能开销,因为每次调用函数都会有一定的栈操作和闭包开销,而传统循环可能在性能上更优。
- 调试难度:函数式编程中多个函数链式调用,如果出现错误,由于代码的声明式特性,定位具体错误位置可能比传统循环更困难,特别是在复杂的函数式表达式中。