• Java函数式编程(一)


    说起开始学习这个知识的书,还要从一件故事说起。一天看到有一个分析A::new和new A()的区别的博客,然后就想测试一下这二者到底有啥区别?

    于是我就敲代码Donut::new,神奇的事情发生了,居然可以用这么多类型接收,而这个类Donut仅仅是个普通的类,既没有继承也没有实现Runnable,这是为什么呢?

     

    于是找资料,找了一大堆也没有找到我需要的答案。这时候就决定买一本函数式编程方面的书看看。拼多多25块钱买的,非常超值。下面开始正题:

     

    那么问题来了什么是函数是编程,它能做什么,我可以怎么使用呢?

    一般来说,函数式编程是用函数来编程的一种编程范式。在1990年出版的Why Functional Programing Matters一书中,John Hughes写道:

    函数式编程中没有赋值语句,因此变量一旦有了值,就不会改变了。更通俗地说,函数式编程没有副作用。除了计算结果,调用函数没有别的作用。这样便消除了bug的一个主要来源,也使得执行顺序变得无关紧要——因为没有能够改变表达式值的副作用,可以在任何时候给他求值,这样便把程序员从处理流程的负担中解脱出来。由于能够在任何时候对表达式求值,所以可以用变量的值来自有替换表达式,反之亦然——即程序是引用透明的。这样的自由度让函数式的程序比他们的一般对手在数学上更易驾驭。

    也就是说,函数式编程就是不依赖外部因素影响,也不改变外部环境,给确定的参数就可以有确定的结果返回,并且这个结果是确定的,不会随外部环境所改变。

    下面从几个方面把函数式编程和其他的编程思想做个比较:

    1, 函数式编程和面向对象编程(OOP)有何异同

    函数式编程和OOP编程并不是非此即彼,它被认为是一系列可以补充或替代其他编程范式的技术。例如:

    (1)     函数式一等公民

    (2)     匿名函数

    (3)     闭包

    (4)     柯里化

    (5)     惰性求值

    (6)     参数多态

    (7)     代数函数类型

    2. 函数式编程和传统命令式编程有啥区别

     函数式编程和命令式编程是相互对立的。命令式编程的风格里,程序由做事情的要素组成。这些指令有: 测试条件,可变变量,分支以及一个返回值。在命令式编程中,对于输入的参数是可以进行改变调整的,这在函数式编程中是不允许的,被称为副作用。函数式编程非常的纯粹,就是一个返回值,一个黑盒,既不接收外部变量(除参数外),也不会改变外部变量。

    这些意味着函数式编程:

    l  没有变量改变

    l  没有打印到控制台或其它设备

    l  没有写入文件,数据库,网络或其他什么

    l  没有抛出异常

    那接下来谈谈函数式编程的优势和作用?

    l  函数式编程更加易于推断,因为它们是确定的。

    l  没有副作用,便于测试。(并不意味着测试更加简单)

    l  函数式编程更加模块化

    l  函数式编程让函数复合和重新复合更加简单。

    l  函数式编程天生就是线程安全的。

    数学上的函数?

    函数是定义域和函数陪域之间的关系。这个关系需要满足:

    (1)     定义域里不存在在陪域里没有对应值的元素。

    (2)     定义域里的一个元素在陪域里不会有两个对应的元素

    (3)     陪域里的元素可能在定义域里没有对应的元素。

    (4)     陪域里的元素可能在定义域里有多个对应的元素。

    逆函数,偏函数,复合函数,多参函数,函数柯里化,偏应用函数这些都可以了解一下。

    Java中的函数?

    复合函数,多态函数,通过lamda简化代码,多参函数,柯里化函数,高阶函数,多态高阶函数,匿名函数,局部函数,闭包,递归函数恒等函数,函数式接口,如何调试lamda

    接下来关于怎么用,会通过系列文章来回答这个问题

  • 相关阅读:
    应用性能提升 要速度也要激情
    投票练习题
    租房子多条件查询练习
    JS时间戳格式化日期时间 由于mysql数据库里面存储时间存的是时间戳,取出来之后,JS要格式化一下显示。
    处理PHP字符串的10个简单方法;mysql出现乱码:character_set_server=utf8
    预定义数组(超全局数组)]
    静态方法
    类的构造方法和析构方法和封装的目的和封装的做法+访问修饰符
    面向对象与面向过程 $this的注意事项和魔术方法set和get
    PHP正则表达式;数组:for()遍历、 foreach ()遍历、each()list()组合遍历;指针遍历
  • 原文地址:https://www.cnblogs.com/feifei123/p/12901370.html
Copyright © 2020-2023  润新知