XhstormR


On a dark desert highway Cool wind in my hair


函数式编程:Kotlin 与 Java

Updated on 2017-02-13

Kotlin

fun main(args: Array<String>) {
    a({ s -> println(s) })     Lambda 表达式
    等同于
    a { s -> println(s) }     移至括号外并省略括号
    等同于
    a { println(it) }     使用 `it` 替代
    等同于
    a(::println)     使用函数引用
}
等同于
fun main(args: Array<String>) = a(::println)     函数体只含有 1 句表达式,省略函数体和返回值

----

fun a(block: (String) -> Unit): Unit {     高阶函数(函数参数使用函数类型表达)(函数为一等公民)
    block("ABC")
}
等同于
fun a(block: (String) -> Unit) {     省略 Unit (void) 返回值
    block("ABC")
}
等同于
fun a(block: (String) -> Unit) = block("ABC")     函数体只含有 1 句表达式,省略函数体和返回值

-------------------------------------------------------
Finally:
fun main(args: Array<String>) = a(::println)

fun a(block: (String) -> Unit) = block("ABC")

----
输出:
ABC

Java

public class Main {
    public static void main(String[] args) {
        a((String s) -> {     Lambda 表达式
            System.out.println(s);
        });
        等同于
        a((String s) -> System.out.println(s));     方法体只含有 1 条执行代码,转为表达式(省略方法体和返回值)
        等同于
        a(s -> System.out.println(s));     省略参数类型
        等同于
        a(System.out::println);     使用方法引用
    }

    private static void a(A a) {     假:高阶函数(函数参数使用接口表达)(只支持传递对象,不支持传递方法)
        a.a("ABC");
    }
}

@FunctionalInterface
interface A {
    void a(String str);
}

-------------------------------------------------------
Finally:
public class Main {
    public static void main(String[] args) {
        a(System.out::println);
    }

    private static void a(A a) {
        a.a("ABC");
    }
}

@FunctionalInterface
interface A {
    void a(String str);
}

----
输出:
ABC

对比

Kotlin:
fun main(args: Array<String>) = a(::println)

fun a(block: (String) -> Unit) = block("ABC")     函数类型表达(函数为一等公民)
Java:
public class Main {
    public static void main(String[] args) {
        a(System.out::println);
    }

    private static void a(A a) {     接口表达(只支持传递对象,不支持传递方法)
        a.a("ABC");
    }
}

@FunctionalInterface
interface A {
    void a(String str);
}
TOP