F#-এর char টাইপ হলো একটি ১৬ বিটের মান, যা টেক্সটের ক্ষুদ্রতম অ্যাড্রেসযোগ্য উপাদান প্রকাশ করে এবং ডিফল্টভাবে অপরিবর্তনীয়।
সিঙ্গেল কোট দিয়ে char-কে লিটারাল হিসেবে ডিফাইন করা যায়:
let ch = 'A'
// => val ch: char = 'A'
স্ট্রিং হলো char-এর একটি ক্রম।
শূন্য-ভিত্তিক ইনডেক্সিং দিয়ে একটি স্ট্রিং থেকে আলাদা একটি char পাওয়া যায়:
"Exercism"[4] // => 'c'
একটি স্ট্রিংয়ের উপর ইটারেশন করলে প্রতিটি ধাপে একটি char পাওয়া যায়।
পরের উদাহরণে সুবিধার জন্য একটি হায়ার অর্ডার ফাংশন আর একটি অ্যানোনিমাস ফাংশন ব্যবহার করা হয়েছে। এগুলো নিয়ে সিলেবাসে পরে বিস্তারিত আলোচনা করা হবে, তবে আপাতত এগুলো মূলত একটি স্ট্রিংয়ের ক্যারেক্টারগুলোর উপর লুপ লেখার একটি সংক্ষিপ্ত উপায়।
Seq.map (fun c -> c, int c) "F#" // => [('F', 70); ('#', 35)]
উপরের উদাহরণে দেখা যাচ্ছে, একটি char-কে তার int মানে কাস্ট করা যায়।
অন্য স্ক্রিপ্টের বেলাতেও এটি কাজ করে (অন্তত কিছু ক্ষেত্রে):
Seq.map (fun c -> c, int c) "東京" // => [('東', 26481); ('京', 20140)]
ক্যারেক্টার তুলনা করার সময় অন্তর্নিহিত Int16-ই ব্যবহৃত হয়:
'A' < 'D' // => true
এছাড়াও, একটি int-কে char-এ কাস্ট করা যায়:
char 77 // => 'M'
System.Char লাইব্রেরিতে একটি .NET ভাষার কাছে প্রত্যাশিত সব মেথড রয়েছে, যেমন বড় হাতের ও ছোট হাতের অক্ষরে রূপান্তর:
'a' |> System.Char.ToUpper // => 'A'
'Q' |> System.Char.ToLower // => 'q'
এই অনুশীলনীতে আপনি একজন ডেভেলপারকে আইডেন্টিফায়ার নাম পরিষ্কার করতে সাহায্য করার জন্য কিছু ইউটিলিটি রুটিনের একটি আংশিক সেট তৈরি করবেন।
৬টি টাস্কে আপনি ধীরে ধীরে ফাংশন দুটি গড়ে তুলবেন: transform, যা একক ক্যারেক্টার রূপান্তর করে, এবং clean, যা স্ট্রিং রূপান্তর করে।
একটি বৈধ আইডেন্টিফায়ারে শূন্য বা তার বেশি অক্ষর, আন্ডারস্কোর, হাইফেন, প্রশ্নচিহ্ন এবং ইমোজি থাকতে পারে।
clean ফাংশনে যদি একটি খালি স্ট্রিং পাস করা হয়, তাহলে একটি খালি স্ট্রিং রিটার্ন করা উচিত।
যেকোনো হাইফেনকে আন্ডারস্কোর দিয়ে প্রতিস্থাপন করার জন্য transform ফাংশনটি তৈরি করুন।
transform '-' // => "_"
সব হোয়াইটস্পেস ক্যারেক্টার মুছে ফেলুন। এর মধ্যে শুরু ও শেষের হোয়াইটস্পেসও অন্তর্ভুক্ত।
transform ' ' // => ""
camelCase-কে kebab-case-এ রূপান্তর করতে transform ফাংশনটি পরিবর্তন করুন
transform 'D' // => "-d"
যে ক্যারেক্টারগুলো সংখ্যা, সেগুলো বাদ দিতে transform ফাংশনটি পরিবর্তন করুন।
transform '7' // => ""
'α' থেকে 'ω' পরিসরের যেকোনো গ্রিক অক্ষর প্রতিস্থাপন করতে transform ফাংশনটি পরিবর্তন করুন।
transform 'β' // => "?"
সম্পূর্ণ একটি স্ট্রিং-এর উপর এই অপারেশনগুলো প্রয়োগ করতে clean ফাংশনটি তৈরি করুন।
নিয়মের বাইরে পড়ে এমন ক্যারেক্টারগুলো অপরিবর্তিতভাবেই পাস হয়ে যাবে।
clean " a2b Cd-ω😀 " // => "ab-cd_?😀"
এই বিষয়টি পাঠ্যক্রমে পরে বিস্তারিতভাবে আলোচনা করা হবে।
আপাতত জেনে রাখা কাজে লাগতে পারে যে String.collect নামে একটি হায়ার অর্ডার ফাংশন আছে, যা আপনার দেওয়া একটি ফাংশন ব্যবহার করে char-এর একটি কালেকশনকে স্ট্রিং-এ রূপান্তর করে।
let transform ch = $"{ch}_"
String.collect transform "abc" // => "a_b_c_"
Exercism-এ সাইন আপ করুন, F# ট্র্যাকের 18টি কনসেপ্ট148টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।