ম্যাক্রো হলো একজন Rust প্রোগ্রামারের টুলকিটের একটি শক্তিশালী অংশ, আর উদাহরণভিত্তিক ম্যাক্রো হলো এই শক্তি ব্যবহারের তুলনামূলক সহজ একটি উপায়। চলুন একটি লিখি!
ম্যাক্রো কী? উইকিপিডিয়া এটিকে এভাবে বর্ণনা করে:
কম্পিউটার সায়েন্সে একটি ম্যাক্রো (সংক্ষেপে "macroinstruction", গ্রিক μακρός 'লম্বা' থেকে) হলো এমন একটি নিয়ম বা প্যাটার্ন, যা নির্দিষ্ট করে দেয় কীভাবে একটি ইনপুট সিকোয়েন্সকে (প্রায়ই ক্যারেক্টারের একটি সিকোয়েন্স) একটি নির্দিষ্ট পদ্ধতি অনুযায়ী একটি প্রতিস্থাপনকারী আউটপুট সিকোয়েন্সে (এটিও প্রায়ই ক্যারেক্টারের একটি সিকোয়েন্স) ম্যাপ করা হবে। ম্যাক্রোর একটি ব্যবহারকে একটি নির্দিষ্ট সিকোয়েন্সে ইনস্ট্যানশিয়েট (রূপান্তর) করার এই ম্যাপিং প্রক্রিয়াটিকেই বলা হয় ম্যাক্রো এক্সপ্যানশন।
খুবই স্পষ্ট ব্যাখ্যা! তবে আরও নির্দিষ্ট করে বললে, ম্যাক্রো হলো একটি বিশেষ সিনট্যাক্স, যা আপনাকে কম্পাইল টাইমে কোড জেনারেট করার সুযোগ দেয়। ম্যাক্রো কম্পাইল-টাইম হিসাব-নিকাশে ব্যবহার করা যায়, তবে বেশিরভাগ সময় এগুলো আপনার কোড অ্যাবস্ট্রাক্ট করার আরেকটি উপায় মাত্র। যেমন, আপনি সম্ভবত ইতিমধ্যেই println!() আর vec![] ব্যবহার করেছেন। এগুলো প্রত্যেকটি ইচ্ছেমতো সংখ্যক আর্গুমেন্ট নেয়, তাই সাধারণ ফাংশন দিয়ে এগুলোকে প্রকাশ করা যায় না। অন্যদিকে, এগুলো সবসময় একেবারে স্ট্যান্ডার্ড Rust কোডে এক্সপ্যান্ড হয়। আপনি আগ্রহী হলে cargo expand সাবকমান্ড ব্যবহার করে আপনার কোডে ম্যাক্রো এক্সপ্যানশনের ফলাফল দেখতে পারেন।
Rust-এ ম্যাক্রোর বিষয়ে আরও তথ্যের জন্য The Rust Book-এ এ নিয়ে একটি ভালো অধ্যায় আছে।
vec![] ম্যাক্রো ব্যবহার করে আপনি ইনলাইনে যেকোনো দৈর্ঘ্যের একটি Vec তৈরি করতে পারেন। তবে ইনলাইনে একটি HashMap তৈরি করার কোনো উপায় Rust-এ নেই। এটি সমাধান করতে একটি hashmap!() ম্যাক্রো লিখুন।
উদাহরণস্বরূপ, আপনার লাইব্রেরির একজন ব্যবহারকারী হয়তো hashmap!('a' => 3, 'b' => 11, 'z' => 32) লিখতে পারেন। এটি নিচের কোডে এক্সপ্যান্ড হওয়া উচিত:
{
let mut hm = HashMap::new();
hm.insert('a', 3);
hm.insert('b', 11);
hm.insert('z', 32);
hm
}
মনে রাখবেন, maplit ক্রেট এমন একটি ম্যাক্রো দেয় যা এই অনুশীলনীটি পুরোপুরি সমাধান করে দেয়। অনুগ্রহ করে এই ক্রেট ব্যবহার না করে নিজের সমাধান লিখুন; এর সোর্স দেখার আগে অনুগ্রহ করে নিজে চেষ্টা করে দেখুন।
Exercism-এ সাইন আপ করুন, Rust ট্র্যাকের 99টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।