美文网首页
函数式编程

函数式编程

作者: 上海马超23 | 来源:发表于2017-07-23 21:27 被阅读0次

    变量的修改结果无法预知源于共享的可变数据,很难追踪是哪个实例修改了变量。
    如果一个方法只是把计算结果return,而不修改内部状态,这个方法就是无副作用的。
    我们允许函数内部执行一些非函数式带有副作用的操作,只要这些操作的结果不会暴露给系统中的其他部分,调用者不需要知道,或者完全不在意这些副作用,因为这对它完全没有影响。
    我们的准则是,被称为“函数式”的函数或方法都只能修改本地变量。除此之外,它引用的对象都应该是不可修改的对象。所有的字段都是final类型,引用类型(即非基本类型)字段都指向不可变对象。
    函数或者方法不应该抛出任何异常,不再像预期那样,返回一个恰当的结果值。对于诸如除数是零这种异常情况,使用Optional类型,要么成功返回值,要么返回对象表示其无法进行指定的操作。也可以选择在本地局部使用异常,避免通过接口将结果暴露给其他方法,不会过去膨胀代码。
    函数式编程写出来的代码,可以在任何时候作为函数被其他地方复用。

    递归和迭代

    像while或者for这样的迭代构造器经常隐藏着陷阱,诱使你修改对象。比如while循环中,循环的条件需要更新。尽量使用Stream代替迭代,避免变化带来的影响。

    技巧

    高阶函数

    能够接受至少一个函数作为参数,或者返回的结果是一个函数。

    // 返回一个函数
    Function<Integer, String> getMyFunction() {
        return (it) -> "Hello, world: " + it;
    }
    

    相关文章

      网友评论

          本文标题:函数式编程

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