Clojure:
コードを関数に整理する
方法:
Clojureの関数はdefn
で定義され、その後に名前、パラメータ、および本体が続きます。こちらが簡単な例です。
(defn greet [name]
(str "Hello, " name "!"))
(greet "Alex") ; => "Hello, Alex!"
今度は長方形の面積を計算したいとしましょう。それを全てひとまとめにするのではなく、2つの関数に分けます。
(defn area [length width]
(* length width))
(defn print-area [length width]
(println "The area is:" (area length width)))
(print-area 3 4) ; => The area is: 12
詳細分析
昔のコーダーたちは、全てのロジックを単一のブロックに叩き込んだものです。それは醜かった。その後、構造化プログラミングが登場し、関数が物になりました。Clojureでは、全ての関数はファーストクラスです—それらを他のどんな値のように扱うことができます。
代替案は?一部の人々はマルチメソッドや高階関数を扱うかもしれませんが、それらは関数のシチューの中のスパイスにすぎません。
一関数の細部に全部あります:それらはClojure内で不変です、副作用の混乱が少なくなるでしょう。彼らは典型的なループの代わりに再帰に大いに依存し、それは言語の関数型パラダイムとよく合っています。
参照
- Clojure自身のガイド:https://clojure.org/guides/learn/functions
- 関数型プログラミングの基礎:https://www.braveclojure.com/core-functions-in-depth/
- リッチ・ヒッキーの講演:https://changelog.com/posts/rich-hickeys-greatest-hits - Clojureの哲学に関する洞察のために。