Kotlin 函数与函数式编程

  • 函数式编程简介

  • 函数式编程是关于不变性和函数组合的编程范式。特征如下:
  • 一等函数支持:函数也是一种数据类型,可以作为参数传入另一个函数中,同时函数也可以返回一个函数。
  • 纯函数和不变性:纯函数指的是没有副作用的函数(不去改变外部数据状态)。函数式编程是转换数据而不是改变数据。
  • 函数的组合:在面向对象编程中是通过对象之间发送消息来构建程序逻辑的;在函数式编程中是通过不同函数组合来构建程序逻辑的。

函数式编程和命令式编程最大的不同是:函数式编程的焦点在于数据的映射,命令式编程的焦点是解决问题的步骤。
例如下面的例子
函数式编程

@JvmStatic
    fun main(args: Array) {
        val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
        println(list.filter { it % 2 == 0 })
    }

而使用命令式编程如下:

 public static void main(String[] args) {
        List list = Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9});
        System.out.println(filterList(list));
    }

    public static List filterList(List list) {
        List resultList = new ArrayList<>();
        for (Integer integer : list) {
            if (isNum(integer)) {
                resultList.add(integer);
            }
        }
        return resultList;
    }

    private static boolean isNum(Integer i) {
        return i % 2 == 0;
    }

可以看出,函数式编程是简单,只管易懂的。

  • Lambda表达式

前面提到的 list.filter { it % 2 == 0 } 就是Lambda表达式 filter的入参是 {it % 2 == 0 }
filter的完整函数

    list.filter ({ it % 2 == 0 })

其中filter函数如下

public inline fun  Iterable.filter(predicate: (T) -> Boolean): List {
    return filterTo(ArrayList(), predicate)
}

入参是一个函数 predicate: (T) -> Boolean
实际上 { it % 2 == 0 } 是一种简单写法实际上是

{it  ->  it % 2 == 0 }

更好理解的方式如下

var isFun = {it:Int  ->  it % 2 == 0 }
list.filter(isFun)

你可能感兴趣的:(Kotlin)