私は関数型プログラミングにかなり慣れていません。私の以前のプログラミング経験は、主に Java でした。
関数型言語で関数を設計する場合、プリミティブとコレクションのどちらを渡す方がよいですか? 関数型言語の知識が不足しているため、どちらを選択しても効果が見えない気がします。
私の意見では、コレクションを渡すと、よりクリーンで直感的なコードになります (たとえば、name、surname などの代わりに person という名前のマップを渡します)。一方、それはコレクション構造の依存関係を作成します。多分それは、そのマップから使用する必要がある情報の量に依存します. わからない...
これが開かれた議論であることは承知していますが、私の主な関心事は、機能を設計するための事実上の方法があるかどうかです。
アップデート1
前に言ったように人物マップがあり、その内容を str したいとしましょう。次のようなことをすると思います。
;
(def person {:name "John" :surname "Doe"})
(defn str-person
"Give the full name of a person"
[person]
(apply str (interpose ", " (map #(get-in person [%]) [:surname :name]))))
; => Doe, John
; primitive alt
(defn str-person
"Give the full name of a person"
[name surname]
(str surname ", " name))
; => Doe, John
さて、私は最初の解決策が FP に近いものであり、それを拡張することもできると信じていますが、一方で、それは少しやり過ぎのように思えます。