চারলিস্ট তৈরি করা হয় ~c সিগিল ব্যবহার করে।
~c"hello"
মনে রাখবেন, Elixir-এর পুরনো ভার্সনে চারলিস্টকে একক উদ্ধৃতি চিহ্ন দিয়ে 'hello' হিসেবে লেখা হয়।
দেখতে এগুলো স্ট্রিংয়ের সাথে খুবই মিল হলেও, এই দুটি ডেটা টাইপ আসলে একে অপরের থেকে বেশ আলাদা। একটি চারলিস্ট হলো ইন্টিজারের একটি অ্যারে। এই ইন্টিজারগুলো একটি নির্দিষ্ট ক্যারেক্টারের Unicode মান প্রকাশ করে, যাকে কোড পয়েন্টও বলা হয়।
[65, 66, 67]
# => ~c"ABC"
কোনো ক্যারেক্টারের আগে ? বসালে তার কোড পয়েন্ট পাওয়া যায়।
?A
# => 65
[?:, ?)]
# => ~c":)"
যেহেতু চারলিস্ট অ্যারে, তাই অন্য যেকোনো অ্যারের মতোই রিকার্সন আর প্যাটার্ন ম্যাচিং ব্যবহার করে এগুলো নিয়ে কাজ করা যায়।
[first_letter | _] = ~c"cat"
first_letter
# => 99
++ ব্যবহার করে দুটি অ্যারে জোড়া লাগাতে পারেন।
~c"hi" ++ ~c"!"
# => ~c"hi!"
প্রথম অ্যারেটি যত বড় হবে, জোড়া লাগানো তত ধীর হবে, তাই যেকোনো দৈর্ঘ্যের অ্যারের শেষে বারবার যোগ করা এড়িয়ে চলুন।
case হলো একটি কন্ট্রোল ফ্লো স্ট্রাকচার, যা দিয়ে একটি নির্দিষ্ট মানকে অনেকগুলো প্যাটার্নের সাথে তুলনা করা যায়। case এক্সপ্রেশনের ক্লজগুলো উপর থেকে নিচে যাচাই করা হয়, যতক্ষণ না কোনো মিল পাওয়া যায়।
age = 15
case age do
0 -> ~c"infant"
age when age < 4 -> ~c"baby"
age when age < 13 -> ~c"child"
age when age < 18 -> ~c"teenager"
_ -> ~c"adult"
end
# => ~c"teenager"
আপনি জার্মানির মিউনিখে একটি বড় কোম্পানির সিস্টেম অ্যাডমিনিস্ট্রেটর হিসেবে কাজ করছেন। আপনার একটি দায়িত্ব হলো ইমেইল অ্যাকাউন্ট ব্যবস্থাপনা।
মানুষের কাছ থেকে আপনি অভিযোগ শুনছেন যে তারা মিস্টার মুলারকে ইমেইল লিখতে পারছেন না। আপনি দ্রুত বুঝতে পারেন যে কোম্পানির বেশিরভাগ মানুষ একটি পুরনো ইমেইল ক্লায়েন্ট ব্যবহার করেন, যা নন-ASCII ক্যারেক্টারের কারণে müller@firma.de-কে বৈধ ইমেইল হিসেবে চিনতে পারে না।
মানুষকে তাদের প্রিয় পুরনো ইমেইল ক্লায়েন্ট ছাড়তে বলাটা একটা হেরে যাওয়া লড়াই, তাই আপনি সিদ্ধান্ত নেন যে সব ইমেইল অ্যাকাউন্টের জন্য স্যানিটাইজড অ্যালিয়াস তৈরি করবেন।
sanitize/1 ফাংশনটি ইমপ্লিমেন্ট করুন। এটি ইনপুট হিসেবে একটি ইউজারনেম চারলিস্ট নেবে এবং ছোট হাতের অক্ষর ছাড়া বাকি সব ক্যারেক্টার সরিয়ে ফেলা ইউজারনেমটি রিটার্ন করবে।
Username.sanitize(~c"schmidt1985")
# => ~c"schmidt"
sanitize/1 ফাংশনটি এক্সটেন্ড করুন। এটি ইউজারনেম থেকে আন্ডারস্কোর সরাবে না।
Username.sanitize(~c"mark_fischer$$$")
# => ~c"mark_fischer"
জার্মান বর্ণমালায় ৪টি নন-ASCII ক্যারেক্টার আছে, এবং প্রতিটিরই কমনভাবে স্বীকৃত ASCII বিকল্প রয়েছে।
| জার্মান ক্যারেক্টার | ASCII বিকল্প |
|---|---|
| ä | ae |
| ö | oe |
| ü | ue |
| ß | ss |
sanitize/1 ফাংশনটি এক্সটেন্ড করুন। এটি টেবিল অনুযায়ী জার্মান ক্যারেক্টার প্রতিস্থাপন করবে। আপনি নিশ্চিন্তে ধরে নিতে পারেন যে সব ইউজারনেম আগে থেকেই ছোট হাতের অক্ষরে লেখা।
Username.sanitize(~c"cäcilie_weiß")
# => ~c"caecilie_weiss"
Exercism-এ সাইন আপ করুন, Elixir ট্র্যাকের 58টি কনসেপ্ট168টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।