ট্র্যাক
/
Rust
Rust
/
সিলেবাস
/
স্ট্রিং স্লাইস
স্

স্ট্রিং স্লাইস মধ্যে Rust

{one: "১টি অনুশীলনী", other: "%{count}টি অনুশীলনী"}

স্ট্রিং স্লাইস সম্পর্কে

Rust ক্যারেক্টারের অ্যারে বাস্তবায়ন করে দুইভাবে: str এবং String।

str, যাকে "স্ট্রিং স্লাইস"-ও বলা হয়, সাধারণত রেফারেন্সসহ &str হিসেবে ব্যবহৃত হয়।

এর কারণ জানতে হলে নিচের কোডের লাইনটি কেন কম্পাইল হবে না, সেটি বোঝা সহায়ক হতে পারে

const MY_CONST: str = *"Hello, World!";

// the size for values of type `str` cannot be known at compilation time
// the trait `Sized` is not implemented for `str`

"Hello, World!" লিটারালটির দৈর্ঘ্য কম্পাইল সময়েই জানা গেলেও, একটি str হিসেবে এটি অজানা আকারের একটি সিকোয়েন্স। কিন্তু একটি লিটারালের রেফারেন্স (&str) হিসেবে এটির একটি "ফ্যাট পয়েন্টার" থাকে, যা মেমোরিতে লিটারালটির অ্যাড্রেস ও দৈর্ঘ্য ধরে রাখে। ফ্যাট পয়েন্টারের আকার জানা থাকে, তাই এই লাইনটি কম্পাইল হবে

const MY_CONST: &str = "Hello, World!";

স্ট্রিং স্লাইসের একটি মিউটেবল বাইন্ডিংয়ের মান প্রতিস্থাপন করা যায়, কিন্তু সেটিকে নিজের জায়গায় পরিবর্তন করা যায় না।

উদাহরণ

let mut my_str = "Hello, World!";
my_str = "Hi!";
let mut my_string = String::from("Hello");
my_string.push_str(", World!"); // there is no equivalent function to modify &str

ফাংশনের একটি প্যারামিটার ডিফাইন করার সময় &String-এর বদলে &str ব্যবহার করা কম সীমাবদ্ধ, কারণ এই কোডটি কম্পাইল হবে না

pub fn main() {
    let my_str: &str = "Hello, World!";
    say_hi(my_str);
}

fn say_hi(phrase: &String) {
    println!("{phrase:?}");
}

// mismatched types
// expected reference `&String`
// found reference `&str`

একটি &str-কে &String-এ কোয়ার্স করা যায় না। কিন্তু এটি কম্পাইল হবে

pub fn main() {
    let my_string = String::from("Hello, World!");
    say_hi(&my_string)
}

fn say_hi(phrase: &str) {
    println!("{phrase:?}");
}

একটি &String-কে &str-এ কোয়ার্স করা যায়। তাই প্যারামিটার টাইপ হিসেবে &str ব্যবহার করা প্রায়ই বেশি কাজে লাগে।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে