Minggu, 19 Januari 2014

Video
Text

C++ No.13: Function Templates dan Class Templates


Tahukah anda apa itu templates? Templates bisa dibilang merupakan kerangka atau rancangan. Fungsi kerangka ini adalah untuk mempercepat kita membuat body nya. Anda kenal Codeigniter?? bisa dibilang Codeigniter itu adalah template code, meskipun lebih populer dengan Framework. Pernahkah anda menggunakan blogspot dan merubah templatenya??? Nah, kalo dalam blogspot itu adalah template untuk tampilan/appearance. Pada tutorial ini kita akan membahas tentang template code. :)


Template bisa dibilang merupakan smart coding. Mengapa? Karena kita hanya membuat rancangan saja. Bila anda berkecipung di bidang pemrograman GUI, anda akan mengenal GUI templates seperti QT, WxWidgets, Windows Api. Ya, ini adalah templates GUI, dengan menggunakan template ini kita tidak perlu membuat GUI sendiri, kita tinggal berfikir logic nya, sementara GUI telah disediakan oleh vendor. Enak bukan?

Coba perhatikan kode berikut:
a + b = c

Kita bisa mengisikan nilai apa saja ke dalam a, b, bukan?? Ini juga bisa di bilang template sederhana. Karena kita bisa memasukan bilangan apa saja ke dalam variable a, b, dan c.

Kode di atas lebih bermanfaat dan bisa digunakan setiap saat ketimbang 1 + 2 = 3 benar bukan??

Lalu bagaimana dengan templates dalam C++ ??

Yup, C++ menyediakan sebuah template pengkodean yaitu function templates dan class templates. Kita akan membahas satu persatu dalam tutorial ini.

A.FUNCTION TEMPLATES
Function template merupakan templates untuk fungsi / method. Penulisan template untuk function adalah sebagai berikut:
Lihat Gambar 1:


Nah, anda bisa perhatikan function template di atas. Template selalu di awali dengan kata ‘template’ diikuti dengan <>. Kita memiliki sebuah type dari variable yaitu ‘typeDataKu’. Ini bisa anda ubah dengan type data apa saja. Mari kita coba membuat sebuah fungsi tanpa template untuk dua buah type data berbeda.

Sebentar, tahukah anda apa itu type data??? :)

Perhatikan gambar berikut, kita membuat tiga buah function, masing masing function bertype int, long, dan double :
Lihat gambar 2:


Wah, kita membuat fungsi yang betul betul mirip, hanya type data saja yang beda bukan? Alangkah efektif dan efisien bila kita membuat sebuah template yang bisa meng-handle tidak hanya variable tapi juga type datanya.

Berikut merupakan templatenya, kalo pada contoh awal tutorial kita menggunakan ‘typeDataku’, sekarang kita akan menggunakan ‘T’. Yup, kebanyakan programmer menggunakan T saja sebagai pengganti nama yang lebih singkat.
Lihat gambar 3:


Simple bukan?? Lalu bagaimana cara memanggilnya??? Simple juga, perhatikan kode di bawah ini:
Lihat gambar 4:


Anda bisa lihat, untuk menggunakan function templates kita menggunakan format sebagai berikut:

function_name (parameter);

perlu diketahui bahwa penggunakan hanya digunakan saat type fungsi kita berbeda beda, coba lihat di atas, kita memiliki variable dari type fungsi yang berbeda-beda, ada int, ada long, double. Bila kita hanya memiliki satu type saja, int misalnya, maka kita tidak perlu menggunakan . Coba perhatikan contoh berikut ini:
Lihat gambar 5:


Nah, anda bisa lihat, kita hanya menggunakan int, jadi kita tidak perlu menggunakan , , karena hanya ada satu (int) yang diterapkan oleh function tambah.

Mudah bukan?

Berikut adalah contoh kodenya:
Lihat gambar 6:


B.CLASS TEMPLATES
Class templates ini pada dasarnya sama dengan Function template di atas, hanya saja ini untuk class. Coba bayangkan, , (yuk kita bayangkan :) ) , anda memiliki sebuah class, anda ingin class ini bisa menghandle banyak type data sekaligus, nah, apa yang akan anda lakukan untuk mempersingkat penulisan???

Coba perhatikan class saya yang SALAH berikut ini.
Lihat gambar 7:


Lihat gambar di atas, kita membuat banyak class untuk sebuah fungsi yang pekerjaannya sama. Hal ini akan sangat tidak efisien, maka dari itu kita bisa menggunakan Class template seperti di bawah ini:

Lihat gambar 8:


Nah, anda bisa lihat, class dan fungsi kita sebelumnya kita sederhanakan menjadi seperti pada gambar. Nah, kemudian bagaimana penerapannya??? Mudah saja, silahkan lihat kode berikut ini.
Lihat gambar 9:



Mudah sekali bukan penerapan dari Class Template ini??

Nah, ada kasus baru, bagaimana bila kita membuat satu class, tapi satu class ini kita buat perlakuan yang berbeda untuk setiap type. Bingung??? Di awal kan kita sudah membuat perlakuan yang sama pada type berbeda, baik int, long, doble kita berlakukan fungsi yang sama. Bagaimana bila kita berikan perlakuan yang berbeda untuk int dan long?? :)

Perlakuan yang berbeda ini kalo dalam C++ bahasa kerennya adalah template specialization.

Sebagai contoh, saya akan membuat 2 buah file type yaitu int dan char. Semua nya berada dalam satu class templates inputku misalnya.

Lihat gambar 9:


Lihat gambar di atas, pertama kita akan membuat class template untuk bilangan int. Lihat, kode di atas hanya berlaku untuk type int bukan??? Nah, bagaimana kalo kita ingin memberikan perlakuan untuk bilangan tidak type int, char misalnya. Kita akan mengetikan kode seperti berikut ini:

Lihat gambar 11:


Nah, di atas kita membuat class yang sama dan fungsi yang sama dengan template specialization. Anda bisa lihat, kita memberikan perlakuan pada type char (di sini kita memasukan input nya adalah a.

Untuk penulisan template specialization sendiri adalah seperti pada gambar di atas yang saya block biru. Kemudian implementasinya saya tandai lingkaran merah.
Intinya kita hanya perlu menambahkan template<> saja. Serta pada fungsi kita harus menyetakan type data nya.

char tambahSatu(char myinput)

bukan

T tambahSatu(T myinput)

Demikian tutorial basic tentang function template dan class template, semoga bermanfaat dan sampai jumpa kembali pada tutorial berikutnya.
Salam.

Please share bila tutorial ini cukup berbobot untuk anda!

MediaTutorial mengedepankan tutorial yang berkualitas. Semua penjelasan dipaparkan sedetail mungkin.
Please, bila tutorial ini membantu anda dan cukup berkualitas bagi anda mohon untuk share pada button sharing berikut ini.

Writen by: Okie Eko Wardoyo

Comments

Tidak ada komentar:

Poskan Komentar