说起开始学习这个知识的书,还要从一件故事说起。一天看到有一个分析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

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

Java复合函数循环_Java函数式编程(一)(示例代码)相关推荐

  1. java convert函数_Java 函数式编程和Lambda表达式

    1.Java 8最重要的新特性 Lambda表达式.接口改进(默认方法)和批数据处理. 2.函数式编程 本质上来说,编程关注两个维度:数据和数据上的操作. 面向对象的编程泛型强调让操作围绕数据,这样可 ...

  2. 惰性求值 php,详细介绍C#函数式编程的示例代码

    public double MemoryUtilization() { //计算目前内存使用率 var pcInfo = new ComputerInfo(); var usedMem = pcInf ...

  3. java函数式编程_Java 函数式编程和 lambda 表达式详解

    作者:DemonsI my.oschina.net/demons99/blog/2223079 为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要 ...

  4. java 函数式编程_Java函数式编程:Javaslang入门

    java 函数式编程 Java是一门古老的语言,并且该领域中有很多新手在他们自己的领域(JVM)上挑战Java. 但是Java 8到来并带来了一些有趣的功能. 这些有趣的功能使编写新的惊人框架(例如S ...

  5. javascript函数式_JavaScript中的函数式编程—结合实际示例(第1部分)

    javascript函数式 by rajaraodv 通过rajaraodv JavaScript中的函数式编程-结合实际示例(第1部分) (Functional Programming In Jav ...

  6. java和python中函数式编程

    本篇文章将基于java和python分别介绍Lambda表达式,包括定义,使用等 java函数式编程 自jdk1.8开始,java中引入了函数式编程,使编程更加简洁灵活.接下来通过详细的例子阐述 函数 ...

  7. javascript函数式_JavaScript中的函数式编程—结合实际示例(第2部分)

    javascript函数式 by rajaraodv 通过rajaraodv JavaScript中的函数式编程-结合实际示例(第2部分) (Functional Programming In Jav ...

  8. java函数式编程例子_java函数式编程Lambda表达式的示例(一)

    函数式编程是时下比较流行的编程方式了,很多新兴的编程语言都对函数式编程有了比较好的支持,她有别于传统的命令式编程,可以将函数(执行代码的过程)作为参数进行传递.JAVA也意识到了函数式编程的重要性,在 ...

  9. Java for函数用法_Java函数式编程(四)集合的使用

    第二章:集合的使用 我们经常会用到各种集合,数字的,字符串的还有对象的.它们无处不在,哪怕操作集合的代码要能稍微优化一点,都能让代码清晰很多.在这章中,我们探索下如何使用lambda表达式来操作集合. ...

  10. predicate java 作用_Java函数式编程接口详解之Predicate

    一.初识 Predicate是Java提供的重要的函数编程接口之一,作用主要是用于逻辑判断. 首先看看源码: @FunctionalInterface public interface Predica ...

最新文章

  1. leetcode 384. Shuffle an Array | 384. 打乱数组(Fisher-Yates洗牌算法)
  2. CSS只是进化的一部分
  3. Oracle定时器(Job)各时间段写法汇总
  4. [Luogu 2486] SDOI2011 染色
  5. mysql+存储器_mysql内存储器计算公式_mysql
  6. [家里蹲大学数学杂志]第275期华中师范大学2011年数学专业复试试题及部分参考解答...
  7. Django Celerybeat日志报错处理('NoneType' object has no attribute 'is_due')
  8. C# 类2010-11-07
  9. ET游戏框架之环境搭建与运行
  10. crc16的c语言函数 计算ccitt_求一个C语言实现的CRC16/CCITT-FALSE校验码函数
  11. php 恶意上传,如何防止恶意文件上传到我的服务器上?(检查文件类型)?
  12. 用python画字母b_用Python 画个多啦A梦,小猪佩奇
  13. 巨噬细胞膜包裹PLGA纳米粒HCPT-MCNP/MCF-7细胞膜包覆PLGA纳米球共载姜黄素和二氢卟吩e6的研究
  14. 分享一组Rpg Marker人物行走,游戏素材图片,共20张图片
  15. MTK外部音频功放gpio控制
  16. C++实现找100(任意)以内的质数--非常好的算法
  17. Android UI Layout 之 AbsoluteLayout
  18. ChatGpt对于学术和程序员的影响
  19. Refused to apply style from ‘http://localhost:8080/iconfont.css‘ because its MIME type (‘text/html‘
  20. 10 AOP Advisor的封装与搜集

热门文章

  1. XML文件源码察看器(三)
  2. Linux磁盘管理:LVM逻辑卷管理
  3. MySQL--mysqldump的权限说明
  4. 【转】Nginx双机热备高可用解决方案【二】
  5. 用Jquery写tab插件(支持点击和移动及其他事件)
  6. [藏]常用的匹配正则表达式和实例
  7. 一个linux下g++使用的 makefile 模板
  8. Android 四大组件学习之Activity一
  9. 由spin_lock_bh想到的一些事
  10. DPDK之PMD原理