函数式编程
在js、python等脚本语言中经常可以看到已函数作为变量来传递的用法,这种方法使得程序多是在创建函数、或创建函数(运行)的路上。更甚至一些简单的方法完全不需要调用(引入)库就可以用简单的几行代码来解决,可以使得程序专注于做某件事而不被外部因素影响,这个特点使得在多线程时不易出现问题。
从一定程度上来说可以简化代码,且思路清晰(代码段集中)。但是不恰当的使用也会导致代码冗余、复杂。
以lambda函数为例,用他来作为简单的函数逻辑是不错的选择
a = 233
fn = lambda x: return x * 3 -5
def func2(param, fn):
print(param)
return fn(param)
fn2 = func2
fn(a)
fn2(a, fn)
从python的几行代码可以诠释函数式编程的优势,合理的使用的确可以减少不少代码,同时函数作为变量也使得代码编写更加灵活多变,至于更深层次的优缺点还需慢慢探究
lambda
在jdk1.8中迎来了新的变革,引入了lambda及一些列接口支持函数式编程
public static boolean vali(String data, Function<String, Boolean> fc) {
returnfc.apply(data)
}
public static void show(String data, Consumer<String> consumer) {
consumer.accept(data);
}
public static boolean check(String data, Predicate<String> predicate) {
return predicate.test(data);
}
public static void main(String[] args) {
vali("aa", input -> {
System.out.println(input);
return input != null && input.trim().length() > 0;
});
}
- Function<T, R>, 调用apply方法,有输入输出
- Consumer<T>, 调用accept方法,有输入无输出
- Predicate<T>, 调用test方法,有输入返回条件判断