Clojureの学習パート2:基本構文


この次の部分では、基本的なクロジュールの構文と操作について説明します.我々は生産的にする必要があるすべての基本を学びます.


クロジュールは2種類の構造を持つ.リテラルと操作.
リテラルは、数字、文字列、ベクトルなどのような日常的なデータ構造です.
1
"awesome string"
["vector" "of" "awesome" "strings"]
操作は、あなたの毎日のパンと水です.閉じるこの動画はお気に入りから削除されています.
操作は次のようになります.
(operator operand1 operand2 operand3 ... operandN)
ここで重要なのは、クロージャがオペランドを分離するために空白を使うことです.
操作例
 (+ 40 2)
;=> 42

(- 50 8)
;=> 42

(str "Contact" " these " "strings")
;=> "Contact these strings"

フロー
Clojureは我々の人生をより簡単にするいくつかの基本的な制御フロー演算子を持っています.最も基本的なものの上に行きましょう.

if
With if あなたのコードの条件を行うことができます.
if式の構造
(if boolean
 then
 else)
したがって、ここでの基本的な例は次のようになります.
(if true
 "Clojure seems awesome."
 "Clojure seems like a lot.")
;=> "Clojure seems awesome."

ドゥ
With do チェーンに複数の式を1つにすることができます.
(if true
 (do (println "Clojure seems awesome.")
 (println "And more awesome with do."))
 "Clojure seems like a lot.")
;Clojure seems awesome.
;And more awesome with do.


With when あなたの組み合わせがありますif and do . あなたは持っていないelse オペランドTHO
(when true
 (println "Clojure seems awesome.")
 (println "And more awesome with when."))
;Clojure seems awesome.
;And more awesome with when.

BooleansとNIL
があるtrue and false Clojureにおけるブール値nil 値が表示されません.
値がnil with nil? エクスプレッション.
(nil? 0)
;=> false

(nil? nil)
;=> true
両方nil and false 論理的な虚偽のために立って、他のすべての値はtrueと見なされます.
(if "random string" 
 "this random string is true")
;=> "this random string is true"

(if nil
 "nil is true"
 "nil is false")
;=> "nil is false"
等値演算子=
(= 1 1)
;=> true

(= 1 2)
;=> false
クロジュールもand and or 演算子それらの行為は他の言語と異なっていた.or 最初の真値または最後の値を返します.例:
(or false nil "this will be returned")
;=> "this will be returned"

(or (= 0 1) (= "a" "b"))
;=> false

(or nil)
;=> nil
and 最初のfalsey値、あるいは最後の真の値を返します(偽の値がない場合)
(and "a" "b")
;=> "b"

(and "a" nil false)
;=> nil

命名
私たちはdef クロジュールに値を付ける.
(def shopping-list
 ["Vodka" "Apple jiuce" "Red Bull"])
shopping-list
;=> ["Vodka" "Apple juice" "Red Bull"]
このような変数を定義するのは、あなたが複数の代入を1つの名前にするとき、ちょっと奇妙で混乱しているようです.これは、再考されなければならなくて、違って行われるべき何かです.
コードを書く方法を示す小さな運動をしましょう.
次のJavaコードをイメージしましょう.
level = "info";
message = "message";
if (level.equals("info")) {
 message = message + " (FYI)");
} else {
 message = message + " (OMG)";
}
これは完全にコードのコードです.私の最初の本能は、こうでした.
(def level "info")
(def message "message")
(if (= level "info")
 (def message (str message " (FYI)"))
 (def message (str message " (OMG)")))
あなたがそれについて考えるならばdefn 新しい演算子を定義するにはあなたはこのようなことができます.
(defn error
 [message level]
 (str message
 (if (= level "info")
 " (FYI)"
 " (OMG)")))
(error "message" "info")
;=> "message (FYI)"
あなたはこのようなコンテンツを得るために私に従うことができます.