Nil একটি ইংরেজি শব্দ, যার অর্থ "কিছুই না" বা "শূন্য"। Elixir-এ nil একটি বিশেষ মান, যা একটি মানের অনুপস্থিতি বোঝায়।
# I do not have a favorite color
favorite_color = nil
অন্য প্রোগ্রামিং ভাষায় null বা none মান একই ধরনের ভূমিকা পালন করতে পারে।
cond ছাড়াও Elixir আরেকটি ম্যাক্রো দেয়, if/2, যা কেবল একটি শর্ত যাচাই করতে হলে কাজে লাগে।
if/2 একটি শর্ত আর দুটি অপশন নেয়। শর্তটি ট্রুথি হলে এটি প্রথম অপশনটি রিটার্ন করে, আর শর্তটি ফলসি হলে দ্বিতীয়টি।
age = 15
if age >= 16 do
"You are allowed to drink beer in Germany."
else
"No beer for you!"
end
# => "No beer for you!"
একটি if এক্সপ্রেশন এক লাইনেও লেখা সম্ভব। শর্তের পরের কমাটি লক্ষ্য করুন।
if age > 16, do: "beer", else: "no beer"
এই সিনট্যাক্স খুব ছোট এক্সপ্রেশনের জন্য কাজে লাগে, তবে এক্সপ্রেশনটি এক লাইনে না ধরলে এটি এড়িয়ে চলা উচিত।
Elixir-এ বুলিয়ান প্রেক্ষাপটে (যেমন একটি if এক্সপ্রেশন) থাকা সব ডেটা টাইপ ট্রুথি বা ফলসি মানে মূল্যায়িত হয়। false আর nil ছাড়া বাকি সব ডেটাকেই ট্রুথি ধরা হয়। বিশেষ করে খালি স্ট্রিং, ইন্টিজার 0, আর খালি অ্যারে, সবই Elixir-এ ট্রুথি হিসেবে গণ্য হয়।
এই অনুশীলনীতে আপনি কারখানার কর্মীদের জন্য নামের ব্যাজ প্রিন্ট করার কোড লিখবেন। কর্মীদের একটি ID, একটি নাম ও ডিপার্টমেন্টের নাম থাকে। কর্মীদের ব্যাজের লেবেলগুলো নিচের ফরম্যাটে তৈরি হয়: "[id] - name - DEPARTMENT".
NameBadge.print/3 ফাংশনটি ইমপ্লিমেন্ট করুন। এটি প্যারামিটার হিসেবে একটি id, একটি নাম ও একটি ডিপার্টমেন্ট নেবে। এটি ব্যাজের লেবেলটি রিটার্ন করবে, যেখানে ডিপার্টমেন্টের নামটি থাকবে বড় হাতের অক্ষরে।
NameBadge.print(67, "Katherine Williams", "Strategic Communication")
# => "[67] - Katherine Williams - STRATEGIC COMMUNICATION"
কম্পিউটার সিস্টেমের একটি খুঁতের কারণে, নতুন কর্মীরা কারখানায় কাজ শুরু করার সময় মাঝে মাঝে তখনও কোনো ID পায় না। যেহেতু ব্যাজ বাধ্যতামূলক, তাই তারা ID প্রিফিক্স ছাড়া একটি সাময়িক ব্যাজ পাবে।
NameBadge.print/3 ফাংশনটি এক্সটেন্ড করুন। id না থাকলে এটি id ছাড়াই একটি ব্যাজ প্রিন্ট করবে।
NameBadge.print(nil, "Robert Johnson", "Procurement")
# => "Robert Johnson - PROCUREMENT"
কারখানার মালিককেও সব সময় ব্যাজ পরে থাকতে হয়। তবে মালিকের কোনো ডিপার্টমেন্ট থাকে না। এক্ষেত্রে লেবেলে ডিপার্টমেন্টের নামের বদলে "OWNER" প্রিন্ট হবে।
NameBadge.print/3 ফাংশনটি এক্সটেন্ড করুন। ডিপার্টমেন্ট না থাকলে ধরে নিন ব্যাজটি কোম্পানির মালিকের।
NameBadge.print(204, "Rachel Miller", nil)
# => "[204] - Rachel Miller - OWNER"
মনে রাখবেন, মালিক একইসাথে নতুন কর্মীও হতে পারেন।
NameBadge.print(nil, "Rachel Miller", nil)
# => "Rachel Miller - OWNER"
Exercism-এ সাইন আপ করুন, Elixir ট্র্যাকের 58টি কনসেপ্ট168টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।