নামকরণ অনুষ্ঠান
- ফাংশন জন্য ছোট হাত থাকুন
-
হাইফেনেশনের জন্য ব্যবহার করুন (অন্যান্য ভাষায় আন্ডারস্কোর বা উটের ক্ষেত্রে কী হবে)।
(defn add-one
[i]
(inc i))
পূর্বাভাস (উদাহরণস্বরূপ ফাংশনগুলি সত্য বা মিথ্যা প্রত্যাবর্তন) শেষ হয় ?
:odd?
even?
nil?
empty?
রাজ্য পরিবর্তনের পদ্ধতি শেষ !
। set!
ঠিক মনে আছে? অথবাswap!
তাদের নাগালের উপর নির্ভর করে সংক্ষিপ্ত পরিবর্তনশীল নামের দৈর্ঘ্য চয়ন করুন। এর অর্থ যদি আপনার যদি খুব ছোট অক্জিলিয়ারি ভেরিয়েবল থাকে তবে আপনি প্রায়শই কেবলমাত্র একটি-অক্ষরের নাম ব্যবহার করতে পারেন। (map (fn [[k v]] (inc v)) {:test 4 :blub 5})
প্রয়োজন মতো দীর্ঘতর পরিবর্তনশীল নামগুলি বেছে নিন, বিশেষত যদি সেগুলি প্রচুর কোড লাইনের জন্য ব্যবহৃত হয় এবং আপনি তাত্ক্ষণিকভাবে তাদের উদ্দেশ্য অনুমান করতে পারবেন না। (আমার মতামত).
আমি অনুভব করি যে প্রচুর ক্লোজার প্রোগ্রামাররা জেনেরিক এবং সংক্ষিপ্ত নামগুলি ব্যবহার করার প্রবণতা রাখে। তবে এটি অবশ্যই বস্তুনিষ্ঠ পর্যবেক্ষণ নয়। মুল বক্তব্যটি হ'ল প্রচুর ক্লোজার ফাংশন আসলে বেশ জেনেরিক।
লাম্বদা ফাংশন
আপনি আসলে ল্যাম্বদা ফাংশনগুলির নাম দিতে পারেন। এটি ডিবাগিং এবং প্রোফাইলিংয়ের জন্য সুবিধাজনক (আমার অভিজ্ঞতা এখানে ক্লোজার স্ক্রিপ্ট সহ)।
(fn square-em [[k v]] {k (* v v)})
#()
সুবিধাজনক হিসাবে ইনলাইন ল্যাম্বদা ফাংশন ব্যবহার করুন
সাদা ব্যবধান
প্যারেন্স-কেবল লাইন থাকা উচিত নয়। অর্থাৎ এখনই বন্ধনী বন্ধ করুন। মনে রাখবেন প্যারেনস সম্পাদক এবং সংকলকের জন্য রয়েছে, ইনডেন্টেশনটি আপনার জন্য।
ফাংশন প্যারামিটারের তালিকাগুলি একটি নতুন লাইনে যায়
(defn cons)
[AB]
(তালিকা আবশ্যক)
আপনি যদি ডক স্ট্রিং সম্পর্কে চিন্তা করেন তবে এটি অর্থবোধ করে। এগুলি ফাংশনের নাম এবং পরামিতিগুলির মধ্যে রয়েছে। নিম্নলিখিত ডক স্ট্রিং সম্ভবত বুদ্ধিমান নয়;)
(defn cons)
"জিনিসগুলিকে যুক্ত করা"
[AB]
(তালিকা আবশ্যক)
- জোড় করা ডেটা যতক্ষণ আপনি জোড়টি ধরে রাখবেন ততক্ষণ নতুন লাইনের দ্বারা পৃথক করা যায়
(ডিফএন চ
[{x: x
y: y
z: z
[এবিসি]: সংঘর্ষ}]
(প্রিন্ট x "" y "" জেড "" এ "" বি "" সি))
(আপনি নিজের ,
পছন্দ মতো প্রবেশও করতে পারেন তবে এটি অস্বচ্ছন্দ বোধ করে)।
ইন্ডেন্টেশন জন্য যথেষ্ট ভাল সম্পাদক ব্যবহার করুন। কয়েক বছর আগে এটি লিস্প সম্পাদনার জন্য ইমাস ছিল, ভিম আজও দুর্দান্ত। সাধারণ ক্লোজার আইডিইগুলিরও এই কার্যকারিতা সরবরাহ করা উচিত। শুধু একটি এলোমেলো পাঠ্য সম্পাদক ব্যবহার করবেন না।
কমান্ড মোডের ভিমে আপনি কমান্ডটি =
সঠিকভাবে ইনডেন্ট করতে পারেন ।
যদি কমান্ডটি খুব দীর্ঘ হয় (নেস্টেড, ইত্যাদি) আপনি প্রথম যুক্তির পরে একটি নতুন লাইন canোকাতে পারেন। এখন নীচের কোডটি বেশ বুদ্ধিমান তবে এটি আপনাকে কীভাবে গোষ্ঠীভুক্ত করতে এবং ইনডেন্ট এক্সপ্রেশনগুলি ব্যাখ্যা করতে পারে:
(+ (যদি-দেওয়া [বয়স (: ব্যক্তিগত-বয়স সংঘর্ষ))]
(যদি (> বয়স 18)
বয়স
0))
(গণনা (পরিসর (- 3 খ))
(হ্রাস +)
(পরিসর বি 10%))))
ভাল ইন্ডেন্টেশন মানে আপনাকে বন্ধনী গণনা করতে হবে না। বন্ধনীগুলি কম্পিউটারের জন্য (উত্স কোডটি ব্যাখ্যা করার জন্য এবং এটিতে প্রবেশ করার জন্য)। ইন্ডেন্টেশন আপনার সহজ বোঝার জন্য।
উচ্চতর ক্রিয়াকলাপ বনাম for
এবং doseq
ফর্মগুলি
স্কিমের পটভূমি থেকে আগত আমি map
ল্যাম্বদা ফাংশন ইত্যাদি বুঝতে পেরে বরং গর্বিত হয়েছি তাই প্রায়শই আমি এই জাতীয় কিছু লিখতাম
(map (fn [[k x]] (+ x (k data))) {:a 10 :b 20 :c 30})
এটি পড়া বেশ কঠিন hard for
ফর্ম পথ সুন্দর হল:
(for [[k x] {:a 10 :b 20 :c30}]
(+ x (k data)))
`মানচিত্রে প্রচুর ব্যবহার রয়েছে এবং আপনি যদি নামযুক্ত ফাংশনগুলি ব্যবহার করে থাকেন তবে সত্যিই দুর্দান্ত। অর্থাত
(map inc [12 30 10]
(map count [[10 20 23] [1 2 3 4 5] (range 5)])
থ্রেডিং ম্যাক্রোগুলি ব্যবহার করুন
থ্রেডিং ম্যাক্রোগুলি ব্যবহার করুন ->
এবং ->>
পাশাপাশি doto
প্রযোজ্য ক্ষেত্রে।
মুল বক্তব্যটি হ'ল থ্রেডিং ম্যাক্রোগুলি উত্স কোডটি ফাংশন রচনাগুলির চেয়ে বেশি লিনিয়ার প্রদর্শিত হয়। থ্রেডিং ম্যাক্রো ব্যতীত নিম্নলিখিত কোডের টুকরোটি বেশ অপঠনযোগ্য:
(f (g (h 3) 10) [10 3 2 3])
তুলনা করা
(->
(h 3)
(g 10)
(f [10 3 2 3]))
থ্রেডিং ম্যাক্রো ব্যবহার করে, কেউ সাধারণত একবারে ব্যবহৃত অস্থায়ী ভেরিয়েবলগুলি প্রবর্তন এড়াতে পারে।
অন্য জিনিস
- ডকাস্ট্রিং ব্যবহার করুন
- ফাংশন সংক্ষিপ্ত রাখুন
- অন্যান্য ক্লোজার কোড পড়ুন