Saya baru di Clojure. Saya dapat memahami kode yang saya tulis tetapi menjadi terlalu sulit untuk memahaminya nanti.
Menjadi sulit untuk mencocokkan tanda kurung.
Apa konvensi umum yang harus diikuti mengenai konvensi penamaan dan indentasi dalam berbagai situasi?
Sebagai contoh saya menulis contoh de-struktur contoh untuk memahami tetapi kelihatannya benar-benar tidak dapat dibaca untuk kedua kalinya.
(defn f [{x :x y :y z :z [a b c] :coll}] (print x " " y " " z " " a " " b " " c))
Dalam kasus de-structuring, apakah lebih baik melakukannya langsung di tingkat parameter atau memulai formulir let lalu lanjutkan ke sana?
readability
clojure
Amogh Talpallikar
sumber
sumber
Jawaban:
Konvensi penamaan
gunakan
-
untuk tanda hubung (apa yang akan menjadi garis bawah atau kasus unta dalam bahasa lain).(defn add-one [i] (inc i))
Predikat (yaitu fungsi yang mengembalikan benar atau salah) diakhiri dengan
?
Contoh:odd?
even?
nil?
empty?
Prosedur perubahan negara diakhiri dengan
!
. Anda ingatset!
kan? atauswap!
Pilih panjang nama variabel pendek tergantung pada jangkauannya. Itu berarti jika Anda memiliki variabel bantu yang sangat kecil, Anda seringkali dapat menggunakan nama satu huruf.
(map (fn [[k v]] (inc v)) {:test 4 :blub 5})
pilih nama variabel yang lebih panjang sesuai kebutuhan, terutama jika mereka digunakan untuk banyak baris kode dan Anda tidak dapat langsung menebak tujuannya. (pendapat saya).Saya merasa bahwa banyak programmer clojure cenderung menggunakan nama generik dan pendek. Tapi ini tentu saja bukan observasi objektif. Intinya adalah bahwa banyak fungsi clojure sebenarnya cukup generik.
drop
,take
,assoc
, dll Lalu ada artikel bagus yang menjelaskan cara untuk memilih nama yang bermakna: http://ecmendenhall.github.io/blog/blog/2013/09/ 02 / clean-clojure-bermakna-nama /Fungsi Lambda
Anda sebenarnya dapat memberi nama fungsi lambda. Ini nyaman untuk debugging dan profil (pengalaman saya di sini adalah dengan ClojureScript).
(fn square-em [[k v]] {k (* v v)})
Gunakan fungsi lambda sebaris senyaman
#()
mungkinRuang putih
Seharusnya tidak ada garis paren saja. Yaitu, tutup kurung segera. Ingat parens ada untuk editor dan kompiler, lekukan untuk Anda.
Daftar parameter fungsi menuju baris baru
Ini masuk akal jika Anda berpikir tentang string dokumen. Mereka berada di antara nama fungsi dan parameter. String doc berikut ini mungkin bukan yang paling bijaksana;)
(Anda juga dapat masuk
,
sesuka Anda tetapi ini terasa tidak suram).Untuk indentasi gunakan editor yang cukup bagus. Bertahun-tahun yang lalu ini adalah emacs untuk mengedit lisp, vim juga bagus hari ini. IDE clojure yang khas juga harus menyediakan fungsionalitas ini. Hanya saja, jangan gunakan editor teks acak.
Dalam vim dalam mode perintah, Anda dapat menggunakan
=
perintah untuk membuat indentasi dengan benar.Jika perintah terlalu panjang (bersarang, dll.) Anda dapat memasukkan baris baru setelah argumen pertama. Sekarang kode berikut ini cukup tidak masuk akal tetapi menggambarkan bagaimana Anda dapat mengelompokkan dan membuat indentasi:
Lekukan yang baik berarti Anda tidak perlu menghitung tanda kurung. Tanda kurung adalah untuk komputer (untuk menafsirkan kode sumber dan untuk indentasi itu). Lekukan untuk memudahkan Anda memahami.
Fungsi
for
dandoseq
bentuk orde tinggiBerasal dari latar belakang Skema, saya agak bangga telah memahami
map
fungsi dan lambda, dll. Jadi cukup sering, saya akan menulis sesuatu seperti ini(map (fn [[k x]] (+ x (k data))) {:a 10 :b 20 :c 30})
Ini sulit dibaca. The
for
Bentuk adalah cara yang lebih baik:`map memiliki banyak kegunaan dan sangat bagus jika Anda menggunakan fungsi-fungsi yang disebutkan. Yaitu
Gunakan Threading macro
Gunakan makro threading
->
dan->>
jugadoto
jika berlaku.Intinya adalah bahwa threading macro membuat kode sumber tampak lebih linier daripada komposisi fungsi. Sepotong kode berikut ini tidak dapat dibaca tanpa makro threading:
dibandingkan dengan
Dengan menggunakan threading macro, seseorang biasanya dapat menghindari memperkenalkan variabel sementara yang hanya digunakan sekali.
Hal-hal lain
sumber
doc
atausource
dalam REPL). Akhir kata-kata kasar, untuk jawaban yang sebaliknya bagusapples
bukanxs
, Anda berpikir itu khusus untuk apel. Kemudian, saya juga akan menganggap nama argumen fungsi lebih jauh daripada membiarkan-katakan a untuk variabel loop. jadi jika perlu, Anda bisa memilikinya lebih lama. Sebagai pemikiran terakhir: Saya akan meninggalkan Anda dengan "Kode nama bukan nilai" concatenative.org/wiki/view/Concatenative%20language/…