Saturday, January 28, 2023

சி++-ல் டெம்ப்லேட்ஸ்.

 


 To learn more about  c, c++, java, c#, vb.net, asp.net, asp.net core, javascript, angular, react js, web designing, fullstack web development , python , php, my sql, sql server ,ms-office, tally contact:

919629329142

both direct and on line coaching available.

visit youtube channel "programming with karthikeyan" for learn programming concepts in Tamil. please don't forget to subscribe to that channel.

 

டெம்ப்லேட்ஸ் ஆனது சி++-ல் எளிய அதே நேரத்தில் சக்தி வாய்ந்த டூல் ஆகும்.ஒரே கோடை வெவ்வேறு விதமான டேட்டா டைப்பிற்கு இயக்கலா.அதற்கு டேட்டா டைப்பை பாராமீட்டராக அனுப்ப வேண்டும்.

சான்றாக sort() ஃபங்க்சன் ஆனது வெவ்வேறு டேட்டா டைப்பிற்கு பயன்படுத்தலாம்.எளிதாக டேட்டாடைப்பை பாராமீட்டராக அனுப்புவதன் மூலம் இதனை சாதிக்கலாம்.

சி++-ல் டெம்ப்லேட்ஸ் கான்செப்டிற்கு இரண்டு கீ வேர்டுகள்  பயன்படுகின்றன.

அவையாவன:

1.      templates

2.      typename

இவற்றில் typename என்பதற்கு பதில் class என்ற கீவேர்டையும் பயன்படுத்தலாம்.

டெம்ப்லேட்ஸ் எவ்வாறு பயன்படுகின்றது.

டெம்ப்லேட்ஸ் ஆனது கம்பைல் டைமில் எக்ஸ்பேண்ட் செய்யப்படுகின்றது.இது macroவை ஒத்திருக்கின்றது.ஒரு வித்தியாசம் என்னவெனில் கம்பைலரானது டெம்ப்லேட்ஃப்டை எக்ஸ்பேண்ட் செய்யும் பொழுது டைப் செக் செய்யும்.திட்டம் என்னவெனில் ஒரே ஒரு ஃபங்க்சனோ அல்லது கிளாஸோ வைத்துக்கொண்டு மல்டிபிள் டேட்டாடைப்பிற்கு ரியூஸ் செய்தல் ஆகும்.


 


 

ஃபங்க்சன் டெம்ப்லேட்ஸ்.

ஒரு ஃபங்க்சனை டெம்ப்லேட் ஆக எழுதி வைத்துக் கொண்டு வெவ்வேறு டேட்டா டைப்பிற்க்கு அவற்றை ரியூஸ் செய்தல் ஆகும்.

சான்று நிரல்-1

#include <iostream>

using namespace std;

 

// One function works for all data types.  This would work

// even for user defined types if operator '>' is overloaded

template <typename T>

T myMax(T x, T y)

{

   return (x > y)? x: y;

}

 

int main()

{

  cout << myMax<int>(3, 7) << endl;  // Call myMax for int

  cout << myMax<double>(3.0, 7.0) << endl; // call myMax for double

  cout << myMax<char>('g', 'e') << endl;   // call myMax for char

 

  return 0;

}

வெளியீடு:

7

7

g

 

கீழே உள்ள நிரல் பப்பிள் சார்ட் செய்வதற்கான கோடிங்க் ஆகும்.

சான்று நிரல்-2.

/ CPP code for bubble sort

// using template function

#include <iostream>

using namespace std;

  

// A template function to implement bubble sort.

// We can use this for any data type that supports

// comparison operator < and swap works for it.

template <class T>

void bubbleSort(T a[], int n) {

    for (int i = 0; i < n - 1; i++)

        for (int j = n - 1; i < j; j--)

            if (a[j] < a[j - 1])

              swap(a[j], a[j - 1]);

}

  

// Driver Code

int main() {

    int a[5] = {10, 50, 30, 40, 20};

    int n = sizeof(a) / sizeof(a[0]);

  

    // calls template function

    bubbleSort<int>(a, n);

  

    cout << " Sorted array : ";

    for (int i = 0; i < n; i++)

        cout << a[i] << " ";

    cout << endl;

  

  return 0;

}

Output
 

Sorted array : 10 20 30 40 50

 

கிளாஸ் டெம்ப்லேட்ஸ்.

இதுவும் ஃபங்க்சன் டெம்ப்லேட்டை ஒத்திருக்கின்றது. ஒரு கிளாசின் மெம்பர்களின் டேட்டா டைப் குறிப்பிடாமல் டெம்ப்லேட் ஆக எழுதி வைத்துக்கொண்டு அவற்றை மல்டிபிள் டேட்டா டைப்பிற்க்கு பயன்படுத்துதல் ஆகும்.

உதாரணம் linked list,stack,queue,array போன்ற கிளாஸ்கள் ஆகும்.

சான்று நிரல்-3.

#include <iostream>

using namespace std;

 

template <typename T>

class Array {

private:

    T *ptr;

    int size;

public:

    Array(T arr[], int s);

    void print();

};

 

template <typename T>

Array<T>::Array(T arr[], int s) {

    ptr = new T[s];

    size = s;

    for(int i = 0; i < size; i++)

        ptr[i] = arr[i];

}

 

template <typename T>

void Array<T>::print() {

    for (int i = 0; i < size; i++)

        cout<<" "<<*(ptr + i);

    cout<<endl;

}

 

int main() {

    int arr[5] = {1, 2, 3, 4, 5};

    Array<int> a(arr, 5);

    a.print();

    return 0;

}

Output: 

 1 2 3 4 5

ஒரு டெம்ப்லேட்டிற்க்கு மல்டிபிள் ஆர்க்கியூமென்டை அனுப்பலாமா?

ஆம் ஒரு டெம்ப்லேட்டிற்கு ஒன்றுக்,கு மேற்பட்ட டைப்பை பாராமீட்டராக அனுப்பலாம்.

சான்று நிரல்-4.

#include<iostream>

using namespace std;

 

template<class T, class U>

class A  {

    T x;

    U y;

public:

    A() {    cout<<"Constructor Called"<<endl;   }

};

 

int main()  {

   A<char, char> a;

   A<int, double> b;

   return 0;

}

Output: 

Constructor Called

Constructor Called

டெம்ப்லெட் ஆர்க்கியூமெண்டிற்கு டிஃபால்ட் மதிப்பிருத்த முடியுமா?

ஆம் ஃபங்க்சன் பாராமீட்டர்களுக்கு டிஃபால்ட் மதிபிருத்துவது போல் டெம்ப்லேடிற்கும் டிஃபால்ட் மதிப்பிருத்தலாம்.

#include<iostream>

using namespace std;

 

template<class T, class U = char>

class A  {

public:

    T x;

    U y;

    A() {   cout<<"Constructor Called"<<endl;   }

};

 

int main()  {

   A<char> a;  // This will call A<char, char>  

   return 0;

}

Output: 

Constructor Called

ஃபங்க்சன் ஓவர் லோடிங்கிற்கும் டெம்ப்லேட்ஸிற்கும் என்ன வித்தியாசம்?

இரண்டுமே பாலிமார்பிசன் என்ற ஊப்ஸ் கான்செட்டையே குறிக்கின்றது.

ஃபங்க்சன் ஒவர் லோடிங்க் ஆனது மல்டிபிள் ஃபங்க்சன்கள் ஒத்த ஆபரேசன் செய்யும் பொழுது பயன்படுகின்றது. டெம்ப்லேட் ஆனது மல்டிபிள் ஃபங்க்சன் ஒரே ஆபரேசன் செய்யும் பொழுது பயன்படுகின்றது.

கிளாஸ் டெம்ப்லேட் அல்லது ஃபங்க்சன் டெம்ப்லேட்டில் ஸ்டேட்டிக் மெம்பர் இருந்தால் என்ன ஆகும்?

ஒவ்வொரு டெம்ப்லேட்டின் இன்ஸ்டன்ஸும் தனக்கான ஸ்டேட்டிக் வேரியபிளைக் கொண்டுள்ளது.

நன்றி.

முத்துகார்த்திகேயன் ,மதுரை.

ads Udanz

Tuesday, January 24, 2023

ரியாக்ட் ஜெ எஸ் ஃபங்க்சனல் காம்பனண்ட்ஸ் மற்றும் கிளாஸ் காம்பனண்ட்ஸ் என்ன வேறுபாடு?

 To learn more about  c, c++, java, c#, vb.net, asp.net, asp.net core, javascript, angular, react js, web designing, fullstack web development , python , php, my sql, sql server ,ms-office, tally contact:

919629329142

both direct and on line coaching available.


 


இந்த கட்டுரையில் count என்ற சான்று பயன்பாட்டை உருவாக்குவோம்.”Add” என்ற பட்டனை கிளிக் செய்யும் பொழுது கவுண்ட் ஆனது 1 அதிகரிக்க வேண்டும். இந்த நிரல் மூலம் ஃபங்க்சனல் காம்பனண்ட்டுகளிக்கும் கிளாஸ் காம்பனன்ட்டுகளுக்கும் உள்ள வித்தியாசத்தை அறிவோம்.

ஃபங்க்சனல் காம்பனண்ட்

இது ரியாக்ட் ஜெ எஸ்ஸில் பயன்படும் காமன் காம்பனன்ட் ஆகும்.இவை ஒரு ஜாவா ஸ்கிரிப்ட் ஃபங்க்சன் தான். ரியாக்டில் ஜாவாஸ்கிரிப்ட் ஃபங்க்சன் மூலம் ஃபங்க்சனல் காப்பனண்டை உருவாக்குவோம்.

சிண்டாக்ஸ்.

const Car=()=> {

  return <h2>Hi, I am also a Car!</h2>;

}

 

சான்று நிரல்.-1

import React ,{useState} from "react";

 

const FunctionalComponent=()=>{

    const[count , setCount]=useState(0);

 

    const increase=()=>{

        setCount(count+1);

    }

 

    return

        <div style={{margin:'50px'}}>

            <h1>Welcome to Geeks for Geeks </h1>

            <h3>Counter App using Functional Component : </h3>

          <h2>{count}</h2>

            <button onClick={increase}>Add</button>

        </div>

    )

 

 

export default FunctionalComponent;

 

வெளியீடு:

 கிளாஸ் காம்பனண்ட்

இது மாடர்ன் வெப் பயன்பாடுகளின் பிரட் மற்றும் பட்டர் ஆகும். இவை சாதாரண கிளாஸ்கள் தான்.இவை ஒன்றுக்கு மேற்பட்ட ஃபங்க்சன்களின் தொகுப்பாகும்.

சிண்டாக்ஸ்.

class Car extends React.Component {
  render() {
    return <h2>Hi, I am a Car!</h2>;
  }
}

சான்று  நிரல்-2

import React from "react";

 

class ClassComponent extends React.Component{

    constructor(){

        super();

        this.state={

            count :0

        };

        this.increase=this.increase.bind(this);

    }

     

   increase(){

       this.setState({count : this.state.count +1});

   }

 

    render(){

        return (

            <div style={{margin:'50px'}}>

               <h1>Welcome to Geeks for Geeks </h1>

               <h3>Counter App using Class Component : </h3>

               <h2> {this.state.count}</h2> 

               <button onClick={this.increase}> Add</button>

 

            </div>

        )

    }

}

 

export default ClassComponent;

 

வெளியீடு:

Hooks என்பது ரியாக்ட் 16.8 வெர்சனில் அறிமுகப்படுத்தப்பட்ட புதிய கான்செப்ட் ஆகும்.இவை கிளாஸ் காம்பனண்டுகள் எழுதாமலேயே ஸ்டேட் மற்றும் புதிய ரியாக்ட் அம்சங்களை உருவாக்க பயன்படுகின்றது.

சான்று நிரல் ஒன்றில் நாம் ஹூக்ஸை பயன்படுத்தி ஸ்டேட்டை நிர்வாகிக்கின்றோம். இதற்கு முன் ஒரு ஃபங்க்சனல் காம்பனட்டை எழுதி அதற்கு ஸ்டேட் பயன்படுத்த வேண்டுமென்றால் அவற்றை கிளாஸ் காம்பனண்ட்டாக மாற்ற  வேண்டும்.ஹூக்ஸை பயன்படுத்தி கிளாஸ் காம்பனனாட்டாக எழுதாமல் ஃபங்க்சனல் காம்பனண்ட்டிலேயே ஸ்ட்டை உருவாக்கி மேனேஜ்  செய்யலாம்.

இரண்டுக்கும் உள்ள வேறுபாடுகள்.

ஃபங்க்சனல் காம்பனண்ட்

1.      இது ஒரு பிளைன் ஜாவாஸ்கிரிப்ட் நிரலாகும்.இது props என்பதை ஆர்க்கியொமெண்ட் ஆக ஏற்று ரியாக்ட் எலிமெண்டை ரிடர்ன் செய்கின்றது.

2.      ஃபங்க்சனல் காம்பனண்ட்களில் render என்ற மெத்தட் கிடையாது.

3.      ஸ்டேட்லெஸ் காம்பனட் என்றும் அறியப்படுகின்றது.இவை டேட்டாவை ஏற்று அவற்றை குறிப்பிட்டஃபார்மில் வெளியிடுகின்றது.முக்கியமாக UI என்பதை ரெண்டெர் செய்கின்றது.

4.      ரியாக்ட் லைஃப் சைக்கிள் மெத்தடுகளை ஃபங்க்சனல் காம்பண்ட் களில் எழுத முடியாது.

கிளாஸ் காம்பனண்ட்ஸ்

1.      இது காம்பனண்ட் கிளாஸை எக்ஸ்டென்ட் செய்யும் கிளாஸ் ஆகும்.இது ரெண்டெர் மெத்தட் மூலம் ஒரு ரியாக்ட் எலிமெண்டை ரிடர்ன் செய்யும் .

2.      இது HTML –ஐ ரிடர்ன் செய்யுன் ரெண்டெர் மெத்தடை கட்டாயம் கொண்டிருக்க வேண்டும்.

3.      இவை லாஜிக் மற்றும் ஸ்டேட்டை இம்ப்லிமென்ட் செய்வதால் ஸ்டேட்ஃபுல் என  அறியப்படுகின்றது.

4.      இந்த கிளாசின் உள்ளே லைஃப் சைக்கிள் மெத்தடுகளை எழுதலாம்.

 

 

நன்றி.

முத்து கார்த்திகேயன்,மதுரை.

ads Udanz