实际上,大多数软件工程师对于函数式编程的概念并不太熟悉。

作者 | Emmett Boudreau

译者 | 弯月,责编 | Elle

出品 | CSDN(ID:CSDNnews)

以下为译文:

编程范式指的是编写命令的方法。编程语言的思想正是建立在其编程范式之上。最常见的三种范式分别是面向对象程序设计、命令式程序设计和函数式程序设计。这三种思想体系并无优劣之分,通常我们都需要选择正确的工具来完成工作。

大多数软件工程师对于函数式编程的概念并不太熟悉。实际上,历史上的第二个编程语言Lisp就属于函数式范式。函数式编程简化了编程的定义,传统编程非常注重修改存储在类构造函数中的对象,而函数式编程则优先考虑数据的不变性和数学计算。在现代函数式编程中,这种思想有点冗长,但这不一定是一件坏事。函数式编程语言的可变性非常实用,我敢说函数式编程非常实用。

如此说来,函数式编程不限于函数式语言。例如,Python 也拥有函数式特性。尽管现代函数式编程已与传统的函数式大相径庭,但是似乎大多数用于数据科学的语言都采用了函数式和面向对象的范式。

很适合我们当前的工作

大多数函数式编程语言的标题均带有“统计”字样。这很方便,因为数据科学家与统计学家很相像,只是他们还掌握了编程和机器学习的技术。函数式编程语言的速度很快,而且最重要的是,对数据科学家而言,函数式编程语言更容易使用。

没人喜欢浏览C代码,因为C的可读性不太好。而大多数函数式编程语言都具有可读性,而且很容易输入和上手。你甚至不会想到,互联网上许多早期的大数据流水线使用的都是函数式编程。实际上,随着机器学习和统计计算的兴起,函数式编程也越来越流行了。

了不起的语言

我们有很多了不起的统计语言,其中许多语言能够将自己的特征和其他传统的特征融合在一起。我喜欢很多函数式编程语言。

Julia

Julia 一直都是我最喜欢的编程语言。虽然 Julia 是实打实的函数式编程语言,但它还包含一些可变和类似于对象的属性,因此十分方便编写程序。作为一种高级语言,Julia 的速度非常快。它的类型声明很容易,而且如果有了恰当的类型定义,它可以与 C 一样快,同时比 R 和 Scala 易于阅读。通常,你不需要花费太多时间就可以用 Julia 建立模型并进行训练,而且由于语言简单易用,机器学习的速度很快,因此使用 Julia 拥有很大优势。在某些情况下,例如使用我的机器学习软件包 Lathe 时,只需很少的代码就可以完成机器学习,而且可以通过参数多态性轻松地修改构造函数的属性。

Lisp

尽管 Lisp 在数据科学领域名不见经传,但它仍然是一种非常酷的语言。Lisp 和 Julia 一样,是一种非常方便使用的编程语言。值得一提的属性之一是 Lisp 的宏和 Julia 的宏。宏本身是重要的函数式特征,如果使用得当,在 notebook 中编写代码就会非常容易。应该注意的是,Lisp 本身还可以分成一系列语言,包括Scheme,Clojure 和(通用)Lisp。作为历史上的第二个高级编程语言,我们很难估计 Lisp 及其功能的影响,但我敢说影响范围肯定很深远。

R语言

下面让我们来谈一谈老朋友 R。从传统意义来看,R语言是一种函数式编程语言,但是与大多数其他语言一样,R语言也属于多范式,这意味着它可以从各个编程范式中进行选择。这是一种优势,因为R语言可以利用可变性。R语言源自S语言,并且一直专注于统计计算。

Haskell

Haskell 与我上面所说的多范式语言完全不同,它是纯粹的函数式编程语言。与本文提及的其他语言不同,我从未使用过 Haskell,因此没有太多发表权。但据我所知,Haskell 是一种相当了不起的语言。我对 Haskell 的了解很局限。如上所述,大多数现代语言都是多范式的,因此它们可以更有效地消灭bug,同时又无需创建新的代码库。

总结

在工作中,我最常用的都是函数式编程语言,主要是Julia,而GitHub代码库主要保存的也是 Julia notebook。我喜欢函数式编程,因为它非常适合我当前的工作。当然,有时候用 Python 的构造函数(类)来处理某个特定的工作可能会更好,但是总的来说,Julia 也可以胜任,而且我觉得用 Julia 编程非常流畅且高效。对于有些人来说,可能函数式编程语言无法完成他们的目标,而且对于一生都在使用面向对象语言的人来说,可能学习函数式编程语的难度很大。归根结底,语言只是一种选择,大多数语言都有一批忠实的拥护者,而且大多数语言都有优点和缺点。

原文:https://towardsdatascience.com/functional-programming-is-awesome-c94bcd150ae6

本文为 CSDN 翻译,转载请注明来源出处。

函数式编程,我心中的 C 位!相关推荐

  1. 函数式编程学习之路(三)

    入门: 函数式编程之艰难,在于这玩意更接近数学,就是数学之"用",大牛们在云端,玩纯数学去了,弄出一堆公式及概念,码农们爬在地上,辛苦耕耘,要的是看得见摸得着的,函数式编程就是要打 ...

  2. random函数用法_Python函数式编程:从入门到走火入魔

    很多人都在谈论函数式编程(Functional Programming),只是很多人站在不同的角度看到的是完全不一样的风景.坚持实用主义的 Python 老司机们对待 FP 的态度应该更加包容,虽然他 ...

  3. 测试和恢复性的争论:面向对象vs.函数式编程

    Michael Feathers最近的博文在博客社区引发了一场异常激烈的论战.Feathers发表言论说一些面向对象编程语言的内嵌特性有助于测试的进行,并且使用面向对象编程语言编写的代码更容易恢复. ...

  4. Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、

    1:Scala之函数式编程学习笔记: 1:Scala函数式编程学习:1.1:Scala定义一个简单的类,包含field以及方法,创建类的对象,并且调用其方法:class User {private v ...

  5. java8函数式编程 视频_快速掌握Java8 Stream函数式编程技巧

    函数式编程优势"函数第一位",即函数可以出现在任何地方. 可以把函数作为参数传递给另一个函数,还可以将函数作为返回值. 让代码的逻辑更清晰更优雅. 减少了可变量(Immutable ...

  6. Python 函数式编程指北,不只是面向对象哦

    了解在Python中如何使用 lambda, map, filter 和 reduce 函数来转换数据结构 Photo by Markus Spiske on Unsplash 面向对象的编程通过封装 ...

  7. 过程或函数的副作用是_Python函数和函数式编程(两万字长文警告!一文彻底搞定函数,建议收藏!)...

    Python函数和函数式编程 函数是可重用的程序代码段,在Python中有常用的内置函数,例如len().sum()等. 在Pyhon模块和程序中也可以自定义函数.使用函数可以提高编程效率. 1.函数 ...

  8. Java函数式编程知识分享!

    Java是一种计算机编程语言,可用于编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等,是IT开发行业中最受欢迎的编程语言之一.想要学好Java必须要一步一个脚印打好基础.积攒实战经验 ...

  9. Java技术分享之函数式编程

    Java是一种计算机编程语言,可用于编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等,是IT开发行业中最受欢迎的编程语言之一.想要学好Java必须要一步一个脚印打好基础.积攒实战经验 ...

最新文章

  1. servlet 和filter 抛出404等异常
  2. exit() 与_exit的区别
  3. 基于VUE的前端crypto-js aes加密与解密
  4. ubuntu 16.04安装nVidia显卡驱动和cuda/cudnn踩坑过程
  5. 飞畅科技-工业级POE交换机解决方案专家
  6. python将一组数据转化为列表_Pandas将列表(List)转换为数据框(Dataframe)
  7. python中ht_Python包学习-HTSeq
  8. Python 爬下的必胜客数据背后,藏着什么样的信息?
  9. 《Python学习手册第4版》PDF源代码+《流畅的Python》PDF思维导图
  10. 【一周头条盘点】中国软件网(2018.2.5~2018.2.9)
  11. Linux基础——Web(三)Nginx反向代理2
  12. 计算机仿真实训平台软件,虚拟仿真实验室软件有哪些
  13. android 开源gis,开源GIS之--移动GIS
  14. linux中deb文件怎么安装,deb是什么文件?deb文件怎么安装?
  15. Android集成阿里热修复(Hotfix)
  16. 你不知道的网站图片存储格式-base64
  17. 深入浅出 - Android系统移植与平台开发(四)- Android启动流程
  18. idea spring boot 修改html等不重启即时生效
  19. java partial class_easymock教程-partial class mocking
  20. OneDrive登录失败

热门文章

  1. 【转】用Microsoft Ajax Minifier帮你的Javascript瘦身
  2. 返回相同宽度数字型字符串
  3. Oozie自带MapReduce示例的运行
  4. 《编码规范和测试方法——C/C++版》学习笔记 ·002
  5. 全国高校计算机能力挑战赛C语言组真题
  6. Pytorch 保存中途训练的模型
  7. es为mysql创建索引_ES(ElasticSearch) 索引创建
  8. 【js】【cornerstone】cornerstone使用url方式加载图像
  9. 矩池云如何使用 conda create 创建纯净的 Python3.6 环境?
  10. 广州体育学院有计算机专业吗,广州体育学院2014年下半年计算机水平考试报名的通知...