​Golang​

接下来分享Java、Groovy、Python和Golang中是如何把方法当做参数的。

Part1Java

​java.util.function.Function​​java.util.function.BiFunction​​java.util.function.Supplier​

1定义方法闭包

单个参数:

​Function plus10 = f -> f * 10;​

两个参数:

没有参数:

2方法中返回闭包和使用闭包

返回方法闭包:

把闭包当做参数:

看得出来,Java还是比较严格的,不同的参数用的类都不一样,的确不如其他语言灵活。

Part2Groovy

Groovy语言大部分语法是Java兼容的,但是在闭包这个功能上,差别还是挺大的,个人感觉完全优于Java体验。Groovy在语法上非常灵活,有时候我得自己摸索一下才行,按照Java的写法也行,按照Groovy写法也行,有时候混着写也行。个人建议最好使用Groovy语法,避免万一以后升级导致不兼容。

3定义方法闭包

无参数:

​def plussss = {return 10}​

或者:

​def plusss = () -> 10​

单个参数:

​def pluss = f -> f + 10​

或者:

​def plussa = {f -> return f + 10}​

又或者:

​def plussaa = {f -> f + 10}​

多个参数:

​def plus = {x, y -> return x + y * 2}​

其他写法省略……

4方法中返回闭包和使用闭包

返回方法闭包:

把闭包当做参数:

Part3Python

​Lambda​

5定义方法闭包

单个参数:

​ff = lambda f: f + 19​

多个参数:

​ss = lambda x, y: x * y + 1​

看得出来,Python还是挺简单的,这一点跟Groovy平分秋色。

6方法中返回闭包和使用闭包

返回方法闭包:

把闭包当做参数:

Python语法还是有点不适应,只能练习到这种程度了。

Part4Golang

终于轮到Golang,最近在学习Golang基础,已经写了一个简单的HttpClient客户端,算是有点小成绩,下一步计划是用Golang重新测试一下Golang协程和Java线程在做性能测试对比。Golang的语法比较统一,既不像Java那样繁琐,也不像Groovy有太多灵活语法,跟上文中Python直接在方法中返回闭包的写法类似,而且在直接定义和方法中返回语法一致,而且是强一致性。

7定义方法闭包

​ff:= func(f int) int{return f * 11}​

多个参数方法省略……

8方法中返回闭包和使用闭包

返回方法闭包:

把闭包当做参数:

PS:其实除了Java不同参数数量和类型需要额外定义使用不同的类以外,其他语法都可以规避掉这一点。在自定义闭包和方法中闭包使用,语法都是通用的。这里也体现出来非静态语言的灵活性。

9Have Fun ~ Tester !