“編程”概念的筆記

在看函數(shù)式編程,響應(yīng)式編程的文章的時(shí)候。中文有時(shí)候都講“編程”比較容易混淆。什么東西翻譯過來都是“編程”,有些時(shí)候翻譯用詞又用很高深的字眼,有時(shí)候又是同級(jí)概念2333。自己會(huì)弄混,所以做些筆記好區(qū)別,大部分句子都僅是摘抄,文后有標(biāo)明文章出處。在看這些個(gè)講函數(shù)式、響應(yīng)式文章之前先做的一些概念區(qū)別的筆記。

  1. 先根據(jù)英文直接先區(qū)分下面4個(gè)名詞:

    1. 設(shè)計(jì)模式(Design Pattern)
    2. 編程范式(Programming Paradigm)
    3. 編程思想(Programming Thinking?)(這個(gè)我也不太確定前面有沒有Programming這個(gè)詞在前面,我的理解是:編程思想是一種思考問題的方式,是在真正寫代碼之前你考慮這個(gè)問題的方法,角度,模式;它區(qū)別于編程范式,編程語言。可能單單說是Thinking,前面不加Programming也不為過吧。)
    4. 句法(syntax)
  2. 上面名詞的舉例:


    例子
    1. 上面的表的一些講解:Functional Thinking是一種編程思想,這個(gè)觀點(diǎn)是有一篇文章講到了的點(diǎn)。對(duì)應(yīng)是文1貌似。
    2. Impreative Programming有兩個(gè)中文譯名:一個(gè)是命令式編程,另一個(gè)是指令式編程。
    3. 這里沒有將Pure Functional和Functional進(jìn)行區(qū)分。自己也不是看得很懂。
    4. Method Chaining的中文譯名是鏈?zhǔn)骄幊?容易混淆)
    5. Dynamic Programming不是編程范式23333。是動(dòng)態(tài)規(guī)劃呀2333。它還有一個(gè)英文名Dynamic Optimization(直譯:動(dòng)態(tài)最優(yōu)化)。
  3. 一些筆記

    1. Method Chaining不是一種編程范式。wiki上面也說這是一種句法。我的理解是Method Chaining最多可以算是一種編程技巧吧。但也不是編程范式。
    2. Functional的特性筆記:
    3. 函數(shù)是First Class
      a. 函數(shù)能作為變量的值。
      b. 函數(shù)可以作為另外一個(gè)函數(shù)的參數(shù)。
      c. 函數(shù)返回另外一個(gè)函數(shù)
    4. Pure Functional(也是Functional的一些思想)
      a. func結(jié)果只受參數(shù)影響
      b. func內(nèi)部不使用會(huì)受外部改變的變量
      c. func的結(jié)果不影響外部
    5. 不可變數(shù)據(jù)。不能改變的數(shù)據(jù)。所有改動(dòng)的操作都僅是值拷貝,對(duì)只進(jìn)行修改后返回結(jié)果。
    6. 尾調(diào)用優(yōu)化。有尾調(diào)用優(yōu)化的編程語言會(huì)通過重用同一個(gè)棧來進(jìn)行遞歸。若無往往會(huì)申請(qǐng)內(nèi)存到滿,崩掉,有優(yōu)化的不會(huì)。

    “與普通遞歸相比,由于尾遞歸的調(diào)用處于方法的最后,因此方法之前所積累下的各種狀態(tài)對(duì)于遞歸調(diào)用結(jié)果已經(jīng)沒有任何意義,因此完全可以把本次方法中留在堆棧中的數(shù)據(jù)完全清除,把空間讓給最后的遞歸調(diào)用。這樣的優(yōu)化便使得遞歸不會(huì)在調(diào)用堆棧上產(chǎn)生堆積,意味著即時(shí)是“無限”遞歸也不會(huì)讓堆棧溢出”。(出自文7)

    1. Functional Programming的思考方式:去掉不確定的那些因素,讓同樣的輸入產(chǎn)生同樣的輸出。

    如何行動(dòng)
    在自己的代碼庫中檢查某些有一定復(fù)雜度的函數(shù),跟蹤它能觸及的每一比特外部狀態(tài)以及所有可能的狀態(tài)更新。即使對(duì)它不做一點(diǎn)改動(dòng),把這些信息放入一個(gè)注釋塊就已經(jīng)是極好的文檔了。如果函數(shù)能夠——比方說,通過渲染系統(tǒng)觸發(fā)一次屏幕刷新,你就可以直接把手舉在空中,聲明這個(gè)函數(shù)所有的正副作用已經(jīng)超出了人類的理解力。你要著手的下一項(xiàng)任務(wù)是基于實(shí)際執(zhí)行的計(jì)算從頭開始重新考慮這個(gè)函數(shù)。收集所有的輸入,把它傳給一個(gè)純函數(shù),然后接收結(jié)果并做相應(yīng)處理。(出自文8)

    1. 響應(yīng)式編程Reactive Programming是一種編程范式。是一種面向數(shù)據(jù)流的,面向變化傳播的編程范式。針對(duì)數(shù)據(jù)更新相關(guān)聯(lián),舉個(gè)例子:用KVO來update我們的View。
    2. 將函數(shù)式編程思想整合到響應(yīng)式編程中就是函數(shù)式響應(yīng)編程。
    3. 也講下OO吧:面向?qū)ο笥兴伎挤绞胶兔嫦驅(qū)ο缶幊?。它?個(gè)特性是:封裝,繼承,多態(tài)。抽象、接口等等更接近是OO具體的做法了。

參考文章:
文1--函數(shù)式編程解釋(博樂網(wǎng)python版本的解釋)
文2--函數(shù)式響應(yīng)文章
文3《“函數(shù)式”編程 vs 編程寫個(gè)函數(shù)》(Swift的filter及函數(shù)式的思考方式)
文4--百度百科FP(我覺得是文1的再次解析)
文5--講了OOP和FP在細(xì)節(jié)上的對(duì)比。
文6--C++ 11的Lambda表達(dá)式(這貨是閉包2333)
文7--尾調(diào)用優(yōu)化編譯器做什么
文8--用C++進(jìn)行函數(shù)式編程
小補(bǔ)充,語法上的貌似感覺

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容