Februari 6, 2007

foreach dan generik

Posted in Java, komputer pada 6:18 am oleh fuad

Generik

Generik adalah kemampuan baru pada Java 1.5 yang digunakan dalam pembentukan Collection (List, Set, dll). Para pengguna Java tentu mengetahui salah satu kelemahan penggunaan Collection sebelumnya adalah adanya keharusan untuk mengcasting Objek saat diambil dari Collection. Proses pengcastingan ini cukup berbahaya karena pengecekan apakah Casting bisa dilakukan dengan benar dilakukan saat runtime sehingga berisiko menghasilkan RuntimeException.

Untuk mengatasi hal di atas maka saat pembentukan Collection, telah diberitahu lebih dahulu tipe apa yang akan ada di dalam Collection inilah yang disebut generik. Generik dilakukan dengan menambahkan tipe data/tipe objek saat pendeklarasian Collection.

Contoh deklarasi lama:
List l = new ArrayList();

Set s = new HashSet();

Contoh deklarasi dengan generik:

List <Integer>l = new ArrayList<Integer>();

Set<Double> s = new HashSet<Double>();

Penggunaan Generik mengakibatkan dua hal:

1. Kompiler akan mengecek apakah elemen yang ditambahkan ke dalam Collection valid atau tidak sehingga saat anda menambahkan elemen yang bertipe data berbeda dengan yang bisa diterima Collection maka akan terjadi Compile Error.

import java.util.*;

class Test{

public static void main (String [] args){

List<Integer> l = new ArrayList<Integer>();

l.add(new Integer(1));

}

}

Pada kode di atas Collection yang berupa List hanya akan menerima data yang bertipe Integer. Ketika anda mencoba menambahkan tipe data yang lain ke dalam List tersebut maka list tersebut akan error.

import java.util.*;

class Test{

public static void main (String [] args){

List<Integer> l = new ArrayList<Integer>();

l.add(new Double(1));

}

}
Sebagai contoh saya mencoba memasukkan data bertipe Double. Jika anda menggunakan Java 1.5 ke atas kode akan mengalami error saat kompilasi, tetapi tidak jika anda menggunakan versi sebelumnya.

2. Dalam pengambilan objek dari Collection anda tidak perlu lagi melakukan pengcastingan karena tipe data yang ada pada Collection telah didefinisikan lebih dahulu.

import java.util.*;

class Test{

public static void main (String [] args){

List<Integer> l = new ArrayList<Integer>();

l.add(new Integer(1));

Integer i=l.get(0);

}

}

 

Foreach

Foreach adalah syntax baru Java yang diperkenalkan semenjak Java 1.5. Foreach sangat berguna ketika anda ingin menjelajahi semua elemen dalam satu Collection atau array. Syntax baru ini dikeluarkan karena sebelumnya untuk melakukan penjelajahan pada Collection menggunakan metode Iterator yang cukup rumit dalam penggunaannya.

import java.util.*;

class Test{

public static void main (String [] args){

List<Integer> l = new ArrayList<Integer>();

l.add(1);

l.add(2);

Iterator iter=l.iterator();

while(iter.hasNext()){

Object i=iter.next();

System.out.println(i);

}

}

}

Dalam penggunaan iterator seperti contoh di atas untuk menjelajahi Collection satu persatu diperlukan minimal 2 baris kode, yaitu mengambil objek iterator dan mengiterasinya menggunakan while. Satu lagi kelemahan penggunaan iterator yang lain adalah keharusan mengcasting Collection walapun Collection telah menggunakan Generik.

Dengan foreach hal di atas bisa disederhanakan

import java.util.*;

class Test{

public static void main (String [] args){

List<Integer> l = new ArrayList<Integer>();

l.add(1);

l.add(2);

for(Integer i : l){

System.out.println(i);

}

}

}

Jika sebelumnya untuk menjelajahi Collection dibutuhkan minimal dua baris kode, maka dengan foreach kita hanya membutuhkan satu baris kode. Foreach juga sepenuhnya menggunakan kemampuan generik sehingga kita tidak perlu pengcastingan lebih dahulu.

Secara umum syntax foreach adalah:

for(<tipedatadalam Collection atay array> <namavariabel> : <Collection atau array yang akan dijelajahi>)

<statemen>

Dalam penggunaannya dalam array, foreach tidak terlalu banyak berguna karena dengan menggunakan perulangan for biasa penjelajahan array bisa dilakukan dengan maksimal. Salah satu kelebihan foreach dibandingkan dengan for dalam penjelajahan array adalah syntax yang sederhana dan tidak perlunya menggunakan indeks saat mengakses elemen dalam array.

import java.util.*;

class Test{

public static void main (String [] args){

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

for(int i : arr)

System.out.println(i);

}

}

Tetapi dalam menjelajahi array foreach memiliki keterbatasan, bahwa di dalam foreach kita tidak bisa melakukan pemanipulasian terhadap isi array. Karena foreach tidak mereferensi langsung pada isi array tersebut.

import java.util.*;

class Test{

public static void main (String [] args){

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

for(int i :arr)

i=i+1;

for(int i : arr)

System.out.println(i);

}

}

Kode di atas sama sekali tidak akan mengubah isi array array. Sehingga saat anda mencetaknya yang tampil tetap array yang asli.

Daftar Kata

Collection : Tipe umum Struktur data Java, struktur data List, Set, Map, dan lain lain diturunkan dari kelas ini. Biasanya digunakan untuk mengacu pada keseluruhan struktur data pada Java.

RuntimeException : Eksepsi yang dilempar Java ketika terjadi kesalahan saat program Java dijalankan

4 Komentar »

  1. belle said,

    ” Kompiler akan mengecek apakah elemen yang ditambahkan ke dalam Collection valid atau tidak sehingga saat anda menambahkan elemen yang bertipe data berbeda dengan yang bisa diterima Collection maka akan terjadi Compile Error. ”

    hmm.. saya baru blajar ttg Collection dalam Java. setau saya, salah satu kelebihan ArrayList adalah dia bisa menerima tipe data apapun in a single ArrayList. nah, kl dikasi konsep generic itu, bukankah menghilangkan sifat tsb? CMIIW.

  2. fuad said,

    Biasanya sih satu objek arraylist digunakan untuk hanya satu objek saja.

  3. belle said,

    hmm.. kl gtu, ga beda sm array donk. kecuali bahwa ArrayList sifatnya lebih dinamis dalam hal size. CMIIW (again).

  4. fuad said,

    Ya kalau sama arraylist dengan array memang bedanya salah satu nya itu. Kan susah dong waktu get value dari array list (casting) kalau misal tidak tahu tipe isi nilai nya. Kecuali kalau kita hafal di indeks segini String, lalu indeks berikut nya itu misal Integer. Kalau misal liat di source code array list, implementasi nya pake array


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: