Comparing Java's lambda expression with Swift's function type
在Swift中,函数类型被视为头等公民,可以像任何其他类型一样在任何地方使用。它的语法很简单,易于理解和使用。
另一方面,Java确实通过lambda表达式支持函数编程,但一般来说,与SWIFT的函数类型相比,我发现它不那么直观,更难理解,而且似乎更具限制性。
我的问题是,既然Swift函数类型和Java的lambda表达式的目的是为了实现函数式编程,那么SWIFT的函数类型可以做什么,但是Java的lambda表达式不能吗?或者它们都同样强大?
比较Java的lambdas(实现)和SWIFT的函数类型(类型)是不正确的。但是有可能将Java的lambda与SWIFT的闭包进行比较。和Swift的函数类型到Java的功能接口。
闭包比lambda更强大:
(主要)闭包可以捕获非常量变量,例如
1 2 3 4 5 6 7 | func makeIncrementer(forIncrement amount: Int) -> () -> Int { var runningTotal = 0 return () -> Int { runningTotal += amount return runningTotal } } |
(次要)闭包支持速记参数名,例如
1 | reversedNames = names.sorted(by: { $0 > $1 } ) |
(小)尾随封闭支架,例如
1 2 3 | someFunctionThatTakesAClosure() { // trailing closure's body goes here } |
另一方面,功能接口比功能类型更强大。它们允许声明额外的方法,例如java.util.comparator,它定义了一系列用于构建比较程序的方便方法,例如
我只能想到Java函数API中的一个限制。
为了在爪哇中编写lambda表达式,必须使用一种方法来实现接口。JDK中已经有一些接口为您设计了,但是imho,它们的名称没有swift的函数类型那么具有描述性。您不能立即猜测
我想,除此之外,Java的lambda表达式可以实现SWIFT函数类型所能做的任何事情。
我认为,无论在什么情况下,你都必须学习,我作为Java开发人员,可以说功能编程是一个很难理解的主题,但我现在理解了很多特性,我不知道在使用闭包时是否可以在SWIFT中使用流,一旦你获得了函数接口,以及如何实现lambdas,你就会意识到你可以做一个LO。在lambda/streams组合中以更易读的方式使用几行代码的情况下,我认为Oracle在这方面付出了很大的努力,如果您使用得当,您可以生成更清晰、更好的代码,以回答您的问题,这两种代码都很强大,但我同意lambda更像swift的闭包。