আজকে আমরা , মেথডের বিভিন্ন ধরনের প্যারামিটার নিয়ে আলোচনা করবো । ।
একটা , মেথডের মোট ৪ ধরনের প্যারামিটার থাকতে পারে ------------
1) Value Parameters
2) Reference Parameters
3) Out Parameters
4) Parameters Arrays
Value Parameters
এটা আমাদের সবারই পরিচিত , আমরা নরমালি যে প্যারামিটার ইউজ করি , সেটাই ভ্যালু প্যারামিটার । যেমন , দেখে নেই ------------------------------------
using System;
class Program
{
public static void Main()
{
int r=10;
int t = twice(r);
Console.WriteLine(r);
Console.ReadKey();
}
public static int twice(int a)
{
a=20;
return a;
}
}
এখানে , আমরা নতুন মেথড ক্রিয়েট করে , তার ভেতরে গিয়ে প্যারামিটার হিসেবে int a কে ডিক্লেয়ার করি । ফলে , মেমোরিতে a নামে আলাদা জায়গা স্টোর হয় , এবং অ্যাসাইন হয় 10 [ r=10] । যার ফলে , আমি a এর মান চেঞ্জ করে 20 করলেও - এতে r এর কিছু যায় আসে না । r এর মান যা আছে , তাই থাকে । কারণ , r এবং a এর মেমোরি লোকেশন'টা পুরাটাই আলাদা ।
আচ্ছা , এখন যদি আমরা চাই - এই মেথডে r এর মান চেঞ্জ হবার সাথে সাথেই - যেনো ,মেইন মেথোডের a এর মান চেইঞ্জ হয়ে যায় । তাহলে , কি করতে হবে - আমাদের ?? এই জন্যই আমাদের Reference Parameters ইউজ করতে হয় । চলো , দেখে আসি -------------
Reference Parameters
চলো আগে কোড দেখে আসি ----------------------------------------------------------------------
using System;
class Program
{
public static void Main()
{
int r = 10;
int t = twice(ref r);
Console.WriteLine(r);
Console.ReadKey();
}
public static int twice(ref int a)
{
a = 20;
return a;
}
}
এখানে , আমরা যদি প্যারা মিটার এর আগে --- শুধু ref যোগ করে দেই , তাহলে যে ঘটনা টি ঘটে , তা হলো , int a ও int r আলাদা আলাদা কোনো মেমোরি locate করে না , দুইটা ভ্যারিয়েবলই একই মেমোরি লোকেশন'কে পয়েন্ট করে | বলতে গেলেই , একই মেমোরি অ্যাড্রেস এর দুইটা নাম a ও r । যেকোনো , একটা ভ্যারিয়েবল এর মাধ্যমে ওই লোকেশন এর ভ্যালু চেইঞ্জ করতে পারি । এই ধরনের প্যারামিটার কে বলা হয় , Reference Parameters। কোড'টি এবার রান করে দেখো , তাহলে আগেরটি'র থেকে তফাত বুঝতে পারবে ।
Out Parameters
আমরা , যদি কখনো - একই মেথড থেকে , একটার বেশি টার্ম রিটার্ন হিসেবে পেতে চাই , তাহলে কি করবো ???? কোড দেখে আসি -------------------------------------
using System;
class Program
{
public static void Main()
{
int a = 10,b=20;
int sum = 0;
int product = 0;
twice(a,b,out sum,out product);
Console.WriteLine("SUM {0} , PRODUCT {1}", sum, product);
Console.ReadKey();
}
public static void twice( int a,int b,out int total,out int multiplication)
{
total = a + b;
multiplication = a * b;
}
}
এই ক্ষেত্রে , আমাদের twice মেথডের ভেতরে কোনো , রিটার্ন ইউজ করি নি ও Out Parameters ইউজ করেছি , সেই জন্য - আমাদের রিটার্ন টাইপ-এ আমরা void ইউজ করেছি ।। প্রথমে , আমরা
int sum = 0; int product = 0; দুইটি ভ্যারিয়েবলকেই শূন্য তে ইনিশিয়ালাইজ করা সত্তেও , পরে আমরা
twice(a,b,out sum,out product); এর মাধ্যমে twice মেথডের অপারেশনের দ্বারা ,total &multiplication এর ভ্যালু ক্যালকুলেশন করে এর মান sum ও product এর সাথে অ্যাসাইন করে নেই । যা , আমাদের কনসল স্ক্রিনে আউটপুট দেখাচ্ছে ।।
Parameters Arrays
চলো , আমরা আগে সিম্পল একটা কোড দেখে আসি
using System;
class Program
{
public static void Main()
{
int[] numbers = new int[3];
numbers[0] = 1;
numbers[1] = 3;
numbers[2] = 4;
twice(numbers);
}
public static void twice( params int[] numbers)
{
Console.WriteLine("There are {0} elements", numbers.Length);
for(int i=0;i<numbers.Length ;i++)
{
Console.WriteLine(numbers[i]);
}
Console.ReadKey();
}
}
অ্যারে'র ভ্যালু পাস করে অন্য মেথডে পাঠানোর সবচেয়ে ভালো , উপায় । খুব সহজেই , Parameters Arrays এর মাধ্যমে কাজটি করা যায় । । কোড'টি রান করে দেখো ---------------------------
এখানে , কিছু বিষয় আমাদের খেয়াল রাখতে হবে । আমরা কিন্তু , শুধু twice(numbers); দিয়ে শুধু numbers অ্যারের ভ্যালু'ই পাঠাতে পারবো তা নয় ,তুমি numbers অ্যারের সাইজের চেয়েও বেশি সংখ্যক প্যারামিটার পাস করাতে পারবে twice(1,2,3,4,5); একবার ট্রাই করে দেখো ।।
আরেকটি বিষয় লক্ষ রাখতে হবে ,একাধিক প্যারামিটার ব্যবহার করার সময় Parameters Arrays ইউজ করলে প্যারামিটার হিসেবে -সবসময় এটাকে শেষ প্যারামিটার হিসেবে রাখতে হবে , যেমন নিম্নরূপ লিখা যাবে না -------------
public static void twice( params int[] numbers,int a);
এভাবে লিখতে হবে ,
public static void twice(int a, params int[] numbers);
আরেকটি , বিষয় লক্ষ রাখতে হবে - একটি মেথডে , সরবোচ্চ একবার Parameters Arrays ইউজ করতে পারবে । । যাই হোক , এই নতুন নতুন সিন্ট্যাক্স গুলো রপ্ত করার জন্য - বার বার প্র্যাকটিসের
কোনো , বিকল্প নেই । তাই , শুধু পড়ে পড়ে নয় , নিজে নিজে লিখে ট্রাই করার টাই সমীচিন হবে বলে মনে করি । আজ এইটুকুই ------------------------------
একটা , মেথডের মোট ৪ ধরনের প্যারামিটার থাকতে পারে ------------
1) Value Parameters
2) Reference Parameters
3) Out Parameters
4) Parameters Arrays
Value Parameters
এটা আমাদের সবারই পরিচিত , আমরা নরমালি যে প্যারামিটার ইউজ করি , সেটাই ভ্যালু প্যারামিটার । যেমন , দেখে নেই ------------------------------------
using System;
class Program
{
public static void Main()
{
int r=10;
int t = twice(r);
Console.WriteLine(r);
Console.ReadKey();
}
public static int twice(int a)
{
a=20;
return a;
}
}
এখানে , আমরা নতুন মেথড ক্রিয়েট করে , তার ভেতরে গিয়ে প্যারামিটার হিসেবে int a কে ডিক্লেয়ার করি । ফলে , মেমোরিতে a নামে আলাদা জায়গা স্টোর হয় , এবং অ্যাসাইন হয় 10 [ r=10] । যার ফলে , আমি a এর মান চেঞ্জ করে 20 করলেও - এতে r এর কিছু যায় আসে না । r এর মান যা আছে , তাই থাকে । কারণ , r এবং a এর মেমোরি লোকেশন'টা পুরাটাই আলাদা ।
আচ্ছা , এখন যদি আমরা চাই - এই মেথডে r এর মান চেঞ্জ হবার সাথে সাথেই - যেনো ,মেইন মেথোডের a এর মান চেইঞ্জ হয়ে যায় । তাহলে , কি করতে হবে - আমাদের ?? এই জন্যই আমাদের Reference Parameters ইউজ করতে হয় । চলো , দেখে আসি -------------
Reference Parameters
চলো আগে কোড দেখে আসি ----------------------------------------------------------------------
using System;
class Program
{
public static void Main()
{
int r = 10;
int t = twice(ref r);
Console.WriteLine(r);
Console.ReadKey();
}
public static int twice(ref int a)
{
a = 20;
return a;
}
}
এখানে , আমরা যদি প্যারা মিটার এর আগে --- শুধু ref যোগ করে দেই , তাহলে যে ঘটনা টি ঘটে , তা হলো , int a ও int r আলাদা আলাদা কোনো মেমোরি locate করে না , দুইটা ভ্যারিয়েবলই একই মেমোরি লোকেশন'কে পয়েন্ট করে | বলতে গেলেই , একই মেমোরি অ্যাড্রেস এর দুইটা নাম a ও r । যেকোনো , একটা ভ্যারিয়েবল এর মাধ্যমে ওই লোকেশন এর ভ্যালু চেইঞ্জ করতে পারি । এই ধরনের প্যারামিটার কে বলা হয় , Reference Parameters। কোড'টি এবার রান করে দেখো , তাহলে আগেরটি'র থেকে তফাত বুঝতে পারবে ।
Out Parameters
আমরা , যদি কখনো - একই মেথড থেকে , একটার বেশি টার্ম রিটার্ন হিসেবে পেতে চাই , তাহলে কি করবো ???? কোড দেখে আসি -------------------------------------
using System;
class Program
{
public static void Main()
{
int a = 10,b=20;
int sum = 0;
int product = 0;
twice(a,b,out sum,out product);
Console.WriteLine("SUM {0} , PRODUCT {1}", sum, product);
Console.ReadKey();
}
public static void twice( int a,int b,out int total,out int multiplication)
{
total = a + b;
multiplication = a * b;
}
}
এই ক্ষেত্রে , আমাদের twice মেথডের ভেতরে কোনো , রিটার্ন ইউজ করি নি ও Out Parameters ইউজ করেছি , সেই জন্য - আমাদের রিটার্ন টাইপ-এ আমরা void ইউজ করেছি ।। প্রথমে , আমরা
int sum = 0; int product = 0; দুইটি ভ্যারিয়েবলকেই শূন্য তে ইনিশিয়ালাইজ করা সত্তেও , পরে আমরা
twice(a,b,out sum,out product); এর মাধ্যমে twice মেথডের অপারেশনের দ্বারা ,total &multiplication এর ভ্যালু ক্যালকুলেশন করে এর মান sum ও product এর সাথে অ্যাসাইন করে নেই । যা , আমাদের কনসল স্ক্রিনে আউটপুট দেখাচ্ছে ।।
Parameters Arrays
চলো , আমরা আগে সিম্পল একটা কোড দেখে আসি
using System;
class Program
{
public static void Main()
{
int[] numbers = new int[3];
numbers[0] = 1;
numbers[1] = 3;
numbers[2] = 4;
twice(numbers);
}
public static void twice( params int[] numbers)
{
Console.WriteLine("There are {0} elements", numbers.Length);
for(int i=0;i<numbers.Length ;i++)
{
Console.WriteLine(numbers[i]);
}
Console.ReadKey();
}
}
অ্যারে'র ভ্যালু পাস করে অন্য মেথডে পাঠানোর সবচেয়ে ভালো , উপায় । খুব সহজেই , Parameters Arrays এর মাধ্যমে কাজটি করা যায় । । কোড'টি রান করে দেখো ---------------------------
এখানে , কিছু বিষয় আমাদের খেয়াল রাখতে হবে । আমরা কিন্তু , শুধু twice(numbers); দিয়ে শুধু numbers অ্যারের ভ্যালু'ই পাঠাতে পারবো তা নয় ,তুমি numbers অ্যারের সাইজের চেয়েও বেশি সংখ্যক প্যারামিটার পাস করাতে পারবে twice(1,2,3,4,5); একবার ট্রাই করে দেখো ।।
আরেকটি বিষয় লক্ষ রাখতে হবে ,একাধিক প্যারামিটার ব্যবহার করার সময় Parameters Arrays ইউজ করলে প্যারামিটার হিসেবে -সবসময় এটাকে শেষ প্যারামিটার হিসেবে রাখতে হবে , যেমন নিম্নরূপ লিখা যাবে না -------------
public static void twice( params int[] numbers,int a);
এভাবে লিখতে হবে ,
public static void twice(int a, params int[] numbers);
আরেকটি , বিষয় লক্ষ রাখতে হবে - একটি মেথডে , সরবোচ্চ একবার Parameters Arrays ইউজ করতে পারবে । । যাই হোক , এই নতুন নতুন সিন্ট্যাক্স গুলো রপ্ত করার জন্য - বার বার প্র্যাকটিসের
কোনো , বিকল্প নেই । তাই , শুধু পড়ে পড়ে নয় , নিজে নিজে লিখে ট্রাই করার টাই সমীচিন হবে বলে মনে করি । আজ এইটুকুই ------------------------------
No comments:
Post a Comment