将Java的lambda表达式与Swift的函数类型进行比较

Tho*_*hor 13 java lambda function swift

在Swift中,函数类型被视为一等公民,可以像任何其他类型一样在任何地方使用.它的语法简单明了,易于理解和使用.

另一方面,Java确实支持通过lambda表达式进行函数编程,但总的来说,与Swift的函数类型相比,我发现它不那么直观,难以理解,而且看起来更具限制性.

我的问题是,由于Swift的函数类型和Java的lambda表达式的目的是实现函数式编程,Swift的函数类型可以做什么,但Java的lambda表达式不能吗?或者他们都同样强大?

小智 12

比较Java的lambdas(实现)和Swift的功能类型(类型)是不正确的.但是可以将Java的lambda与Swifts的闭包进行比较.Swift的功能类型是Java的功能接口.

闭包比lambdas更强大:

  1. (主要)闭包可以捕获非常数变量,例如:G

    func makeIncrementer(forIncrement amount: Int) -> () -> Int {
        var runningTotal = 0
        return () -> Int {
            runningTotal += amount
            return runningTotal
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. (次要)闭包支持简写参数名称,例如

    reversedNames = names.sorted(by: { $0 > $1 } )
    
    Run Code Online (Sandbox Code Playgroud)
  3. (次要)尾部封闭支撑,例如

    someFunctionThatTakesAClosure() {
        // trailing closure's body goes here
    }
    
    Run Code Online (Sandbox Code Playgroud)

另一方面,功能接口比功能类型更强大.它们允许声明其他方法,例如java.util.Comparator,它定义了一组比较器构建的方便方法,例如reversedthenComparing.