大家好,我是對於 Clojure 一無所知的菜鳥小白工程師。
照慣例上維基百科:
Clojure is a dynamic and functional dialect of the Lisp programming language on the Java platform.
翻譯一下:
Clojure 是一種
動態語言
,具有函式程式設計
的特性,屬於Lisp
家族一員的程式語言,並且基於Java 平台
運作。
欸?明明翻成中文了,我卻還是看不懂,只好一個一個解讀了!
照例上維基百科:
In computer science, a dynamic programming language is a class of high-level programming languages, which at runtime execute many common programming behaviours that static programming languages perform during compilation. These behaviors could include an extension of the program, by adding new code, by extending objects and definitions, or by modifying the type system.
就小白的理解, 動態語言
的特點,在於變數的使用。
在動態語言中,變數的資料型別是在運行時( runtime
)確定的,而不是在編譯時( compile-time
)處理的。這代表我們可以在運行時修改變數,而不需要提前聲明其類型。例如,我們可以將一個變數先賦值為整數,然後再賦值為字串,並且不會在此過程中引發錯誤。
另外,內文中有提及,Clojure 是一種 high-level 語言,high-level 是什麼呢?
由於小白平常使用的 Ruby 也是高階 / 動態語言,這點感覺很熟悉呢。
(反過來說,在靜態語言中,變數的資料型別必須在編譯時明確聲明,並且無法更改。這代表編譯時就會對類型錯誤進行檢查,並在不符合類型規範的情況下引發錯誤。)
現在我們知道了, Clojure 是一種動態語言,它在使用上比較靈活,不需要提前聲明類型 。但是要等到運行時,才能針對某些錯誤進行偵測。
照例上維基百科:
In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that map values to other values, rather than a sequence of imperative statements which update the running state of the program.
In functional programming, functions are treated as first-class citizens, meaning that they can be bound to names (including local identifiers), passed as arguments, and returned from other functions, just as any other data type can. This allows programs to be written in a declarative and composable style, where small functions are combined in a modular manner.
Functional programming 是一種程式設計的概念。
菜鳥小白在找資料時,發現 Functional language 跟 OOP 是完全不同的世界!
小白的理解是,OOP 講求抽象化、封裝,使程式碼易於維護、使用。FP(Functional programming) 則是注重資料本身——強調資料的不可變性、無副作用的特性,並以 Function 為處理資料的基本單位。
關於 Functional programming ,小白主要從維基百科的幾個概念重點做筆記:
賦值
、 傳遞
、 返回
。參數
傳入另一個函式。回傳值
返回。要做什麼
,而不是 如何做到
)。照例上維基百科:
Lisp (historically LISP, an acronym for list processing) is a family of programming languages with a long history and a distinctive, fully parenthesized prefix notation.
以小白的認知,可以先把 Lisp 家族的語言特性,當作他們對程式處理的特殊方式。LISP 語言用前置表示法,其特點是操作符置於操作數的前面,因此也稱做前綴表示法。(wiki)
比如説在 Clojure 中, 1+1
會寫成 (+ 1 1)
。
照例上維基百科:
Clojure runs on the Java platform and as a result, integrates with Java and fully supports calling Java code from Clojure,and Clojure code can be called from Java, too.
簡而言之,Clojure 是一種在 Java 虛擬機(JVM)上運行的語言。這種設計使 Clojure 可以直接利用 Java 生態系統的豐富資源,包括 Java 函數庫和框架。
最後再複習一下:
Clojure 是一種
動態
語言,具有函式程式設計的特性
,屬於Lisp
家族一員的程式語言,並且基於Java 平台
運作。