Monday, October 9, 2017

C# For Beginners , Part -17 ( Method Parameters )

আজকে আমরা , মেথডের বিভিন্ন ধরনের প্যারামিটার নিয়ে আলোচনা করবো । ।
একটা , মেথডের মোট ৪ ধরনের প্যারামিটার থাকতে পারে ------------

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