Gleam-এ দুই ধরনের সংখ্যা আছে: ইন্ট এবং ফ্লোট।
ইন্ট হলো পূর্ণসংখ্যা।
let integer = 3
// -> 3
Gleam-এ বেশ কিছু অপারেটর আছে যেগুলো ইন্ট নিয়ে কাজ করে।
1 + 1 // -> 2
5 - 1 // -> 4
5 / 2 // -> 2
3 * 3 // -> 9
5 % 2 // -> 1
2 > 1 // -> True
2 < 1 // -> False
2 >= 1 // -> True
2 <= 1 // -> False
ফ্লোট হলো এমন সংখ্যা যার দশমিক চিহ্নের পরে এক বা একাধিক অঙ্ক থাকে।
let float = 3.45
// -> 3.45
ফ্লোটেরও নিজস্ব কিছু অপারেটর আছে।
1.0 +. 1.4 // -> 2.4
5.0 -. 1.5 // -> 3.5
5.0 /. 2.0 // -> 2.5
3.0 *. 3.1 // -> 9.3
2.0 >. 1.0 // -> True
2.0 <. 1.0 // -> False
2.0 >=. 1.0 // -> True
2.0 <=. 1.0 // -> False
Gleam কোড মডিউলে সাজানো থাকে, আর প্রতিটি ফাইল হলো একটি Gleam মডিউল।
এখন পর্যন্ত আমরা pub fn সিনট্যাক্স দিয়ে ফাংশন লিখেছি, যা এমন একটি ফাংশন ডিফাইন করে যেটি অন্য মডিউলের কাছে প্রকাশ্যে ব্যবহারযোগ্য। fn দিয়ে ডিফাইন করা ফাংশন যে মডিউলে ডিফাইন করা হয়েছে তার কাছে প্রাইভেট থাকে এবং অন্য মডিউল সেগুলো ব্যবহার করতে পারে না।
// This function is public
pub fn add(x, y) {
x + y
}
// This function is private
fn subtract(x, y) {
x - y
}
Gleam মডিউলের নাম থাকে, আর সেই নাম নির্ধারিত হয় src বা test ডিরেক্টরির ভেতরে তার ফাইল পাথের ভিত্তিতে।
যেমন, src\geometry\rectangle.gleam (Windows-এ) বা src/geometry/rectangle.gleam (UNIX-সদৃশ অপারেটিং সিস্টেমে) তে ডিফাইন করা একটি মডিউলের নাম হবে geometry/rectangle।
অন্য মডিউলে ডিফাইন করা ফাংশন অ্যাক্সেস করা হয় ইমপোর্টের মাধ্যমে। কোনো মডিউল ইমপোর্ট করলে সেই মডিউলটি যে ফাংশনগুলো এক্সপোজ করেছে সেগুলো ব্যবহারযোগ্য হয়ে যায়। কিন্তু সেগুলো কীভাবে অ্যাক্সেস করা হবে, তা নির্ভর করে মডিউলটি কীভাবে ইমপোর্ট করা হয়েছে তার ওপর।
কোয়ালিফাইড ইমপোর্ট হলো ডিফল্ট, আর এমন মডিউলের ভেতরের একটি ফাংশন অ্যাক্সেস করা হয় (যেমন gleam/list মডিউলের map ফাংশন) মডিউলের নাম প্রিফিক্স করে (list.map)।
// Import the int module
import gleam/int
pub fn run(x: Int) -> String {
// Use the to_string function from the int module
int.to_string(x)
}
ডিফল্টভাবে মডিউলটিকে বোঝাতে যে নাম ব্যবহার করা হয় সেটি মডিউল নামের শেষ অংশ, এখানে int, তবে as কিওয়ার্ড ব্যবহার করে এটি বদলানো যায়।
// Import the int module and refer to it as i
import gleam/int as i
pub fn run(x: Int) -> String {
i.to_string(x)
}
আনকোয়ালিফাইড ইমপোর্ট সেই মডিউলের এক্সপোজ করা ফাংশনগুলো প্রিফিক্স ছাড়াই সরাসরি অ্যাক্সেস করার সুযোগ দেয়।
// Import the to_string function from the int module
import gleam/int.{to_string}
pub fn run(x: Int) -> String {
to_string(x)
}
কোয়ালিফাইড ইমপোর্টই বেশি পছন্দনীয়, কারণ এতে পাঠকের কাছে স্পষ্ট হয় একটি ফাংশন কোথা থেকে আসছে, আর নামের সংঘর্ষ এড়ানো যায়।
Gleam-এ একটি সমৃদ্ধ ও ভালোভাবে ডকুমেন্টেড স্ট্যান্ডার্ড লাইব্রেরি আছে। এর ডকুমেন্টেশন অনলাইনে hexdocs.pm/gleam_stdlib ঠিকানায় পাওয়া যায়। এই লিংকটি কোথাও সেভ করে রাখুন, আপনি এটি অনেকবার ব্যবহার করবেন!
বেশিরভাগ বিল্ট-ইন ডেটা টাইপের জন্য একটি করে সংশ্লিষ্ট মডিউল আছে যা সেই ডেটা টাইপ নিয়ে কাজ করার ফাংশন দেয়, যেমন ইন্টের জন্য gleam/int মডিউল, স্ট্রিংয়ের জন্য gleam/string মডিউল, অ্যারের জন্য gleam/list মডিউল ইত্যাদি।
এই অনুশীলনীতে আপনি বাইক ও যন্ত্রাংশের অনলাইন দোকান Betty's Bike Shop-কে সাহায্য করার জন্য কিছু কোড লিখবেন। আপনার সামনে তিনটি কাজ, যেগুলোর লক্ষ্য ওয়েবসাইটে বাইক ও যন্ত্রাংশের দাম সঠিকভাবে দেখানো।
pence_to_pounds ফাংশনটি এক্সপোর্ট করুনআপনার সহকর্মী ইতিমধ্যে মডিউলটির কাঠামো, অর্থাৎ অসম্পূর্ণ pence_to_pounds ও pounds_to_string ফাংশন দুটি লিখে রেখেছেন।
তবে তিনি pence_to_pounds ফাংশনটি এক্সপোর্ট করতে ভুলে গেছেন, তাই এখন অন্য কোনো মডিউল বা টেস্ট স্যুট এটি দেখতে পায় না।
pence_to_pounds ফাংশনটি এক্সপোর্ট করুন।
বর্তমানে দামটি পেন্সের একটি ইন্টিজার হিসেবে সংরক্ষিত থাকে (বাইক শপটি যুক্তরাজ্যভিত্তিক)।
ওয়েবসাইটে আমরা দামটি পাউন্ডে দেখাতে চাই, যেখানে 1.00 পাউন্ড সমান 100 পেন্স।
আপনার প্রথম কাজ হলো pence_to_pounds ফাংশনটি ইমপ্লিমেন্ট করা, যা পেন্সের পরিমাণ Int হিসেবে নেয় এবং সেটিকে সমতুল্য পাউন্ডে Float হিসেবে রূপান্তর করে।
এছাড়া ওই ফাংশনের জন্য টাইপ অ্যানোটেশনও যোগ করা উচিত।
pence_to_pounds(106)
// -> 1.06
যেহেতু Betty's Bike Shop-এর বাইকগুলো পাউন্ডে বিক্রি হয়, তাই দামগুলো "£" চিহ্নসহ দেখানো উচিত।
তাই আপনার দ্বিতীয় কাজ হলো pounds_to_string ফাংশনটি ইমপ্লিমেন্ট করা, যা পাউন্ডের একটি পরিমাণ Float হিসেবে নেয় এবং সামনে পাউন্ড চিহ্ন বসিয়ে দামটি একটি String হিসেবে রিটার্ন করে।
ব্যবহার করার আগে gleam/float ও gleam/string মডিউল দুটি ইমপোর্ট করা উচিত।
এছাড়া pounds_to_string-এর জন্য টাইপ অ্যানোটেশনও ডিফাইন করা উচিত।
pounds_to_string(1.06)
// -> "£1.06"
Exercism-এ সাইন আপ করুন, Gleam ট্র্যাকের 33টি কনসেপ্ট122টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।