Clojure-এ একটি মানকে একটি নামের সাথে বেঁধে রাখাকে ভ্যার বলা হয়। টপ-লেভেল (গ্লোবাল) ভ্যারগুলো অন্য ভাষার কনস্ট্যান্টের মতোই।
টপ-লেভেল ভ্যার ডিফাইন করা হয় def দিয়ে:
(def fingers 10)
fingers
;;=> 10
defn দিয়ে এমন একটি ফাংশন ডিফাইন করা যায়, যেটি শূন্য বা তার বেশি আর্গুমেন্ট নেয়। এটি এমন একটি ফাংশন, যা ২টি সংখ্যা যোগ করে:
(defn add [x y]
(+ x y))
এই ফাংশনটি ২টি আর্গুমেন্ট নেয়, যেগুলো [x y] ভেক্টরে বসানো থাকে; এরপর আসে ফাংশনের বডি, যেখানে যেকোনো সংখ্যক এক্সপ্রেশন থাকতে পারে। রিটার্ন ভ্যালু সবসময় বডির শেষ এক্সপ্রেশনটি, অর্থাৎ (+ x y), ইভ্যালুয়েট করার ফলাফল। এই এক্সপ্রেশনটি একটি লিস্ট, যা একটি ফাংশন কল বোঝায়। লিস্টের প্রথম আইটেমটি হলো + ফাংশন, যেটি পরের আইটেম x ও y-কে আর্গুমেন্ট হিসেবে নিয়ে ইভ্যালুয়েট করা হয়।
উপরে ডিফাইন করা add ফাংশনটি একইভাবে কল করা হয়:
(add 2 3)
;;=> 5
Clojure-এ ফাংশন আর মান কেবল এগুলো ডিফাইন করার পরেই ব্যবহার করা যায়, অর্থাৎ ফর্মগুলো সবসময় যে ক্রমে লেখা থাকে, সেই ক্রমেই ইভ্যালুয়েট করা হয়।
Clojure-এ হোয়াইটস্পেসের ফরম্যাটিং ছাড়া আর কোনো তাৎপর্য নেই।
Clojure-এর ফাংশন ও ভ্যারগুলো নেমস্পেসে সাজানো থাকে। একটি নেমস্পেস সম্পর্কিত কার্যকারিতা একত্র করে এবং ns ম্যাক্রো দিয়ে ডিফাইন করা হয়:
(ns calculator)
(def pi 3.14)
(defn add [x y]
(+ x y))
Clojure দুই ধরনের কমেন্ট সমর্থন করে। এক লাইনের কমেন্টের আগে ; থাকে, আর comment ফর্মটি (comment ও )-এর মধ্যবর্তী সবকিছুর ইভ্যালুয়েশন ঠেকাতে ব্যবহার করা হয়।
এই অনুশীলনীতে আপনি আপনার প্রিয় রান্নার বই থেকে একটি দুর্দান্ত লাসানিয়া রান্না করতে সাহায্য করার জন্য কিছু কোড লিখবেন।
আপনার সামনে চারটি কাজ আছে, সবগুলোই লাসানিয়া রান্না করতে যে সময় লাগে তার সাথে সম্পর্কিত।
লাসানিয়াকে কত মিনিট ওভেনে থাকতে হবে তা জানার জন্য expected-time ভ্যারিয়েবলটি ডিফাইন করুন। রান্নার বই অনুযায়ী, মিনিটে প্রত্যাশিত ওভেনের সময় ৪০:
expected-time
;;=> 40
remaining-time ফাংশনটি ডিফাইন করুন, যা আর্গুমেন্ট হিসেবে লাসানিয়া এতক্ষণ কত মিনিট ওভেনে ছিল সেই সংখ্যাটি নেয় এবং আগের কাজের মিনিটে প্রত্যাশিত ওভেনের সময়ের ভিত্তিতে লাসানিয়াকে ওভেনে আরও কত মিনিট থাকতে হবে তা রিটার্ন করে।
(remaining-time 30)
;;=> 10
prep-time ফাংশনটি ডিফাইন করুন, যা আর্গুমেন্ট হিসেবে লাসানিয়ায় আপনি কতগুলো স্তর যোগ করেছেন সেই সংখ্যাটি নেয় এবং লাসানিয়া প্রস্তুত করতে আপনার কত মিনিট লেগেছে তা রিটার্ন করে, ধরে নিয়ে যে প্রতিটি স্তর প্রস্তুত করতে আপনার ২ মিনিট লাগে।
(prep-time 2)
;;=> 4
total-time ফাংশনটি ডিফাইন করুন, যা দুটি আর্গুমেন্ট নেয়: প্রথম আর্গুমেন্টটি হলো লাসানিয়ায় আপনি কতগুলো স্তর যোগ করেছেন সেই সংখ্যা, আর দ্বিতীয় আর্গুমেন্টটি হলো লাসানিয়া কত মিনিট ধরে ওভেনে আছে সেই সংখ্যা। ফাংশনটি রিটার্ন করবে লাসানিয়া রান্না করতে আপনার মোট কত মিনিট লেগেছে, যা হলো মিনিটে প্রস্তুতির সময় এবং এই মুহূর্তে লাসানিয়া ওভেনে যত মিনিট কাটিয়েছে তার যোগফল।
(total-time 3 20)
;;=> 26
Exercism-এ সাইন আপ করুন, Clojure ট্র্যাকের 12টি কনসেপ্ট105টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।