函数式编程实现优雅逻辑代码

Posted yuanpenc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式编程实现优雅逻辑代码相关的知识,希望对你有一定的参考价值。

通常java中函数的入参,出参数都是结构数据。但是函数式接口可以实现传递函数表达式。函数式接口+lambda表达式就可以实现这个功能。

如果想把一段执行逻辑储存下来然后在不同的地方调用:

//        写法一
@FunctionalInterface
public interface LambdaInterface {
    public abstract String stringBilder();


}

LambdaInterface lambdaInterface = () -> "a"+"b”;
//        写法二
public class MySupplier implements Supplier{




    @Override
    public Object get() {
        return null;
    }
}

如果只是想提取出公共执行逻辑,可以利用函数式编程优雅实现。
举个例子,在并发编程的时候,往往都会加锁和释放锁。

//
Lock
try{
    Some logic code
}catch(Exception e) {
    log
}finally {
    Unlock 
}

这样的写法,出现一次还行,但是设计过程中可能存在多个相似实现类,每次都要加锁、处理逻辑、释放锁。非常麻烦,也不优雅。因此可以把“锁”过程提取出来。这就要用到函数式编程了。

public void test3() {
    System.out.println(SupplieraLockUtil.exec(() -> {
        System.out.println("run lambda 1");
        return "get result1";


    }));


    System.out.println(SupplieraLockUtil.exec(() -> {
        System.out.println("run lambda 1");
        return "get result2";


    }));

// 将lock和unlock封装在util类中,然后用函数式接口执行lambda表达式
public class SupplieraLockUtil {


   public static <T> T exec(Supplier<T> supplier) {
       try{
           lock();
           System.out.println("do some logic");
           return supplier.get();
       }catch (Exception e) {
           System.out.println("error");
           throw new RuntimeException();
       }finally {
           unLock();
       }
   }


   public static void lock(){
       System.out.println("lock");
   };
    public static void unLock(){
        System.out.println("unlock");
    };
}

就这样,非常简单就可以实现封装重复代码并传递函数逻辑,极大简化了代码。

以上是关于函数式编程实现优雅逻辑代码的主要内容,如果未能解决你的问题,请参考以下文章

编程范式:函数式编程

Python之如何优雅的重试

逻辑和函数式编程在gcd实现上的区别

包会,教你用Java函数式编程重构烂代码

「R」Shiny:响应式编程server 函数

函数与函数式编程