話說...Javascript可說是世界上最多工程師會用的語言!
有超過65%的developers使用
所以,今天就來跟大家比較一下,clojurescript 與最常用的javascript之間的語法相似度及重點
Most used programming languages among developers worldwide as of 2022
Ref
今天會比較的是昨天提到的def / defn 以及匿名函式的寫法:)
如果比較完覺得還蠻好轉換,這樣大家就覺得clojurescript比較好上手了吧~(誘導策略!)
Javascript | Clojurescript |
---|---|
var x = 1; | (def x 1) |
定義變數乍看之下是很容易理解的事,
在clojure裡form的概念需要特別釐清。我們會解讀def是一個special form,作用是把目前namespace下的某個symbol(x)和值value(1)關聯起來,也可以說,special forms are forms
evaluated in a special way。
除了def,在clojure裡,special form還有很多種,可以透過以下(pprint (keys (. clojure.lang.Compiler specials)))
指令查詢:
tutorial.core=> (pprint (keys (. clojure.lang.Compiler specials)))
(&
monitor-exit
case*
try
reify*
finally
loop*
do
letfn*
if
clojure.core/import*
new
deftype*
let*
fn*
recur
set!
.
var
quote
catch
throw
monitor-enter
def)
nil
那什麼是form呢?最簡單的例子,最小也最常拿來舉例的運算式 (+ 1 2),運算元+
就是個form
Ref:
https://livebook.manning.com/concept/clojure/form
https://en.wikibooks.org/wiki/Learning_Clojure/Special_Forms
昨天我們學習了clojure裡定義function的寫法
(defn x [a b] (+ a b))
tutorial.core=> (defn x [a b] (+ a b))
#'tutorial.core/x
tutorial.core=> (x 1 2)
3
javascript會寫成
function x(a, b) {
return a + b;
}
在chrome瀏覽器的console執行一下結果:
Javascript | Clojurescript |
---|---|
function x(a, b) { return a + b;} | (defn x [a b] (+ a b)) |
呼叫: x(1, 2) | (x 1 2) |
有沒有覺得cljs語法稍微簡潔一點呢?
不然也可以來比看看Java vs Clojure差異會更明顯~XD
Java
public void hello(String name) {
System.out.println("Hello World, " + name);
}
Clojure
(defn hello [name]
(println "Hello World," name))
在javascript常常使用的匿名函式有一些特點
這些特點也讓javascript成為能學習functional programing (FP)初入門的語言~
Javascript | Clojurescript |
---|---|
function (x, y){return x + y} | (fn [x y](+ x y)) |
咦,Clojurescript這讓我們聯想到昨天文章裡看到類似的例子:
(defn a [x y] (+ x y))
(def b (fn [x y] (+ x y)))
def form後面接的是匿名函式(fn [x y] (+ x y)
寫法同等於defn之後,括弧可以少包一層,是不是更方便使用啦?
如果想知道更多javascript轉換成clojurescript之後更簡潔的寫法,也可以參考https://roman01la.github.io/javascript-to-clojurescript/這個大大做的網站唷
下篇預計會講data structure的collection系列
包含 Vectors / Lists / Maps / Sets
today's content inspired by these articles: