Rust:
রিফ্যাক্টরিং

কীভাবে:

চলুন একটি সাধারণ রাস্ট কোড কে আরো ইডিওম্যাটিক এবং রক্ষণযোগ্য করে তৈরি করতে রিফ্যাক্টর করি। আমরা একটি ফাংশনের সাথে শুরু করি যা একটি পূর্ণসংখ্যার ভেক্টরের সমষ্টি গণনা করে:

fn sum(vec: &Vec<i32>) -> i32 {
    let mut sum = 0;
    for i in vec {
        sum += i;
    }
    sum
}

fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    println!("The sum is {}", sum(&numbers));
}

আউটপুট:

The sum is 15

এখন, চলুন এটি ইডিওম্যাটিক রাস্ট ব্যবহার করে রিফ্যাক্টর করি যেখানে ইটারেটরস এবং fold মেথড ব্যবহার করব:

fn sum(vec: &[i32]) -> i32 {
    vec.iter().fold(0, |acc, &x| acc + x)
}

fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    println!("The sum is {}", sum(&numbers));
}

আউটপুটে কোনো পরিবর্তন নেই—এটি এখনো 15—কিন্তু রিফ্যাক্টর করা সংস্করণটি আরও পরিষ্কার এবং রাস্টের শক্তি যেমন ধার গ্রহণ এবং ইটারেটর মেথডস ব্যবহার করে।

গভীর ডুব

রিফ্যাক্টরিং এর উৎস Smalltalk সম্প্রদায়ে এবং Martin Fowler’s বই “Refactoring: Improving the Design of Existing Code” এর মাধ্যমে Java দুনিয়ায় জনপ্রিয় হয়েছে। এর নীতিগুলি সার্বজনীন এবং রাস্টের ক্ষেত্রেও প্রযোজ্য, যেখানে নিরাপত্তা এবং সমান্তরালতা অপরিহার্য। রাস্ট সময়ে সময়ে জটিল সমস্যা ধরে রোবাস্ট কোড লেখাকে উৎসাহিত করে, সুতরাং রিফ্যাক্টরিং এর সময়, রাস্ট কম্পাইলার একটি নিরাপত্তা জাল হিসেবে কাজ করে।

ম্যানুয়াল রিফ্যাক্টরিং এর বিকল্প হিসাবে অটোমেটেড টুলস, যেমন ‘rustfmt’ কোড ফর্ম্যাটিং এর জন্য এবং ‘clippy’ লিন্টিং এর জন্য, যা কোড লেখার আরও ইডিওম্যাটিক উপায় সুপারিশ করতে পারে। তবে, গভীর রিফ্যাক্টরিং প্রায়ই কোডের নকশা সম্পর্কে একটি চিন্তাশীল বোঝাপড়া দাবি করে, যা এই টুলগুলি পুরোপুরি অটোমেট করতে পারে না।

রাস্টে, রিফ্যাক্টরিং হয়তো ডেটা টাইপ ব্যবহার উন্নতি, জীবনকাল কার্যকরভাবে ব্যবহার, অনাবশ্যক অ্যালোকেশন হ্রাস, অথবা প্রয়োজনীয় সময়ে Arc<Mutex<T>> ব্যবহার করে সমান্তরাল নকশা প্যাটার্ন ব্যবহার করা নিয়ে কেন্দ্রিক হতে পারে। unwrap() থেকে Result<T, E> এর মত আরও প্রকাশক ত্রুটি হ্যান্ডলিং এ যাওয়াও সাধারণ।

আরও দেখুন

রাস্টে রিফ্যাক্টরিং এর আরও গভীরে যেতে: