Kotlin 简单优雅的高阶函数

作者: 光剑书架上的书 | 来源:发表于2017-08-31 11:45 被阅读343次

    Kotlin 简单优雅的高阶函数


    《Kotlin极简教程》正式上架:

    点击这里 > 去京东商城购买阅读

    点击这里 > 去天猫商城购买阅读

    非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~


    函数代表一种关系 f 的蕴涵逻辑流。这种蕴涵逻辑流,其实就是映射(Mapping)。

    一切皆是映射。

    我们说组合是编程的本质,其实,组合就是建立映射关系。

    我们说,

    程序 = 算法+数据结构

    我们把程序看做图论里面的一张图G,这里的数据结构就是图G的节点Node, 而算法逻辑就是这些节点Node之间的Edge。整个的图G就是一幅美妙的抽象逻辑之塔的 映射图 。

    image.png

    1 . Kotlin 函数式编程: 函数的组合。一切皆是函数。

    fun main(args: Array<String>) {
        val h = h(::g, ::f)
        val strList = listOf("a", "ab", "abc","abcd","abcde","abcdef","abcdefg")
        // 非常好用的流式 API filter,flat,map 等等
        val mstrList = strList.filter(h)
        println(mstrList)
        mstrList.forEachIndexed{
            index,value ->
            println("$value = ${value.length}")
        }
    }
    
    // 简单好用的 Kotlin 类型别名
    typealias G=(String) -> Int
    typealias F=(Int) -> Boolean
    typealias H=(String) -> Boolean
    
    // 简单直接的函数定义
    fun f(x: Int) = x % 2 != 0
    fun g(s: String) = s.length
    
    // 简单优雅的高阶函数定义(复合函数): compose(f, g) = f(g(*))
    fun h( g: G, f: F): H {
        return { x -> f(g(x)) }
    }
    

    2. 简单好用的 Kotlin 类型别名

    typealias G=(String) -> Int
    typealias F=(Int) -> Boolean
    typealias H=(String) -> Boolean
    

    3. 非常好用的流式 API filter,flat,map 等等

    val mstrList = strList.filter(h)
    
    mstrList.forEachIndexed{
            index,value ->
            println("$value = ${value.length}")
     }
    

    4. 简单优雅的高阶函数定义(复合函数): compose(f, g) = f(g(*))

    组合函数返回传递给它的两个函数的组合: (f、g) = f (g (*))。
    现在, 您可以将其应用于可调用引用。

    fun h( g: G, f: F): H {
        return { x -> f(g(x)) }
    }
    
        val h = h(::g, ::f)
        val strList = listOf("a", "ab", "abc","abcd","abcde","abcdef","abcdefg")
        // 非常好用的流式 API filter,flat,map 等等
        val mstrList = strList.filter(h)
    

    同样的逻辑,我们在 Java 8中的实现代码是:

    package com.easy.kotlin;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    interface G {
        Integer apply(String s);
    }
    
    interface F {
        Boolean apply(Integer x);
    }
    
    interface H {
        Boolean apply(String s);
    }
    
    public class InterfaceInvokeDemo {
        public static void main(String[] args) {
            G g = (s) -> s.length();
            F f = (x) -> x % 2 != 0;
            H h = (s) -> f.apply(g.apply(s));
    
            List<String> strings = Arrays.asList(new String[] {"a", "ab", "abc", "abcd", "abcde", "abcdef", "abcdefg"});
            List<String> result = new ArrayList();
    
            for (String s : strings) {
                if (h.apply(s)) {
                    result.add(s);
                }
            }
    
            System.out.println(result);
        }
    }
    
    
    

    5. 参考书籍:

    螢幕快照 2017-08-31 10.19.58.png 螢幕快照 2017-08-31 10.20.19.png

    相关文章

      网友评论

      本文标题:Kotlin 简单优雅的高阶函数

      本文链接:https://www.haomeiwen.com/subject/ofcqjxtx.html