ট্র্যাক
/
Cairo
Cairo
/
অনুশীলনী
/
জাদুকরী পরিমাপ
জাদুকরী পরিমাপ

জাদুকরী পরিমাপ

লার্নিং অনুশীলনী

ভূমিকা

Cairo-তে টাইপ কনভার্সনের মাধ্যমে আপনি একটি টাইপ থেকে আরেকটি টাইপে ডেটা রূপান্তর করতে পারেন, যা নমনীয় ও নিরাপদ ডেটা ম্যানিপুলেশন সম্ভব করে।

মূল বিষয়গুলো

Cairo টাইপ কনভার্সনের জন্য বেশ কয়েকটি পদ্ধতি দেয়:

সরাসরি কাস্টিং

সামঞ্জস্যপূর্ণ সংখ্যাগত টাইপের ক্ষেত্রে আপনি সরাসরি কাস্টিং ব্যবহার করতে পারেন:

let small_number: u8 = 42;
let big_number: u32 = small_number.into();

Into ট্রেইট

Into ট্রেইট একটি টাইপ থেকে আরেকটিতে রূপান্তর সক্ষম করে:

let value: u16 = 100;
let converted: u32 = value.into();

TryInto ট্রেইট

ব্যর্থ হতে পারে এমন কনভার্সনের জন্য TryInto ব্যবহার করুন, যা একটি Option রিটার্ন করে:

let large_value: u32 = 70000;
let small_value: Option<u16> = large_value.try_into();

match small_value {
    Option::Some(v) => println!("Converted: {}", v),
    Option::None => println!("Conversion failed"),
}

কাস্টম টাইপ কনভার্সন

আপনি নিজের টাইপের জন্য Into ইমপ্লিমেন্ট করতে পারেন:

#[derive(Drop)]
struct Celsius {
    value: i32,
}

#[derive(Drop)]
struct Fahrenheit {
    value: i32,
}

impl CelsiusIntoFahrenheit of Into<Celsius, Fahrenheit> {
    fn into(self: Celsius) -> Fahrenheit {
        Fahrenheit { value: (self.value * 9) / 5 + 32 }
    }
}

নিরাপত্তার বিবেচনাগুলো

  • কনভার্সন ব্যর্থ হতে পারে এমন ক্ষেত্রে TryInto ব্যবহার করুন (যেমন বড় টাইপ থেকে ছোট টাইপে)
  • কনভার্সন সবসময় সফল হয় এমন ক্ষেত্রে Into ব্যবহার করুন
  • TryInto থেকে আসা Option::None কেসগুলো সবসময় হ্যান্ডেল করুন
  • সাইনড ও আনসাইনড টাইপের মধ্যে রূপান্তর করার সময় ওভারফ্লো ও আন্ডারফ্লো বিবেচনা করুন

নির্দেশনা

অ্যাস্ট্রিড নামের এক দুঃসাহসী আলকেমিস্ট বিভিন্ন জগৎ থেকে সংগৃহীত জাদুকরী পরিমাপ-এককগুলোকে একটি আদর্শ মানে আনতে চাইছেন। কিছু জগৎ সাইনড পরিমাপ ব্যবহার করে (যা ঋণাত্মক হতে পারে), আবার অন্য জগৎগুলো আনসাইনড পরিমাপ ব্যবহার করে (যা সবসময় ধনাত্মক)। তা ছাড়াও, কিছু বিরল উপকরণের জন্য অ্যাস্ট্রিডের কাছে দুটি কাস্টম টাইপ আছে, আর এই টাইপগুলোর মধ্যে সহজে রূপান্তর করার একটি উপায় তার দরকার।

আপনার কাজ হলো সাইনড ও আনসাইনড ইন্টিজারের মধ্যে রূপান্তরে অ্যাস্ট্রিডকে সাহায্য করা, এবং Cairo-র Into ও TryInto ট্রেইট ব্যবহার করে তার বিশেষ উপকরণ টাইপগুলোর জন্য কাস্টম টাইপ রূপান্তর তৈরি করা।

1. জাদুকরী একক সাইনড ও আনসাইনডের মধ্যে রূপান্তর

অ্যাস্ট্রিডের পরিমাপগুলো কখনো ধনাত্মক বা ঋণাত্মক মান হিসেবে আসে (সাইনড ইন্টিজার), কিন্তু কিছু কাজের জন্য তাকে নিশ্চিত করতে হয় যে মানগুলো সবসময় ধনাত্মক (আনসাইনড ইন্টিজার)।

এমন একটি ফাংশন লিখে অ্যাস্ট্রিডকে সাহায্য করুন যা রূপান্তর করে:

  1. একটি সাইনড ইন্টিজার (i32) থেকে একটি আনসাইনড ইন্টিজার (u16)।
  2. একটি আনসাইনড ইন্টিজার (u16) থেকে একটি সাইনড ইন্টিজার (i32)।
let signed_value: i32 = -42;
match convert_signed_to_unsigned(signed_value) {
    Option::Some(v) => println!("Converted to unsigned: {}", v),
    Option::None => println!("Failed to convert: {}", signed_value),
} // prints "Failed to convert: -42"

let unsigned_value: u16 = 42;
let signed_value: i32 = convert_unsigned_to_signed(unsigned_value);
println!("Converted to signed: {}", signed_value); // prints "Converted to signed: 42"

2. কাস্টম উপকরণ টাইপ রূপান্তর

অ্যাস্ট্রিড দুটি বিরল উপকরণ নিয়ে কাজ করেন, Essence আর Elixir, যেগুলো কাস্টম টাইপ দিয়ে প্রকাশ করা হয়। তিনি Essence-কে Elixir-এ রূপান্তর করতে চান, কিন্তু উল্টো দিকে নয়।

দুটি কাস্টম টাইপ, Essence ও Elixir, তৈরি করে এবং Essence থেকে Elixir-এ রূপান্তর করার জন্য Into ট্রেইট ইমপ্লিমেন্ট করে অ্যাস্ট্রিডকে সাহায্য করুন।

এমন একটি ফাংশন লিখুন যা একটি Essence নেয় এবং .into() ব্যবহার করে সেটিকে একটি Elixir-এ রূপান্তর করে।

#[derive(Drop)]
struct Essence {
    potency: u16,
}

#[derive(Drop)]
struct Elixir {
    strength: u16,
}

fn convert_essence_to_elixir(essence: Essence) -> Elixir {
    // Convert the Essence to Elixir using the Into trait.
    essence.into()
}

fn main() {
    let essence = Essence { potency: 100 };
    let elixir: Elixir = convert_essence_to_elixir(essence);
    println!("Elixir strength: {}", elixir.strength); // Elixir strength: 100
}
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Cairo Exercism

জাদুকরী পরিমাপ শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Cairo ট্র্যাকের 25টি কনসেপ্ট68টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।