官术网_书友最值得收藏!

1.1 編程范式

編程范式并沒有統(tǒng)一的劃分標(biāo)準(zhǔn)。本書重點(diǎn)分析其中兩個(gè)范式:函數(shù)式編程命令式編程。二者最重要的特征區(qū)別是狀態(tài)

在命令式語言(比如Python)中,計(jì)算的狀態(tài)是通過不同命名空間中變量的值反映的。變量的值決定計(jì)算的當(dāng)前狀態(tài),一條語句通過增加或改變(甚至是刪除)變量來改變當(dāng)前狀態(tài)?!懊钍健闭Z言的每一條語句都是一個(gè)通過某種方式改變狀態(tài)的命令。

本書主要關(guān)注賦值語句以及它如何改變狀態(tài)。除此之外,Python中的其他語句包括用于在命令空間中改變變量規(guī)則的global、nonlocal等,用于改變變量所處語境的def、class和import等,用作判斷條件確定一組語句如何改變計(jì)算狀態(tài)的try、except、if、elif和else等。而循環(huán)語句,如for和while,則是將一組語句作為整體以重復(fù)改變計(jì)算狀態(tài)??梢娝羞@些語句都是通過某種方式改變變量狀態(tài)的。

理想狀態(tài)下,每一條語句通過改變狀態(tài),推動(dòng)計(jì)算從初始狀態(tài)向期望的最終結(jié)果不斷靠近。然而,這種“推動(dòng)計(jì)算一步步向前”的模式難以驗(yàn)證。需要首先定義出最終狀態(tài),找到能達(dá)到該狀態(tài)的語句,從而推導(dǎo)出達(dá)到該狀態(tài)需要的前提條件,然后重復(fù)上述步驟,直到找到一個(gè)可接受的初始狀態(tài)。

在函數(shù)式語言中,使用“對函數(shù)求值”這一更簡單的概念代替改變變量值的“狀態(tài)”,每次對函數(shù)求值都會(huì)在現(xiàn)有對象的基礎(chǔ)上創(chuàng)建一個(gè)或多個(gè)新對象。函數(shù)式程序即函數(shù)的組合,相應(yīng)的開發(fā)過程是:首先設(shè)計(jì)一組易于理解的底層函數(shù),然后在此基礎(chǔ)上設(shè)計(jì)符合業(yè)務(wù)需求的高級函數(shù)。相比于由復(fù)雜的流程控制組成的指令集合,高級函數(shù)更容易可視化。

形式上,函數(shù)求值更接近算法的數(shù)學(xué)表達(dá)。以簡單的代數(shù)形式設(shè)計(jì)算法,便于處理特殊情況和邊界條件,而且函數(shù)更有可能按照預(yù)期工作,也便于編寫單元測試用例。

請注意,通常函數(shù)式程序比功能相同的命令式(面向?qū)ο蠡蛘哌^程式的)程序更加簡潔明了和高效,但這些優(yōu)點(diǎn)并不是自然而然的,需要仔細(xì)地設(shè)計(jì),但付出的努力通常少于設(shè)計(jì)功能類似的過程式程序。

主站蜘蛛池模板: 临沂市| 寿阳县| 东丽区| 陆河县| 白河县| 互助| 辉县市| 永兴县| 曲阜市| 江津市| 都匀市| 大悟县| 长丰县| 敦化市| 军事| 余庆县| 海晏县| 金昌市| 渑池县| 鱼台县| 保亭| 黄梅县| 上栗县| 塔城市| 崇仁县| 文安县| 延安市| 景德镇市| 彰化县| 嘉善县| 郁南县| 红河县| 方正县| 奉新县| 本溪市| 襄城县| 珠海市| 昭通市| 和林格尔县| 高台县| 读书|