Friday, March 19, 2010

Membuat Fungsi Berbentuk Template

Perhatikan contoh fungsi berikut :


int getNilaiTerkecil(int a, int b)
{
int hasil = b;
if (a<b)
{
hasil = a;
}
return hasil;
}

fungsi diatas digunakan untuk memilih nilai terkecil diantara dua nilai, a dan b. Jika a lebih kecil dari b maka nilai kembalian dari fungsi ini adalah a sebaliknya yang dikembalikan adalah nilai b.

Dari pendeklarasian fungsi tersebut, kita dapat melihat bahwa fungsi ini hanya bisa digunakan untuk tipe bilangan int, karena kedua parameternya, a & b, memiliki tipe int. Jika kita menggunakan tipe data yang lain, maka akan terjadi kesalahan kalkulasi.

int nilai_a = 5;
int nilai_b = 7;
int hasil = getNilaiTerkecil(nilai_a, nilai_b);
cout << hasil ; // akan tertampil 5

double nilai_a2 = 5.2;
double nilai_b2 = 7;
double hasil2 = getNilaiTerkecil(nilai_a2, nilai_b2);
cout << hasil2 ; // akan tertampil 5 <-- SALAH

salah satu teknik yang bisa kita pakai sebagai solusi dari masalah diatas adalah dengan membuat lagi sebuah fungsi baru dengan nama yang sama namun menggunakan parameter bertipe : double

double getNilaiTerkecil(double a, double b)
{
double hasil = b;
if (a<b)
{
hasil = a;
}
return hasil;
}

Kelemahan cara ini menurut saya, ukuran baris di dalam program kita menjadi lebih banyak. karena kita harus menuliskan ulang fungsi yang sama, namun yang diganti hanyalah bagian tipe data.

Untuk membuat program yang lebih ramping dan mampu menyelesaikan masalah diatas, kita bisa menggunakan template. Dengan menggunakan template, tipe data yang hendak dipakai bisa ditentukan oleh kita saat pemanggilan fungsi tersebut :

int nilai_a = 5;
int nilai_b = 7;
int hasil = getNilaiTerkecil<int>(nilai_a, nilai_b);
cout << hasil ; // akan tertampil 5

double nilai_a2 = 5.2;
double nilai_b2 = 7;
double hasil2 = getNilaiTerkecil<double>(nilai_a2, nilai_b2);
cout << hasil2 ; // akan tertampil 5.2 <-- BENAR

Berikut ini adalah bentuk fungsi getNilaiTerkecil(), jika dituliskan dalam bentuk template :

template <typename TIPEDATA>
TIPEDATA getNilaiTerkecil(TIPEDATA a, TIPEDATA b)
{
TIPEDATA hasil = b;
if (a<b)
{
hasil = a;
}
return hasil;
}

kata 'typename' bisa juga diganti dengan 'class'. Tidak ada beda, apakah kita menggunakan 'typename' atau menggunakan 'class'. Namun umumnya jika TIPEDATA yang akan dipakai adalah berupa class, maka yang digunakan adalah 'class' bukan 'typename'.

No comments:

Post a Comment