মেথডস (Methods)
মেথড কী? (What Is a Method?)
একটি মেথডকে (method) রান্নার একটি রেসিপির (recipe) মতো ভাবতে পারেন। আপনি এর একটি নাম দেন ("যেমন- প্যানকেক_তৈরি"), এর জন্য কী কী উপকরণ লাগবে তার একটি তালিকা তৈরি করেন (যাকে বলা হয় প্যারামিটার), এবং তারপর রান্নার ধাপগুলো লিখে ফেলেন (যাকে বলা হয় মেথডের বডি)। এরপর, আপনার যখনই প্যানকেক খেতে ইচ্ছা করবে, আপনাকে আর কষ্ট করে সব ধাপ নতুন করে লিখতে হবে না, শুধু নাম ধরে রেসিপিটিকে ডাকলেই (call) কাজ হয়ে যাবে!
মেথড আপনাকে যেসব কাজে সাহায্য করে:
- একই কাজ বারবার করা থেকে বাঁচায় — একবার লিখুন, আর ১০০ বার কল (call) করুন
- কোড গুছিয়ে রাখতে সাহায্য করে — বড় বড় সমস্যাগুলোকে ছোট এবং নামযুক্ত (named) টুকরোতে ভাগ করে নেয়
- সহজে টেস্ট বা পরীক্ষা করা যায় — আপনি চাইলে প্রতিটি মেথডকে আলাদা আলাদাভাবে টেস্ট করে দেখতে পারেন
প্রতিটি মেথডই কিছু না কিছু ফেরত দেয়, যাকে রিটার্ন টাইপ (return type) বলা হয়, এবং এরা কিছু প্যারামিটার (parameters) বা ইনপুট (input) গ্রহণ করতে পারে। যদি কোনো মেথড কিছুই ফেরত না দেয়, তবে তার রিটার্ন টাইপ হয় void।
মেথড বেসিকস (Basic Methods)
প্যারামিটার: ref, out এবং অপশনাল (Parameters: ref, out, and Optional)
সাধারণত, যখন আপনি কোনো মেথডের কাছে একটি ভ্যারিয়েবল পাঠান, তখন সি শার্প (C#) আসলে সেই ভ্যারিয়েবলের একটি কপি (copy) বা অনুলিপি পাঠায়। তাই মেথডটি চাইলেও আসল ভ্যারিয়েবলটির কোনো পরিবর্তন করতে পারে না। কিন্তু অনেক সময় আপনার মনে হতে পারে যে, মেথডটি যেন আসল ভ্যারিয়েবলটিকে পরিবর্তন করতে পারে — আর ঠিক এখানেই ref এবং out এর কাজ শুরু হয়।
ref— "আমি তোমাকে আমার আসল ভ্যারিয়েবলটি ধার দিচ্ছি। তুমি চাইলে এটি পড়তে পারো এবং পরিবর্তনও করতে পারো।" তবে এই ক্ষেত্রে, মেথডে পাঠানোর আগেই ভ্যারিয়েবলটির একটি মান অ্যাসাইন (assign) বা ইনিশিয়ালাইজ (initialize) করা থাকতে হবে।out— "আমি তোমাকে একটি খালি বাক্স দিচ্ছি। তোমাকে অবশ্যই এটি পূরণ করে দিতে হবে।" এই ক্ষেত্রে, ভ্যারিয়েবলটিকে মেথডে পাঠানোর আগে কোনো মান অ্যাসাইন বা ইনিশিয়ালাইজ করার দরকার নেই।- অপশনাল প্যারামিটার (Optional parameters) — এগুলো হলো এমন প্যারামিটার বা ইনপুট, যেগুলোর আগে থেকেই একটি ডিফল্ট (default) মান দেওয়া থাকে। মেথড কল করার সময় কলার (caller) যদি এগুলোর মান না দেয়, তখন ওই ডিফল্ট মানটি কাজ করা শুরু করে।
ref, out এবং অপশনাল প্যারামিটার (ref, out, and Optional Parameters)
মেথড ওভারলোডিং — একই নাম, তবে ভিন্ন সিগনেচার (Method Overloading — Same Name, Different Signatures)
=> সহ) চমৎকার কাজ করে। কিন্তু আপনার মেথডটি যদি একাধিক লাইন বা স্টেটমেন্ট (statement) জুড়ে থাকে, তবে সাধরন { } ব্লক ব্যবহার করুন। অযথাই জটিল লজিকগুলোকে (logic) তীরের (arrow) মতো এই চিহ্নের মাঝে আটকে রাখবেন না — অতিরিক্ত চালাকি করার চেয়ে কোড সহজে পড়তে পারাটা অনেক বেশি জরুরি।