3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
他們每個(gè)人都有自己的優(yōu)點(diǎn)-他們只是解決相同問(wèn)題的不同方法。
在純粹的過(guò)程樣式中,數(shù)據(jù)往往與對(duì)其上運(yùn)行的功能高度去耦。
在面向?qū)ο蟮娘L(fēng)格中,數(shù)據(jù)傾向于帶有一系列功能。
在功能樣式中,數(shù)據(jù)和功能趨向于彼此之間具有更多的共同點(diǎn)(如Lisp和Scheme),同時(shí)在實(shí)際使用功能方面提供了更大的靈活性。還傾向于根據(jù)遞歸和組合而不是循環(huán)和迭代來(lái)定義算法。
當(dāng)然,語(yǔ)言本身只會(huì)影響首選哪種樣式。即使使用像Haskell這樣的純函數(shù)式語(yǔ)言,也可以以過(guò)程樣式(盡管不鼓勵(lì)這樣做)編寫(xiě),甚至可以使用像C這樣的過(guò)程語(yǔ)言,以面向?qū)ο蟮臉邮剑ɡ鏕TK +和EFL API)。
需要明確的是,每個(gè)范例的“優(yōu)勢(shì)”僅在于算法和數(shù)據(jù)結(jié)構(gòu)的建模。例如,如果您的算法涉及列表和樹(shù),那么功能性算法可能是最明智的。或者,例如,如果您的數(shù)據(jù)是高度結(jié)構(gòu)化的,那么如果這是您語(yǔ)言的本機(jī)范式,則將其組合為對(duì)象可能更有意義-或者,可以將其簡(jiǎn)單地編寫(xiě)為monad的功能抽象,是Haskell或ML之類的語(yǔ)言的原生范例。
您選擇使用哪種方法,對(duì)于您的項(xiàng)目和語(yǔ)言支持的抽象才更有意義。

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
我認(rèn)為這些天可用的庫(kù),工具,示例和社區(qū)完全取代了范例。例如,ML(或其他任何語(yǔ)言)可能是最終的通用編程語(yǔ)言,但是如果您無(wú)法為正在做的事情獲得任何好的庫(kù),那么您就搞砸了。
例如,如果您要制作視頻游戲,那么C ++中會(huì)有更多優(yōu)秀的代碼示例和SDK,因此您可能會(huì)更好。對(duì)于小型Web應(yīng)用程序,有一些很棒的Python,PHP和Ruby框架可以使您快速啟動(dòng)并運(yùn)行。由于編譯時(shí)檢查以及企業(yè)庫(kù)和平臺(tái),Java是大型項(xiàng)目的理想選擇。
過(guò)去,用于不同語(yǔ)言的標(biāo)準(zhǔn)庫(kù)非常小,易于復(fù)制-C,C ++,Assembler,ML,LISP等。這些庫(kù)具有基礎(chǔ)知識(shí),但是當(dāng)涉及到事物標(biāo)準(zhǔn)化時(shí),往往會(huì)屈服像網(wǎng)絡(luò)通訊,加密,圖形,數(shù)據(jù)文件格式(包括XML),甚至基本的數(shù)據(jù)結(jié)構(gòu)(如平衡樹(shù)和哈希表)都被忽略了!
如今,Python,PHP,Ruby和Java等現(xiàn)代語(yǔ)言都提供了更為完善的標(biāo)準(zhǔn)庫(kù),并且您可以輕松使用許多優(yōu)秀的第三方庫(kù),這在很大程度上要?dú)w功于它們采用了命名空間,以防止庫(kù)彼此沖突,和垃圾回收,以標(biāo)準(zhǔn)化庫(kù)的內(nèi)存管理方案。
- 3 回答
- 0 關(guān)注
- 491 瀏覽
添加回答
舉報(bào)