热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

函数式编程:您应该说什么语言?

资料来源:Pexels.com您准备好开始函数式编程之旅了吗?您来对地方了。我们将学习学习函数式编程语言的好处,以及技术巨头如何将函数式编
资料来源:Pexels.com

您准备好开始函数式编程之旅了吗? 您来对地方了。 我们将学习学习函数式编程语言的好处,以及技术巨头如何将函数式编程纳入其软件开发周期的示例。

但是在我们开始之前,什么是函数式编程?为什么还要了解它呢?

现实情况是,函数编程没有固定的定义,因为这不是一成不变的。 但是,当然可以将其视为一种“范例”,一种独特的方法或一种进行编程的“方式”。

维基百科将其定义为计算机程序的“建筑结构和元素的样式” ,该计算机程序将计算视为对数学功能的评估,并避免更改状态和可变数据。 有道理吗?

此法定人数定义使函数式编程定义为侧重于“计算结果”而不是执行操作的范例,因此更易于理解。 但是,定义功能程序并不容易,因为它实际上并不是确定的!

如果您正在努力编写大型应用程序,那么您并不孤单。 尽管可以使用其他方法来编写较小的功能应用程序或MVP,但是函数式编程是您用来简化大型,复杂项目的工具。

关键区别在于使用“声明式”方法,而不是其他编程方法中使用的“命令式”方法。 当务之急方法可能难以阅读和身边告诉软件如何做我们想做的事情,而不是告诉它围绕正是我们想要做的事。

这是命令式方法的示例:

(图片来源)

此代码是/确实是XYZ。 但是,看书有多难? 看起来笨拙,在理解所有内容的同时可能会耗尽您的大脑!

将此与函数式编程中使用的声明式样式进行比较:

(图片来源)

那很优雅。

上面的代码片段执行的功能与命令式代码片段的功能完全相同,即,将值增加三倍,并对给定数组中的每个项目求和。

然而,它是如此的干净,清晰和易于使用。 这就是为什么函数式编程可以授权和有效的原因。

话虽如此,函数式编程并非没有“神话”。 它们可以是真实的吗?

要了解有关函数式编程的更多信息,我们与技术巨头-Telstra,REA Group,Contino,ICM Consulting Pty Ltd和The Big Red Group接触了高层和领导层。

让我们深入。

关于函数式编程语言的神话

单一定义?

函数式编程中的一个神话是标准定义。 恐怕告诉你没有。

虽然可以将函数式编程粗略地定义为构建计算机程序基本组件的一种样式,但是对于什么是函数式编程以及如何定义函数式编程没有任何标准或广泛接受的理解。

大多数专业人士都同意,与其他类型的语言相比,功能语言使用不同的理念。 这意味着它们代表并重视查看软件结构的特定方式。

任何人都可以入门吗?

与流行的看法相反,即使您只是以软件开发人员起家,也不是不可能学习函数式编程。 函数式编程是一项新技能,当您学习它时,您会感觉像是新手程序员。 但是,就像任何新技能一样,从一开始就总是很难理解,但是随着学习规则,您将开始变得更加舒适。

Telstra大数据分析总经理马克·莫洛尼(Mark Moloney)启发道:“一个神话是,函数式编程很难或过于学术化。 这只是学习的另一项技能。 掌握它需要时间和实践,这与80年代末90年代初开发人员学习面向对象编程的过程没有什么不同。 技术在不断发展。 这是我喜欢软件的原因之一。 学习如何学习与您所知道的一样重要。”

几种主要学习语言的分类

如果您想为一家伟大的高科技公司工作,最好的学习语言是什么?

Haskell是一种很好的语言选择,因为它已在许多科技公司中广泛使用。 它当然不是最容易学习的语言,但它是一种纯粹的功能编程语言。 作为一种语言 ,它也是“懒惰的” ,因为在没有明确指示要向您显示结果之前,它不会执行功能。

APL是最常用但也是最难学习的语言之一,它需要自己的独特键盘。 学习使用新型键盘的想法可能令人生畏!

那么,您可以学习哪些语言? 考虑以下一些强有力的竞争者:

  • Clojure
  • 长生不老药
  • 榆树
  • F#
  • 哈斯克尔
  • 伊德里斯
  • 斯卡拉

马克·莫洛尼(Mark Moloney)分享了更多有关他在整个职业生涯中使用的语言的信息。 “一旦开发人员可以选择一种语言(例如C#或Java),并在该生态系统内履行其作为软件开发人员的角色,情况就可能如此。 今天需要一种多语言方法。 换句话说,根据任务使用多种语言。

“例如,用于Web应用程序的Javascript,用于本地移动应用程序的Swift或Android(Java),用于后端服务的Java,Scala等,以及用于深度学习的Python。 从工艺角度来看,学习多种语言是有价值的。 通过首先在Javascript应用中应用功能技术的经验,使我学习Scala等功能语言的道路变得更加容易。”

Contino的工程副总裁Yun Zhi Lin凭借15年的经验提供了他的见解:“我一直偏爱于汇编语言和强类型语言。 我已经从基于Java的高层次,基于VM的语言,Groovy和Scala迁移到了诸如golang和C ++的更简单,更低层次和静态编译的语言。”

REA Group软件开发商Jack Low也看到了Scala,Haskell和Idris的好处。 “我对学习使用强大的类型系统在编译时检测尽可能多的潜在错误的方法感兴趣。 到目前为止,这已经使我学习了Scala,Haskell和Idris等语言。 特别是Idris,及其依存类型系统,对我来说非常着迷。 我认为它的成功将由将来流行到主流语言的概念数量来衡量。 函数式编程语言最近影响了许多主流语言,我希望这种情况会持续下去。”

考虑到所有这些-最困难的编程语言是什么?

您可能已经猜到了,答案很大程度上取决于您解决问题和访问Internet上可用资源的能力。

好消息是,由于专业的合作性质,学习编程语言可以相对较快地完成。

当前如何使用功能的示例

Moloney支持Scala,Python和Javascript(视情况而定)。 “鉴于我在大数据和数据科学领域工作,Scala是一种通用语言。 Apache Spark是最流行的分布式数据处理框架,Spark用Scala编写。 该语言涉及较少的类型输入以完成工作,同时保留了与Java紧密互操作的能力而来的所有库和集成选项。 对于机器学习等(尤其是深度学习),Python也是一种关键语言。 要使用前端构建端到端系统,掌握Javascript(或诸如Typescript,Elm等的编译器)仍然很重要。”

掌握语言的专业提示

Moloney分享了他最喜欢的两个资源Github和Coursera 。 他阐述道:“ Github是因为辅助项目使我能够尝试和尝试新语言。 您学习的每种新语言都会变得更加容易,因为更多的学习是从以前的语言中转移过来的。

“ Coursera的“ Scala中的函数式编程原理”很好地介绍了Scala和函数式编程。”

ICM咨询公司的首席技术官Brendan Bates分享了一些实用建议:“我喜欢在个人项目上练习自己的技能-大多数我从没完成过,有些我做过,但是再也没有看过。 过去,我曾经喜欢在Euler项目上解决一些问题。”

From: https://hackernoon.com/functional-programming-what-language-should-you-be-talking-313dd8bc379b



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
author-avatar
DREAM2502930781
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有