成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何學會函數式編程

開發 前端
本文是從 How to get started with functional programming 這篇文章翻譯而來。

上周末,有人問我,如何學會函數式編程。我的回答是:用你現在使用的編程語言寫純正函數。

純函數唯一的輸入是它的參數,唯一的輸出是它的返回值。如果你以前從未接觸過這個概念,你會以為所有的函數都是純正的。畢竟,所有的函數都是接受一個或多個輸入值,返回一個輸出值。但在某些傳統編程中,經常會有一些外來的信息流入或流出函數。例如,一個不規范的函數有可能會依賴一個全局變量或一些類成員數據。在這種情況下,函數的行為并不完全決定于它的參數值。相似的,一個不規范的函數有可能會更改一個全局變量或修改數據庫。這種情況下,函數除了返回值外,還會附帶一些額外操作。

你可以用任何語言寫出純函數,只是有些語言容易寫,有些語言寫起來比較復雜。例如,沒有人會把Fortran當作一種函數式語言,但有些人(M. J. D. Powell)卻強制自己在Fortran里要寫純函數。

為什么要寫純函數?

純函數具有親系透徹性(referential transparency),也就是說,針對相同的輸入值,它一定給出相同的輸出值。函數輸出不依賴系統時間、數據庫狀態以及任何沒有顯式的作為參數傳入函數的東西。這也表明純函數易于理解(因此也易于調試和測試)。

你可以一直使用純函數。

但如果你想把一個值放到數據庫里,光通過純函數是實現不了的。或者當你想調用一個隨機數發生器時,你可不想它保持親系透徹性 —— 每次都返回相同的值。但是,在可以用到純函數的時候,你應該使用純函數,用純函數來消除越界聯系。完全的純函數程序是不現實的;有人建議說***的純度系數應該是 85%。

那么,為什么程序員不大量的使用純函數呢?

一個原因是,純函數需要更長的參數表。在面向對象的編程語言里,對象可以隱式的依賴對象狀態來減少參數數量。對于這更簡潔的方法接口,你付出的代價是,你無法只通過方法本身來理解這個方法。調用這個方法時你還需要知道對象的狀態。為了獲得更短的方法接口而放棄親系透徹性值不值得?這依賴于你的上下文環境和你的風格,按我的觀點,我更愿意用更長的函數接口來換取更純的函數。

另外一個人們不太喜歡使用純函數的原因是,把大型數據結構傳入函數太麻煩。但這也依賴于你怎么干。你可以只是形式上的把一個對象傳輸給函數,而不是把整個對象按字節拷貝進去。

為了效率,你也可以制造一些假純度。例如,Mike Swaim最近在一個評論里給出了一個如何利用Memoization讓程序的速度提升數個等級的例子。(Memoization是一種緩存技術。當一個函數向系統請求計算某些東西時,它首先看看這個東西是否已經被緩存過。如果是,它會從從緩存里取出結果返回。如果否,它會計算它,然后把輸出放到緩存里。)使用Memoization技術的函數嚴格的說不是純函數 —— 它的計算操作直接受緩存狀態的影響 —— 但這樣的函數仍然保持親系透徹性,如果你給它相同的輸入,它總會產生相同的輸出。你可以認為稱這樣的函數為純函數是一種欺騙,的確也是,但如果你總是糾結于這種事情,那你也知道,完全純函數是有副作用的。

原文:http://www.aqee.net/how-to-get-started-with-functional-programming/

【編輯推薦】

  1. JavaScript入門之基本函數
  2. 2011下半年Web編程語言和腳本語言的就業趨勢
  3. 學習不同編程語言的重要性
  4. 編程巨星成長的唯一秘訣
  5. 每一門編程語言都是上輩子折翼的天使
責任編輯:陳貽新 來源: 外刊IT評論
相關推薦

2018-11-28 11:20:53

Python函數式編程編程語言

2020-09-22 11:00:11

Java技術開發

2020-09-23 07:50:45

Java函數式編程

2021-09-30 11:12:00

函數式編程 Actor

2013-09-09 09:41:34

2016-10-31 20:46:22

函數式編程Javascript

2011-03-08 15:47:32

函數式編程

2020-09-24 10:57:12

編程函數式前端

2025-03-11 10:00:20

Golang編程函數

2023-12-14 15:31:43

函數式編程python編程

2022-09-22 08:19:26

WebFlux函數式編程

2017-06-08 14:25:46

Kotlin函數

2013-03-20 10:22:51

編程語言編程開發語言

2010-11-25 09:06:37

Web開發函數式編程

2010-03-11 10:34:22

Scala

2012-09-21 09:21:44

函數式編程函數式語言編程

2012-08-21 09:20:37

函數式編程函數編程編程

2016-08-11 10:11:07

JavaScript函數編程

2016-08-11 10:34:37

Javascript函數編程

2020-04-22 13:56:26

python函數編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: a在线视频| 99精品欧美一区二区蜜桃免费 | 日韩三区| 久久精品av麻豆的观看方式 | 久久久久亚洲 | 亚洲女人天堂成人av在线 | 久久精品国产一区二区三区不卡 | 欧美日韩精品 | 免费av在线网站 | 国产一区在线免费观看视频 | 国产 日韩 欧美 在线 | 国产激情99 | 午夜在线影院 | 亚洲一区中文 | 欧美亚洲视频在线观看 | 国产高清视频 | 欧美日韩在线看 | 亚洲91视频 | 一级黄色片在线免费观看 | 免费在线h视频 | 黄色精品视频网站 | 精品91久久久 | 成人免费大片黄在线播放 | a国产视频 | 美女精品一区 | 视频三区 | 紧缚调教一区二区三区视频 | 五月婷婷丁香婷婷 | 一区二区三区视频免费观看 | 国产在线一级片 | 久久久久国产 | 欧美日韩国产一区二区三区 | 9久久精品 | 四虎国产| 九七午夜剧场福利写真 | 亚洲精品久久久久中文字幕欢迎你 | 精品一二区| 伊人精品国产 | 免费观看www7722午夜电影 | 夜夜草av| 欧美久久一区二区 |