Gleam-এ নতুন ডেটা টাইপ ডিফাইন করার উপায়ই হলো কাস্টম টাইপ। এগুলোর একাধিক ভ্যারিয়েন্ট থাকতে পারে, প্রতিটির নিজস্ব নাম থাকে।
pub type Season {
Spring
Summer
Autumn
Winter
}
কাস্টম টাইপের প্রতিটি কেস ইচ্ছেমতো কিছু ডেটা ধারণ করতে পারে, আর ভিন্ন ভিন্ন কেসে ভিন্ন ভিন্ন টাইপের ডেটা থাকতে পারে। কোনো ভ্যারিয়েন্ট যখন ডেটা ধারণ করে, তখন তাকে রেকর্ড বলা হয়।
pub type Number {
SomeInt(Int)
SomeFloat(Float)
Invalid
}
কোনো নির্দিষ্ট কেসের জন্য মান তৈরি করা যায় তার নাম উল্লেখ করে, যদি তাতে অতিরিক্ত কোনো ডেটা না থাকে (Spring); আর ডেটা থাকলে সেটিকে ফাংশন হিসেবে কল করে (SomeInt(2))।
let spring = Spring
let integerTwo = SomeInt(2)
কাস্টম টাইপ, Gleam-এর বাকি সবকিছুর মতোই, স্ট্রাকচারাল ইকুয়ালিটি ধারণ করে, অর্থাৎ একই ভ্যারিয়েন্টের এবং একই ডেটার দুটি মান সমতুল্য।
Spring == Spring // -> True
Spring == Autumn // -> False
SomeInt(2) == SomeInt(2) // -> True
SomeInt(2) == SomeFloat(2.0) // -> False
কেস এক্সপ্রেশন ব্যবহার করে কাস্টম টাইপের ভ্যারিয়েন্টের ওপর প্যাটার্ন ম্যাচ করা যায়।
import gleam/int
import gleam/float
pub fn describe(flexible_number: Number) -> String {
case flexible_number {
SomeFloat(f) -> "Float: " <> float.to_string(f)
SomeInt(i) -> "Int: " <> int.to_string(i)
Invalid -> "Neither a float nor an int"
}
}
এই অনুশীলনীতে ভ্যালেন্টাইনস ডে, আর আপনি ও আপনার সঙ্গী একসাথে ভালো কিছু করার পরিকল্পনা করছেন। আপনার সঙ্গীর মাথায় অনেক রকম আইডিয়া আছে, আর কোন কাজটি করবেন তা বেছে নেওয়ার জন্য তিনি এখন আপনাকে সেই আইডিয়াগুলো রেট করতে বলেছেন।
আপনার সঙ্গী নিচের আইডিয়াগুলো প্রস্তাব করেছেন:
আপনার ভ্যালেন্টাইনস ডে-র অ্যাক্টিভিটি বেছে নিতে সাহায্য করার জন্য আপনার সামনে ছয়টি কাজ আছে।
আপনার সঙ্গী যে আইডিয়াই প্রস্তাব করুন না কেন, আপনি তিনটি অপশনের একটি দিয়ে উত্তর দেন: yes, no বা maybe।
এই অপশনগুলোকে নিচের তিনটি কেস হিসেবে প্রকাশ করতে Approval কাস্টম টাইপ ডিফাইন করুন: Yes, No এবং Maybe।
আপনার সঙ্গী দুটি সম্ভাব্য রেস্তোরাঁ বেছে নিয়েছেন: একটি কোরিয়ান কিউজিনের, আর অন্যটি তুর্কি কিউজিনের।
এই কিউজিনগুলোকে নিচের দুটি কেস হিসেবে প্রকাশ করতে Cuisine কাস্টম টাইপ ডিফাইন করুন: Korean এবং Turkish।
বেছে নেওয়ার জন্য অনেক সিনেমা আছে, তাই পছন্দটা একটু কমাতে আপনার সঙ্গী সিনেমাগুলোর জনরাও লিখে দিয়েছেন।
নিচের জনরাগুলোকে কেস হিসেবে প্রকাশ করতে Genre কাস্টম টাইপ ডিফাইন করুন: Crime, Horror, Romance এবং Thriller।
যেমনটা বলা হলো, আপনার সঙ্গী পাঁচটি আলাদা অ্যাক্টিভিটি নিয়ে ভেবেছেন: বোর্ড গেম খেলা, আরাম করা, সিনেমা দেখা, রেস্তোরাঁয় যাওয়া এবং হাঁটতে যাওয়া।
এই অ্যাক্টিভিটিগুলোকে প্রকাশ করতে Activity কাস্টম টাইপ ডিফাইন করুন:
BoardGame: কোনো অ্যাসোসিয়েটেড ডেটা নেই।Chill: কোনো অ্যাসোসিয়েটেড ডেটা নেই।Movie: অ্যাসোসিয়েটেড ডেটা হিসেবে এর Genre আছে।Restaurant: অ্যাসোসিয়েটেড ডেটা হিসেবে এর Cuisine আছে।Walk: হাঁটার কিলোমিটার সংখ্যা বোঝানো একটি Int অ্যাসোসিয়েটেড ডেটা হিসেবে আছে।অবশেষে, আপনার সঙ্গীর আইডিয়াগুলো রেট করার জন্য আপনি তৈরি। আপনার সঙ্গীর আইডিয়া নিয়ে আপনার অনুভূতি এমন:
উপরের অনুভূতিগুলোর ভিত্তিতে একটি Activity মান নিয়ে Approval রিটার্ন করে এমন rate_activity নামের একটি ফাংশন ইমপ্লিমেন্ট করুন:
rate_activity(Restaurant(Turkish))
// -> Maybe
Exercism-এ সাইন আপ করুন, Gleam ট্র্যাকের 33টি কনসেপ্ট122টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।