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

在Swift中,函数类型被视为第一类公民,并且可以在任何地方使用,就像任何其他类型一样。 它的语法很简单,可以很容易理解和使用。

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

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


比较Java的lambda表达式(实现)和Swift的函数类型(类型)是不正确的。 但是可以将Java的lambda与Swifts的Closures进行比较。 Swift的功能类型为Java的功能接口。

闭包比lambdas更强大:

  • (主要)闭包可能捕获非常量变量,例如, G

    func makeIncrementer(forIncrement amount: Int) -> () -> Int {
        var runningTotal = 0
        return () -> Int {
            runningTotal += amount
            return runningTotal
        }
    }
    
  • (次要)闭包支持速记参数名称,例如

    reversedNames = names.sorted(by: { $0 > $1 } )
    
  • (次要)尾随关闭支持,例如

    someFunctionThatTakesAClosure() {
        // trailing closure's body goes here
    }
    
  • 另一方面,功能接口比功能类型更强大。 他们允许声明额外的方法,例如java.util.Comprator接口定义了一堆的比较方便的构建方法,如reversedthenComparing


    我只能想到Java功能API中的一个限制。

    为了在Java中编写lambda表达式,您必须使用一种方法来创建接口。 在JDK中已经有一些为你制作的接口,但是恕我直言,他们的名字比swift的函数类型描述的更少。 您不能立即猜测Predicate<T>接受T参数并返回boolean 。 另一方面, T -> Bool更清洁更清晰。

    除此之外,我认为Java的lambda表达式可以完成快速函数类型所能做的任何事情。


    我认为,在任何情况下,我都必须学习,作为Java开发人员,我可以说功能性编程是一个难以理解的主题,但我现在了解了很多功能,我不知道您是否可以在SWIFT中使用流当使用闭包时,一旦你获得了函数接口以及如何实现lambda表达式,你将会意识到,你可以用lambda / streams组合方式以更可读的方式用几行代码来做很多事情,我认为oracle已经把很多努力,如果你使用得好,你可以做出更清洁,更好的代码,回答你的问题都是强大的,但我同意lambdas更类似于迅速关闭。

    链接地址: http://www.djcxy.com/p/96387.html

    上一篇: Comparing Java's lambda expression with Swift's function type

    下一篇: Java's System.exit(0); vs C++ return 0;