কোনো কাস্টম টাইপের ভ্যারিয়েন্ট যখন ডেটা ধারণ করে, তখন তাকে রেকর্ড বলা হয়, আর ভেতরে থাকা প্রতিটি মান থাকে একটি ফিল্ড-এ।
pub type Rectangle {
Rectangle(
Float, // The first field
Float, // The second field
)
}
পড়ার সুবিধার জন্য Gleam ফিল্ডগুলোকে একটি নাম দিয়ে লেবেল করার সুযোগ দেয়।
pub type Rectangle {
Rectangle(
width: Float,
height: Float,
)
}
লেবেল ব্যবহার করে রেকর্ডের কনস্ট্রাক্টরে যেকোনো ক্রমে আর্গুমেন্ট দেওয়া যায়।
let a = Rectangle(height: 10.0, width: 20.0)
let b = Rectangle(width: 20.0, height: 10.0)
a == b
// -> True
কোনো কাস্টম টাইপে যখন কেবল একটি ভ্যারিয়েন্ট থাকে, তখন রেকর্ডের ফিল্ডগুলো পেতে .label অ্যাক্সেসর সিনট্যাক্স ব্যবহার করা যায়।
let rect = Rectangle(height: 10.0, width: 20.0)
rect.height // -> 10.0
rect.width // -> 20.0
কোনো কাস্টম টাইপে একটি মাত্র ভ্যারিয়েন্ট থাকলে রেকর্ড আপডেট সিনট্যাক্স ব্যবহার করে বিদ্যমান রেকর্ড থেকে নতুন একটি রেকর্ড তৈরি করা যায়, তবে কিছু ফিল্ড নতুন মান দিয়ে বদলে দেওয়া হয়।
let rect = Rectangle(height: 10.0, width: 20.0)
let tall_rect = Rectangle(..rect, height: 50.0)
tall_rect.height // -> 50.0
tall_rect.width // -> 20.0
রেকর্ড থেকে মান বের করতে প্যাটার্ন ম্যাচিং করার সময়ও লেবেল ব্যবহার করা যায়।
pub fn is_tall(rect: Rectangle) {
case rect {
Rectangle(height: h, width: _) if h >. 20.0 -> True
_ -> False
}
}
কেবল কিছু ফিল্ডে ম্যাচ করতে চাইলে বাকি ফিল্ডগুলো উপেক্ষা করতে স্প্রেড অপারেটর .. ব্যবহার করা যায়।
pub fn is_tall(rect: Rectangle) {
case rect {
Rectangle(height: h, ..) if h >. 20.0 -> True
_ -> False
}
}
এই অনুশীলনীতে আপনি একজন বড় ক্রীড়াপ্রেমী, এবং NBA বাস্কেটবলের প্রতি আপনার নতুন করে টান অনুভব করছেন। NBA বাস্কেটবলে নতুন হওয়ায় আপনি NBA-এর ইতিহাস নিয়ে গভীরে যাচ্ছেন, দল, কোচ আর তাদের জয়-পরাজয়ের পরিসংখ্যান লিখে রাখছেন, এবং একে অন্যের সাথে মিলিয়ে দেখছেন।
যেহেতু এখনো আপনার কোনো প্রিয় দল নেই, তাই কোন নির্দিষ্ট দলকে সমর্থন করবেন সেটা বের করার জন্য আপনি একটি অ্যালগরিদমও বানাবেন।
আপনার নিজস্ব এই root-for-a-team অ্যালগরিদম তৈরি করতে সাহায্য করবে সাতটি কাজ।
নিচের দুটি ফিল্ডসহ Coach রেকর্ডটি ডিফাইন করুন:
name: কোচের নাম, টাইপ String।former_player: কোচ আগে খেলোয়াড় ছিলেন কি না তা নির্দেশ করে, টাইপ Bool।নিচের দুটি ফিল্ডসহ Stats রেকর্ডটি ডিফাইন করুন:
wins: জয়ের সংখ্যা, টাইপ Int।losses: পরাজয়ের সংখ্যা, টাইপ Int।নিচের তিনটি ফিল্ডসহ Team রেকর্ডটি ডিফাইন করুন:
name: দলের নাম, টাইপ String।coach: দলের কোচ, টাইপ Coach।stats: দলের পরিসংখ্যান, টাইপ Stats।create_coach ফাংশনটি ইমপ্লিমেন্ট করুন, যা প্যারামিটার হিসেবে কোচের নাম ও তার পূর্বে খেলোয়াড় থাকার অবস্থা নেয় এবং Coach রেকর্ডটি রিটার্ন করে:
create_coach("Larry Bird", True)
// -> Coach(name: "Larry Bird", former_player: True)
create_stats ফাংশনটি ইমপ্লিমেন্ট করুন, যা প্যারামিটার হিসেবে জয়ের সংখ্যা ও পরাজয়ের সংখ্যা নেয় এবং Stats রেকর্ডটি রিটার্ন করে:
create_stats(58, 24)
// -> Stats(wins: 58, losses: 24)
create_team ফাংশনটি ইমপ্লিমেন্ট করুন, যা প্যারামিটার হিসেবে দলের নাম, কোচ ও রেকর্ড নেয় এবং Team রেকর্ডটি রিটার্ন করে:
let coach = create_coach("Larry Bird", True)
let stats = create_stats(58, 24)
create_team("Indiana Pacers", coach, stats)
// -> Team(
// name: "Indiana Pacers",
// coach: Coach(name: "Larry Bird", FormerPlayer = True),
// stats: Stats(wins: 58, losses: 24),
// )
NBA-এর মালিকেরা অধৈর্য হন, আর আপনি দেখলেন যে খারাপ ফল করলে প্রায়ই কোচ বদলে দেওয়া হয়। replace_coach ফাংশনটি ইমপ্লিমেন্ট করুন, যা প্যারামিটার হিসেবে দল ও তার নতুন কোচ নেয় এবং নতুন কোচসহ দলটি রিটার্ন করে:
let coach = create_coach("Larry Bird", True)
let record = create_stats(58, 24)
let team = create_team("Indiana Pacers", coach, record)
let new_coach = create_coach("Isiah Thomas", True)
replace_coach(team, new_coach)
// -> Team(
// name: "Indiana Pacers",
// coach: Coach(name: "Isiah Thomas", FormerPlayer = True),
// stats: Stats(wins: 58, losses: 24),
// )
পরিসংখ্যান ঘাঁটতে ঘাঁটতে আপনি দল আর তাদের রেকর্ডের তালিকা রাখছেন। মাঝে মাঝে ভুল হয়ে যায় আর তালিকায় একই এন্ট্রি দুবার চলে আসে। is_same_team ফাংশনটি ইমপ্লিমেন্ট করুন, যা দুটি দল নেয় এবং দল দুটি একই হলে True রিটার্ন করে, নাহলে False রিটার্ন করে:
let pacers_coach = create_coach("Larry Bird", True)
let pacers_stats = create_stats(58, 24)
let pacers_team = create_team("Indiana Pacers", pacers_coach, pacers_stats)
let lakers_coach = create_coach("Del Harris", False)
let lakers_stats = create_stats(61, 21)
let lakers_team = create_team("LA Lakers", lakers_coach, lakers_stats)
is_same_team(pacers_team, lakers_team)
// -> False
অনেক দল ও ম্যাচ দেখে আপনি একটি অ্যালগরিদম বের করেছেন। নিচের যেকোনো একটি ট্রু হলে আপনি ওই দলকে সমর্থন করেন:
root_for_team ফাংশনটি ইমপ্লিমেন্ট করুন, যা একটি দল নেয় এবং দলটিকে সমর্থন করা উচিত হলে True রিটার্ন করে, নাহলে False রিটার্ন করে:
let spurs_coach = create_coach("Gregg Popovich", False)
let spurs_stats = create_stats(56, 26)
let spurs_team = create_team("San Antonio Spurs", spurs_coach, spurs_stats)
root_for_team(spurs_team)
// -> True
Exercism-এ সাইন আপ করুন, Gleam ট্র্যাকের 33টি কনসেপ্ট122টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।