将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接口定义了一堆的比较方便的构建方法,如reversed
和thenComparing
。
我只能想到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