Generics এর ধারণা এবং Syntax

Generics এবং Traits (জেনেরিক্স এবং ট্রেইটস) - রাস্ট (Rust) - Computer Programming

258

Generics এর ধারণা

Generics হল একটি গুরুত্বপূর্ণ প্রোগ্রামিং কৌশল যা প্রোগ্রামকে আরও সাধারণ, পুনঃব্যবহারযোগ্য এবং সুরক্ষিত করতে সহায়ক। Rust এ, Generics এর মাধ্যমে আমরা একটি ফাংশন, স্ট্রাকচার, enum, বা ট্রেট (trait) তৈরি করতে পারি যা বিভিন্ন টাইপের ডেটা নিয়ে কাজ করতে সক্ষম। এতে আমাদের কোডের স্থিতিস্থাপকতা এবং মডুলারিটি বৃদ্ধি পায়, কারণ আমরা একাধিক ডেটা টাইপের সাথে কাজ করতে পারি কোনো টাইপ নির্দিষ্ট না করেই।

Generics ব্যবহারের মাধ্যমে আপনি টাইপের উপর নির্ভর না করে কোড লিখতে পারবেন, এবং কম্পাইল টাইমে টাইপ চেকিংয়ের সুবিধা পাবেন। Rust কম্পাইলার টাইপ চেকিং এর মাধ্যমে টাইপ সেফটি নিশ্চিত করে, যাতে রানটাইমে কোনো সমস্যা না হয়।


Generics এর Syntax (সিনট্যাক্স)

Rust এ, Generics সাধারণত angle brackets (<>) এর মধ্যে টাইপ নাম ব্যবহার করে ডিফাইন করা হয়। এটি ফাংশন, স্ট্রাকচার, enum, অথবা ট্রেটের সাথে যুক্ত হতে পারে।

২.১ Generics with Functions (ফাংশনে Generics)

ফাংশনে জেনেরিক প্যারামিটার ব্যবহার করার জন্য, ফাংশনের নামের পর <> এর মধ্যে টাইপ প্যারামিটার দেয়া হয়।

উদাহরণ:

fn print_value<T>(value: T) {
    println!("The value is: {:?}", value);
}

fn main() {
    print_value(10);         // T is inferred as i32
    print_value("Hello");    // T is inferred as &str
}

এখানে, T একটি Generic Type Parameter। ফাংশনটি যেকোনো ধরনের মান গ্রহণ করতে সক্ষম, এবং T টাইপ প্যারামিটারটি স্বয়ংক্রিয়ভাবে টাইপ ইনফারেন্সের মাধ্যমে চিহ্নিত করা হয়। প্রথম কলের সময় T এর টাইপ হলো i32, আর দ্বিতীয় কলের সময় T এর টাইপ হলো &str

২.২ Generics with Structs (স্ট্রাকচারেও Generics)

স্ট্রাকচারেও জেনেরিক প্যারামিটার ব্যবহার করা যেতে পারে, যা আমাদের স্ট্রাকচারকে বিভিন্ন ডেটা টাইপের সাথে কাজ করার সক্ষমতা দেয়।

উদাহরণ:

struct Point<T> {
    x: T,
    y: T,
}

fn main() {
    let int_point = Point { x: 5, y: 10 };        // T is i32
    let float_point = Point { x: 1.0, y: 4.0 };   // T is f64
}

এখানে, Point নামক একটি স্ট্রাকচার তৈরি করা হয়েছে যা জেনেরিক টাইপ T ব্যবহার করছে। এর ফলে একই স্ট্রাকচার i32 বা f64 বা অন্য কোনো টাইপের জন্য ব্যবহার করা সম্ভব।

২.৩ Generics with Enums (এনামেও Generics)

এনাম (enum) এও জেনেরিক টাইপ ব্যবহার করা যায়। এটি বিভিন্ন ডেটা টাইপের জন্য একটি ইউনিফর্ম ডেটা স্ট্রাকচার তৈরি করতে সাহায্য করে।

উদাহরণ:

enum Result<T, E> {
    Ok(T),
    Err(E),
}

fn main() {
    let success: Result<i32, &str> = Result::Ok(200);   // T = i32, E = &str
    let error: Result<i32, &str> = Result::Err("Error"); // T = i32, E = &str
}

এখানে, Result একটি জেনেরিক এনাম যা দুটি প্যারামিটার ব্যবহার করে: T (যে টাইপ সফল ফলাফল হবে) এবং E (ত্রুটি টাইপ)। এটি বিভিন্ন ডেটা টাইপের জন্য রিটার্ন ভ্যালু তৈরি করতে সক্ষম।

২.৪ Generics with Traits (ট্রেটেও Generics)

ট্রেটস (traits) ব্যবহারের মাধ্যমে আপনি জেনেরিক টাইপ ব্যবহার করে ফাংশন বা মেথড ডিফাইন করতে পারেন। এর মাধ্যমে আপনি প্রোগ্রামিং কোডের এক্সটেনসিবিলিটি এবং পুনঃব্যবহারযোগ্যতা বৃদ্ধি করতে পারেন।

উদাহরণ:

trait Printable {
    fn print(&self);
}

struct Person {
    name: String,
}

impl Printable for Person {
    fn print(&self) {
        println!("Person name: {}", self.name);
    }
}

fn print_item<T: Printable>(item: T) {
    item.print();
}

fn main() {
    let person = Person { name: String::from("John") };
    print_item(person);
}

এখানে, Printable ট্রেটটি একটি print মেথড ডিফাইন করেছে যা Person স্ট্রাকচারে প্রয়োগ করা হয়েছে। print_item ফাংশনটি যেকোনো টাইপের Printable ট্রেটকে প্রয়োগযোগ্য ভ্যালু নিয়ে কাজ করে।


Constraints (বাধ্যতাসমূহ)

Rust এ, আপনি জেনেরিক টাইপের উপর constraints আরোপ করতে পারেন, অর্থাৎ আপনি নির্দিষ্ট করতে পারেন যে এই টাইপটি কোন ফাংশন বা ট্রেট ব্যবহার করতে পারবে। সাধারণত, এটি T: Trait এর মাধ্যমে করা হয়।

উদাহরণ:

fn print_length<T: ToString>(item: T) {
    println!("Length: {}", item.to_string().len());
}

fn main() {
    print_length(123);       // i32 implements ToString
    print_length("Hello");   // &str implements ToString
}

এখানে, T: ToString বলতে বোঝাচ্ছে যে T টাইপটি ToString ট্রেটের সাথে সম্পর্কিত হতে হবে। এতে শুধুমাত্র সেই টাইপগুলোই এই ফাংশনটি কল করতে পারবে যেগুলো ToString ট্রেট প্রয়োগ করেছে।


সারাংশ

Rust এ Generics একটি অত্যন্ত শক্তিশালী কৌশল, যা আমাদের কোডকে আরো সাধারণ, পুনঃব্যবহারযোগ্য এবং টাইপ সেফ করে তোলে। এর মাধ্যমে ফাংশন, স্ট্রাকচার, এনাম, এবং ট্রেট গুলোকে জেনেরিক টাইপ প্যারামিটার ব্যবহার করে তৈরি করা যায়, যা একাধিক টাইপের সাথে কাজ করতে সক্ষম। Rust এর টাইপ সিস্টেম এবং কম্পাইল টাইম টাইপ চেকিং এই জেনেরিক কোডগুলোকে সুরক্ষিত এবং কার্যকরী করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...