Sabtu, 17 Oktober 2015

Template Function Vs Overloading Function Pada C++

Halo pembaca setia digital saintis. Maaf rasanya sudah lama sekali saya tidak kembali menulis, mungkin karena mengingat waktu yang hanya tetap 24 jam sehari, namun hal yang harus dikerjakan terus bertambah :D. Ok langsung saja saya akan mencoba membahas topik yang akan saya tulis kali ini. Topik kali ini adalah perbandingan antara penggunaan Template Function dengan Overloading Function. Kenapa saya mencoba menulis topik ini, karena saya pernah bertemu sebuah situasi yang mana ada sebuah method atau fungsi memerlukan nilai kembalian (return) yang berbeda, namun dengan type parameter yang sama. Kemudian saya menjadi teringat dengan penggunaan Template Function.

Pada situasi tersebut, memang ada solusi lain untuk menjawabnya, kita tinggal melakukan casting pada nilai hasil kembalian dari fungsi tersebut menjadi nilai type yang kita inginkan. Tetapi menurut hemat saya, cara itu tidak akan selamanya berhasil. Karena misal jika ada sebuah fungsi dengan nilai kembalian (return) bertipe float, kemudian kita ingin melakukan casting nilai tersebut menjadi int, maka akan ada pembuangan nilai seperti 3.3 akan menjadi 3. Kita kehilangan originalitas nilai sebesar 0.3. Jadi karena itu saya mencoba memilih solusi dengan menggunakan Template Function.

Untuk situasi seperti itu, teknik overloading dari salah satu cabang ilmu Object Oriented Programming juga tidak bisa menjadi solusi. Karena overloading tidak bisa membuat 2 fungsi yang memiliki nama sama, jumlah parameter yang sama, tipe parameter yang sama namun tipe kembalian nilainya yang berbeda. Pada topik ini saya lebih mengulas fungsi yang mengembalikan nilai, karena yang kita tahu sebenarnya fungsi itu sendiri memiliki 2 macam, yang mengembalikan nilai (return) dan yang tidak mengembalikan nilai (void).

Saya akan mencoba menjelaskan terlebih dahulu tentang apa itu Template Function. Template Function adalah salah satu feature atau keunggulan dari C++. Dengan Template Function, kita bisa membuat sebuah fungsi secara general dengan akan menerima berbagai macam tipe data. Berikut adalah rumusan umum untuk membuat sebuah Template Function pada C++.

template <class type> type func_name(type arg1, ...);
*http://www.cprogramming.com/tutorial/templated_functions.html

Dari rumusan umum di atas, saya mencoba membuat sebuah program sederhana dengan membuat dan menggunakan Template Function sebagai contohnya. Berikut adalah program sederhana yang saya buat.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>

using namespace std;

template <class type> type addWithTemplate(type a, type b)
{
    return a + b;
}

int addWithOverloading(int a, int b)
{
    return a + b;
}

float addWithOverloading (float a, float b)
{
    return a + b;
}

int main()
{        
    cout << "addWithTemplate(5, 5) : " << addWithTemplate(5, 5) << endl;
    cout << "addWithTemplate(5.5f, 5.5f) : " << addWithTemplate(5.5f, 5.5f) << endl;
    cout << "\n******************************************************************\n" << endl;
    cout << "addWithOverloading(3.5f, 3.5f) : " << addWithOverloading (3.5f, 3.5f) << endl;
    cout << "addWithOverloading(3, 3) : " << addWithOverloading (3, 3) << endl;
    return 0;
}

Pada baris 5 - 8 menjelaskan bahwa saya membuat sebuah Template Function dengan nama addWithTemplate dengan dua parameter yang bernama a dan b. Tipe parameter - parameter tersebut tidak dideklarasikan secara eksplisit, namun diganti menggunakan type. Dari identifier type tersebut yang akan membuat fungsi addWithTemplate bisa menerima tipe data apa saja. Dapat kita lihat bersama, fungsi tersebut hanyalah tidak lebih dari sebuah fungsi penjumlahan biasa antara dua nilai.

Pada baris 10-18 menjelaskan bahwa saya membuat fungsi penjumlahan pula dengan nama fungsinya addWithOverloading, namun dengan teknik Overloading Function. Saya membuat dua fungsi yang overloading, pertama bertipe int dan kedua bertipe float.

Pada baris 22-26 adalah pemanggilan fungsi-fungsi yang telah dibuat tadi. Untuk baris 22 saya memanggil fungsi addWithTemplate dengan nilai parameter masing - masing 5 (int). Untuk baris 23 saya juga memanggil fungsi addWithTemplate dengan nilai parameter masing - masing 5.5f (float). Lalu pada baris 25 saya memanggil fungsi addWithOverloading dengan nilai parameter masing - masing 3.5f (float). Untuk baris 26 saya juga memanggil fungsi addWithOverloading dengan nilai parameter masing - masing 3(int).

Berikut adalah hasil dari program tersebut jika dijalankan.

Gambar Hasil Program Penggunaan Template Function & Overloading Function
Terlihat pada hasilnya, untuk fungsi addWithTemplate, meskipun dengan tipe parameter int atau float, tetap bisa menghasilkan dengan benar. Begitupun juga dengan fungsi addWithOverloading, dapat menghasilkan nilai yang benar dan sesuai. Hanya saja fungsi addWithOverloading harus dideklarasikan dua kali dengan hanya dibedakan tipe parameternya, sedangkan fungsi addWithTemplate cukup sekali dalam pendeklarasiannya. Jadi jelas lebih simple penggunaan Template Function dan lebih efisien dari sisi code yang ditulis.

Jadi kembali dengan situasi permasalahan pada awal - awal paragraf yang telah saya tulis, bahwa Template Function bisa menjadi solution yang tepat, karena kita tidak perlu memerlukan casting lagi yang dapat menyebabkan originalitas nilainya berkurang.

Semoga tulisan kali ini cukup bermanfaat dan bisa memberikan wawasan kepada teman-teman khususnya para developer C++ yang sudah membaca tulisan saya ini. Terimakasih.

*Note : Seharusnya feature Template Function ini tidak hanya ada pada C++, melainkan ada pula pada Java dan C# CMIIW

Tidak ada komentar:

Posting Komentar