陕西建设网站电子政务大厅,做网站不优化,怎么找网站做宣传,网站被攻击我最近一直在研究Java 8#xff0c;并掌握了Manning出版的“ Java 8 In Action” 。 让我印象深刻的第一件事是Java 8的独特销售主张是函数式编程。 函数现在是一流的变量#xff0c;您可以像int或String一样在代码中传递它们。 这是一个很大的变化。 近年来#xff0c;功能… 我最近一直在研究Java 8并掌握了Manning出版的“ Java 8 In Action” 。 让我印象深刻的第一件事是Java 8的独特销售主张是函数式编程。 函数现在是一流的变量您可以像int或String一样在代码中传递它们。 这是一个很大的变化。 近年来功能语言似乎变得越来越流行并且它们没有尽头可供选择。 现代函数式编程语言的例子包括ClojureJavaScriptScala甚至是1980年代后期发明的Erlang都重新流行了。 那么为什么会有这种方向变化 您可能会提出几个原因但我们首先要假设行业最佳实践会随着时间的推移而变化甚至最流行的语言也有一天会不受欢迎。 我想如果您还年轻的话会有一天您会回头说“记得我们以前使用Java的时候”吗 在探讨为什么会有这种变化之前让我们回顾一下1980年代到这里的方式…… 根据Wikipedia的说法IBM PC于1981年8月12日发布。第一批PC配备了BASIC 1尽管帅哥很快对此感到厌倦并转而使用Borland的Turbo Pascal。 Turbo Pascal的冷静并没有持续太久因为微软收购了Microsoft C或MSC后者很快成为事实上的标准。 这很酷因为如果您很聪明则可以使用int 21H int 10H和int 14h以及其他int 10H直接访问硬件并且如果可以记住哪个中断做了什么那么您就和我一样老2 … IBM PC之前还有其他计算机包括Apple IICommodore Pet等但是IBM PC是用于商业应用程序的“成熟” PC。 我记得我曾尝试为我在1985年所做的一个项目购买一个它们要花上千英镑而你却不能为了爱情或金钱而得到一个每个人都想要一个。 但是我离题了。 在1980年代后期出现了Microsoft Windows SDK这是一个基于C的SDK自从平铺Windows 1以来就出现了显然Microsoft在Windows 1中没有使用重叠的窗口因为它复制了Apple的Macintosh并可能侵犯了他们的专利-尽管据称Apple窃取了Xerox Parc为Mac设计的想法尽管我不确定这是多么真实。 该SDK确实在Windows 2中盛行为回调基于消息的编程引入了世界。 他们据称是从Unix上的X-Windows和Motif偷走的。 在1990年代中期左右语言成为面向对象的 ; 发明了类来将方法和数据联系在一起引入了数据隐藏和封装的概念。 “ C”变为“ C ”如果此时您使用的是Windows SDK则切换到Microsoft基础类 SDK的OO包装器。 这种变化被视为一件好事。 旧的基于函数的语言的一个主要问题是您可以在代码库中的任何位置分配全局变量然后随时使用任何函数对其进行更改。 显然这在很多系统中造成了重大问题因为您不确定更改全局变量的状态不会在应用程序的某个遥远角落引入错误。 事实语言C的另一个主要问题是您负责分配和释放内存并且如果内存指针是全局的那么在访问它们时您不能100地确定该指针仍然有效如果不是 t ...你坠毁了。 伴随着面向对象的语言出现了面向对象的方法论并在1990年代后期使用UML达到了顶点。 这是Booch方法 James Rumbaugh的 OMT和Ivor Jacobsen的 OOSE的融合并且在设计软件时是必不可少的。 各种各样的工具都可以用来记录和传达您的设计并且从经验来看其中一些工具的质量非常可疑这就引出了一个问题开发人员是否真的在使用UML编写他们的UML程序 如果是这样那么这些产品对于UML来说并不是一个好广告。 如今您没有看到使用UML的组织那么多尽管当我需要直截了当设计时我仍然会这样做。 我的UML工具的首选是并且永远是铅笔和纸 。 这很简单而且可以正常工作。 最后在我的编程简要历史中最后是Java。 Java最初于1995年发布几年后开始流行它基于改进C 的思想。 这主要是因为它在自己的虚拟机上运行该虚拟机为您处理内存分配和释放。 它已成为面向对象语言的事实上的标准。 关于这个大致组成的时间表的事情是命令式编程的基本概念。 总而言之汇编语言产生了CC导致了C 和OO而C 和OO导致了Java –所有这些都是必须的。 Wikipedia很好地概述了命令式编程因此我不会对其进行详细介绍但我将命令式编程概括为具有函数和可变状态的编程这意味着您可以拥有实例变量和全局变量。 函数式编程与命令式编程有何不同 主要思想是函数是数据就像整数和字符串一样。 算法是根据函数调用实现的 while不存在for循环而使用递归并且变量始终是局部的。 您可能会误以为因为它们包含函数的概念并且没有类所以C和Turbo Pascal之类的语言都是函数式编程语言。 它们不是它们是命令式编程语言因为它们具有状态数据。 那么有什么变化 常见的答案是硬件发生了变化这是由Erlang开发人员提出的而在Manning的Java 8书中可以找到。 现在至少在服务器机房中可以找到的“计算机”是一种复杂的多处理器多核事务其存储容量为TB。 以HP Proliant DL580 G8服务器为例 它最多具有四个处理器每个处理器最多可以具有15个64位内核。 这是巨大的特别是与原始IBM PC上的原始革命性的16位Intel 8086相比。 假设您正在运行Unix并且运行了top命令那么最大处理器使用率将为6000。 鉴于机器功能的急剧增长我们的软件开发人员需要能够支持它们的语言从而使我们能够轻松地使用所有这些并发处理能力而这正是功能编程的出现。 在命令式编程中您可以具有实例变量全局变量和可变状态。 可以在线程之间共享这些资源尽管共享这些资源在同步和锁定方面既昂贵又效率低下。 这也是相当缓慢且困难的事情因为您必须避免死锁和其他类似问题。 函数式编程消除了所有这些问题因为它消除了实例变量和状态的所有繁琐处理。 这意味着您不必费心进行锁定和同步线程或进程随便称呼它们可以彼此独立。 那是理论但是它可以接受审查吗 别忘了有可能编写出良好的多线程程序这些程序可以有效地使用具有命令性Java 6或7的大型多核和多处理器计算机的许多内核。就像函数式编程语言一样您必须考虑一下自己所要做的事情。为此请设计合适的设计并使用业务“最佳实践”执行它。 仅仅因为Java 6或7是命令性语言您不必在线程/进程之间共享数据并使用同步和锁定这仅是设计问题。 逻辑上的结论是您可以不使用函数式编程而做这可能导致函数式编程语言流行的真正原因人们喜欢使用它们。 因此您可以说功能语言是“最新的东西”。 狂热他们是新潮一种时尚。 我必须强调软件开发中的“时尚”不一定是一件坏事也不是什么新鲜事。 如果您回到上面的历史您会发现时间轴上充满了趋势和疯狂在Turbo Pascal和BASIC上采用了“ C”范式转移到了Object Orientation甚至是通过Java转移到Java它只需编译一次即可在任何地方运行。 您必须学习Java 8的函数式编程吗 几年后问我... 1由于我记忆犹新因此确保此博客中的所有历史事实都不准确。 2如果我错了请纠正我但是int 21H MSDOS函数 int 10H 直接屏幕访问并且int 14H 串行I / O 翻译自: https://www.javacodegeeks.com/2014/05/is-it-imperative-that-you-learn-functional-programming-with-java-8.html