একটি টাইপ তখনই জেনেরিক টাইপ হয়, যখন এটি টাইপ প্যারামিটার ব্যবহার করে যেকোনো টাইপের মান ধারণ করতে পারে।
উদাহরণস্বরূপ, এই Box টাইপটির a টাইপ প্যারামিটার রয়েছে (ছোট হাতের অক্ষরে লেখা)।
pub type Box(a) {
Box(a)
}
a টাইপ প্যারামিটারটি যেকোনো টাইপের জন্য একটি প্লেসহোল্ডার, তাই Box স্ট্রিং, ইন্টিজার বা অন্য যেকোনো টাইপের সাথে ব্যবহার করা যায়।
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
কমা দিয়ে আলাদা করে একটি টাইপে একাধিক টাইপ প্যারামিটার থাকতে পারে।
pub type Pair(a, b) {
Pair(a, b)
}
টাইপ প্যারামিটার ফাংশনের আর্গুমেন্টেও ব্যবহার করা যায়।
এই ফাংশনটি a টাইপের একটি মান নেয় এবং এমন একটি ফাংশনকে দুইবার কল করে, যেটি একটি a নেয় এবং একটি b রিটার্ন করে।
pub fn twice(value: a, f: fn(a) -> b) -> b {
f(value)
f(value)
}
// The type is fn(String, fn(String) -> Nil) -> Nil
twice("Hello, Joe!", io.println)
এই অনুশীলনীতে আপনি কিছু ট্রেজার রাখার জন্য একটি জেনেরিক (/ জাদুকরী!) TreasureChest লিখবেন।
একটি মাত্র ভ্যারিয়েন্টসহ একটি TreasureChest কাস্টম টাইপ ডিফাইন করুন।
ভ্যারিয়েন্টটির সাথে একটি অ্যাসোসিয়েটেড String মান থাকবে, যা দিয়ে ট্রেজার চেস্টের পাসওয়ার্ড রাখা হবে।
ভ্যারিয়েন্টটির সাথে একটি অ্যাসোসিয়েটেড জেনেরিক মানও থাকবে, যা দিয়ে ট্রেজারটি রাখা হবে। এই মানটি জেনেরিক, তাই ট্রেজার যেকোনো কিছু হতে পারে।
দুটি ভ্যারিয়েন্টসহ একটি UnlockResult কাস্টম টাইপ ডিফাইন করুন।
প্রথম ভ্যারিয়েন্টটির নাম হবে Unlocked, আর এতে একটি জেনেরিক মান থাকবে, যা দিয়ে ট্রেজারটি রাখা হবে।
দ্বিতীয় ভ্যারিয়েন্টটির নাম হবে WrongPassword, এতে কোনো মান থাকে না।
এই ফাংশনটি দুটি প্যারামিটার নেবে
TreasureChest জেনেরিক কাস্টম টাইপString (পাসওয়ার্ড চেষ্টা করার জন্য)এই ফাংশনটি দেওয়া পাসওয়ার্ডটি TreasureChest-এ থাকা String-এর সাথে মিলিয়ে দেখবে।
ফাংশনটি একটি UnlockResult রিটার্ন করবে।
পাসওয়ার্ড মিলে গেলে TreasureChest থেকে পাওয়া জেনেরিক মানসহ (ট্রেজারটি!) Unlocked রিটার্ন করুন।
পাসওয়ার্ড না মিললে WrongPassword রিটার্ন করুন।
Exercism-এ সাইন আপ করুন, Gleam ট্র্যাকের 33টি কনসেপ্ট122টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।