Gleam-এ ওপেক টাইপ হলো এমন কাস্টম টাইপ, যেখানে টাইপটি যে মডিউল ডিফাইন করে, কেবল সেই মডিউলই ওই টাইপের মান তৈরি করতে বা প্যাটার্ন ম্যাচ করতে পারে। নির্দিষ্ট একটি উপায়ে ব্যবহার হওয়া উচিত এমন টাইপ বানানোর জন্য এটি কাজে লাগে।
ওপেক টাইপ ডিফাইন করা হয় opaque কিওয়ার্ড দিয়ে।
pub opaque type PositiveInt {
PositiveInt(inner: Int)
}
এই PositiveInt টাইপটি ব্যবহার করা হয় এমন জায়গায়, যেখানে একটি int দরকার, কিন্তু সেটি শূন্য বা তার বেশি হতে হবে। সাধারণ Gleam Int এখানে ব্যবহার করা যেত না, কারণ সেগুলো ঋণাত্মকও হতে পারে।
এই টাইপটি যে মডিউল ডিফাইন করে, সেই মডিউল ভেতরের int মানটি পাওয়ার জন্য একটি ফাংশন ডিফাইন করতে পারে, আর PositiveInt টাইপ তৈরি করার জন্য আরেকটি ফাংশন, যা মানটি ধনাত্মক না হলে একটি এরর রিটার্ন করবে।
pub fn from_int(i: Int) -> Result(PositiveInt, String) {
case i {
_ if i < 0 -> Error("Value must be positive")
_ -> Ok(PositiveInt(i))
}
}
pub fn to_int(i: PositiveInt) -> Int {
i.inner
}
এই API দিয়ে অন্য মডিউলগুলো ঋণাত্মক মান দিয়ে একটি PositiveInt তৈরি করতে পারে না, তাই যে ফাংশনই একটি PositiveInt নেয়, সে নিশ্চিত থাকতে পারে যে মানটি ধনাত্মক।
সূক্ষ্মদৃষ্টিসম্পন্ন শিক্ষার্থীরা লক্ষ্য করেছেন যে আগের অনুশীলনীর TreasureChest টাইপটি তেমন নিরাপদ ছিল না!
আপনি যদি get_treasure ফাংশনটি ব্যবহার করতেন, তাহলে আপনাকে পাসওয়ার্ড দিতে হতো, কিন্তু আপনি পাসওয়ার্ড না জেনেও ট্রেজার পেতে TreasureChest টাইপটি ডিস্ট্রাকচার করতে পারতেন।
চলুন একটি অপেক টাইপ ব্যবহার করে সেটি ঠিক করি।
TreasureChest অপেক টাইপটি ডিফাইন করুন।TreasureChest-এ দুটি ফিল্ড থাকে:
String।TreasureChest টাইপটি অবশ্যই অপেক হতে হবে।
create ফাংশনটি ডিফাইন করুন।এই ফাংশনটি দুটি আর্গুমেন্ট নেয়:
String।ফাংশনটি পাসওয়ার্ড এবং মান ধারণকারী একটি TreasureChest রিটার্ন করে।
যদি পাসওয়ার্ডটি ৮ অক্ষরের চেয়ে ছোট হয়, তাহলে ফাংশনটি Password must be at least 8 characters long এই বলে একটি এরর রিটার্ন করবে।
open ফাংশনটি ডিফাইন করুন।এই ফাংশনটি দুটি আর্গুমেন্ট নেয়:
TreasureChest।String।যদি পাসওয়ার্ডটি TreasureChest-এর পাসওয়ার্ডের সাথে মিলে যায়, তাহলে ফাংশনটি ট্রেজারটি রিটার্ন করবে, অন্যথায় এটি Incorrect password এই বলে একটি এরর রিটার্ন করবে।
Exercism-এ সাইন আপ করুন, Gleam ট্র্যাকের 33টি কনসেপ্ট122টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।