Skip to main content

জেনেরিকস কি? (post - 11)


ভাই, সহজ বাংলায় বলতে গেলে জেনেরিকস হলো এমন একটা কোড যে কোডে আমরা ডেটা টাইপ বলে দিব না, মানে বুঝেন নাই তো?

আমরা ভ্যারিয়েবল ডিক্লেয়ার করার সময় এমন করি না?
int a=5 ;
double b=5.6 ;
char ch='c' ;

তো এইখানে (int,double,char)  এগুলা হলো ডেটা টাইপ। এইখানে কাজ করার জন্য আমাদের আগে থেকে ভ্যারিয়েবল টাইপ বলে দিতে হচ্ছে। কিন্তু জেনেরিকস হলো এমন একটা প্রসেস যেখানে আমরা ডেটা টাইপ উল্লেখ করব না, আমাদের প্রয়োজন মত ডেটা টাইপ পাস করে দিব আর সেই টাইপ অনুযায়ী আউটপুট পাব।আমরা এতদিন ভ্যারিয়েবল পাস করেছি, রেফারেন্স পাস করেছি, কিন্তু এখন ডেটা টাইপ পাস করব (int, char, double)

যেমনঃ ধরেন আমরা দুইটা সংখ্যা যোগ করার একটা মেথড লিখতে চাই,

public int sum(int a,int b){
        return a+b;
}

এইখানে টাইপ দিয়েছি int , এখন আমরা যদি a=5.65 , b=10.55 দেই তাহলে কি আমরা আসল উত্তরটা পাব? না, পাব না।  কারণ ডেটা টাইপ ইন্টিজার তাই উত্তর  5 + 10 = 15  দিয়ে দিবে।

আমরা যদি আসল উত্তরটা পেতে চাই, তাহলে আমাদের কি করতে হবে ? আরেকটা মেথড লিখতে হবে যেখানে ভ্যারিয়েবল টাইপ দিব double

double sum(double a,double b){
 return a+b;
}

খেয়াল করেন, এইখানে আমাদের কাজের প্রসেস কিন্তু একটাই , শুধু ২টা সংখ্যা যোগ করে দিয়ে দিব। কিন্ত (int , double) টাইপ আলাদা হউয়ার কারণে আমাদের একই কোড দুইবার লিখা লাগছে, এই ঝামেলাটা যেন না করা লাগে তাই আসছে জেনেরিকস

জেনেরিক দিয়ে কোডঃ
নিজেকে ডেটা টাইপ বানিয়ে ফেলব এখন 😜


   1.  public class Main<Rifat>{
     
    2.  Rifat a;  //Rifat এখন ডেটা টাইপ, 'a' ভ্যারিয়েবল

3.    public Main(Rifat a){

4.  this.a=a;

    }

5. public Rifat getObj(){

6.   return a;

    }
7. public void showType(){

8.   System.out.println("Type of Rifat: "+a.getClass().getName());

    }
9. public static void main(String[] args) {

10.    Main<Integer> obj=new Main(6);

11.   System.out.println(obj.getObj());

12.     obj.showType();

13.    Main<Double> obj1=new Main(5.55);

14.    System.out.println(obj1.getObj());

15.     obj1.showType();
    }
}

আউটপুটঃ

6
Type of Rifat: java.lang.Integer      //Output of Line 12
5.55
Type of Rifat: java.lang.Double     //Output of Line 15
 BUILD SUCCESSFUL (total time: 0 seconds)

নাম্বার লাইনটা আগে লিখতাম

public class Main{
}

কিন্ত এখন লিখলাম

public class Main<Rifat>{
}

এইখানে <Rifat> এইটা প্লেসহোল্ডার (শূন্যস্থান) মাত্র, এইখানে যা খুশি তাই লিখতে পারবেন, মানে আমরা মেইন মেথড থেকে টাইপ যেটা পাস করব এর মধ্যে সেটা আসবে কি লিখেছেন এইখানে এইটা ফ্যাক্ট না, যেমনঃ

আগে লিখতাম

int a;

কিন্তু এখন,

Rifat a ;           //Line 2

মানে Rifat নিজেই একটা ডেটা টাইপ হয়ে গেছে, কিন্তু কোন ডেটা টাইপ?
আমরা যখন 

Main<Integer> obj=new Main(6); 
//Line 10

Main"<Integer>"

ইন্টিজার পাস করলাম, তাই এখন ইন্টিজার ডেটা টাইপ হিসেবে কাজ করবে 

তখন Rifat এর জায়গায় Internally int a ( Rifat a ; ) এভাবে থাকে, তাই এইটার টাইপ প্রিন্ট করার সময় দেখালো java.lang.Integer,  আবার ডবল নিয়ে কাজ করলে 

Main<Double> obj=new Main(65.45);
//Line 13

এইবার Double  পাস করলাম, তাই code    Rifat লিখা জায়গায়  Double  থাকলে যা করত, সেভাবে কাজ করবে,  Rifat  দেন বা অন্য কিছু দেন ঐটা একটা শূন্যস্থানের মত কাজ করবে (Fill in the gap type)

এখন Rifat a (double a)  এর মত কাজ করবে, তাহলে খেয়াল করেন  getObj() মেথড লিখেছি একবার , সব লিখেছি একবার কিন্তু Main<Double>, Main<Integer> টাইপ চেঞ্জ করে ঐটাকেই বিভিন্নভাবে ব্যবহার করতে পারলাম, এইটাই জেনেরিকসের প্রধান কাজ।

public class Main<যেকোনো_নাম>{
যেকোনো_নাম a ;
}


জেনেরিকস অবজেক্ট নিয়ে কাজ করে, তাই আমরা Main<int> লিখতে পারব না র‍্যাপার(wrapper) ক্লাস ইউজ করা লাগবে, এভাবে Main<Integer>

ArrayList  জেনেরিকসের মত কাজ করে,
ArrayList<Integer>
ArrayList<String>
ArrayList<Class_Name>
etc etc etc . . .


Comments

Popular posts from this blog

IELTS Spoken Class Adminssion Scenario - 01

.......  Student: Hello, May I come in, sir ? Optional (student): May I sit ? Sir:  Please have a seat. Sir: How may I help you, Sir ? Student: I would like to admit in your spoken course. Sir: Oh sure. Student: How many days are there in a week ? Sir: There are three classes in a week. Student: What time do you offer class ? Sir: We have class at 11am / 4pm / 6pm / 8pm

Php Learning Time

 Differences of explode( ) and implode( ) in php: explode: একটা স্ট্রিংকে কোনো একটা সেপারেটরের বেসিসে অ্যারেতে কনভার্ট করে, যেমন  <?php $text="Hello How are you?"; print_r(explode(" ",$text)); ?> This will give output of  Array (     [0] => Hello     [1] => How     [2] => are     [3] => you? ) Differences of array_splice( ) and array_slice( ) ধরেন আসল অ্যারে হচ্ছে    $arr =[ "Hello" , "this" , "is" , "test" , "text" ];    এখন এটাকে স্লাইসিং করার জন্য আমরা উপরের দুইটা মেথড ই ব্যবহার করতে পারি , কিন্তু array_splice এটা ইউজ করলে অরজিনাল array ও চেঞ্জ হয়ে যাবে, মানে যদি আমরা এভাবে লিখি  $var2 = array_splice ( $arr , 0 , 2 );   তাইলে $var2 এর ভিতরে থাকবে ["Hello" , "this"] ,  আর অরজিনাল array তে বাকি থাকবে ["is", "test", "text"] কিন্তু যদি আমরা ইউজ করি তাহলে অরজিনাল array আগের মতোই থাকবে পাশাপাশি $var2 এর মধ্যে ভ্যালু গুলা এসে পড়বে  Array (     [0] => ...