Mengenai Lambda Expression
Lambda Expression atau yang biasa dikenal dalam bahasa pemrograman lain sebagai fungsi anonim (anonymous function) adalah fungsi yang didefinisikan tanpa menggunakan identifier. Lambda Expression mulai diperkenalkan pada Java SE 8 dengan tujuan untuk menyederhanakan penggunaan interface yang hanya memiliki satu metode abstrak.
Java Interface
Sebelum mengenal lebih jauh tentang lambda expression, ada baiknya kita mulai dengan mengingat kembali konsep interface dalam pemrograman java. Perhatikan contoh kode interface berikut ini :
interface PersegiPanjang {
double hitung(double panjang, double lebar);
}
Kode interface diatas dapat diimplementasikan menjadi class. Sebagai contoh, untuk menghitung luas persegi panjang kita gunakan kode seperti berikut :
class LuasPersegiPanjang implements PersegiPanjang {
@Override
public double hitung(double panjang, double lebar) {
return panjang * lebar;
}
}
Selanjutnya kita bisa bentuk dan gunakan objek dari class LuasPersegiPanjang
:
LuasPersegiPanjang luas = new LuasPersegiPanjang();
System.out.println(luas.hitung(8.5, 5));
Cara lain yang bisa digunakan adalah dengan membentuk class anonim (anonymous class) dari interface PersegiPanjang
PersegiPanjang keliling = new PersegiPanjang() {
@Override
public double hitung(double panjang, double lebar) {
return 2 * (panjang + lebar);
}
};
System.out.println(keliling.hitung(8.5, 5));
Syntax
Untuk bisa menggunakan lambda expression, interface yang akan diimplementasikan hanya boleh memiliki satu buah metode. Interface jenis ini biasa dikenal dengan nama functional interface.
Interface PersegiPanjang
yang sudah dibuat sebelumnya dapat diimplementasikan menggunakan lambda expression seperti berikut :
// luas
PersegiPanjang luas = (p, l) -> p * l;
System.out.println(luas.hitung(8, 5));
// keliling
PersegiPanjang keliling = (p, l) -> 2 * (p + l);
System.out.println(keliling.hitung(8, 5));
Di baris kedua dan kelima dari kode diatas kita langsung menyebutkan implementasi dari metode abstrak hitung()
yang disebutkan dalam interface PersegiPanjang
. Pada kedua baris tersebut kita gunakan operator arrow (->
) dengan sintaks seperti berikut :
(parameter) -> expression
Di sisi kiri operator adalah parameter
yang akan digunakan dalam expression
, bisa dikosongkan jika tidak dibutuhkan. Sedangkan di sisi kanan operator (expression
) adalah aksi yang akan dilakukan, sebagai contoh :
(p, l) -> p * l;
Penjelasan :
- Disisi kiri disebutkan dua parameter yaitu panjang (
p
) dan lebar (l
) dari persegi panjang - Disisi kanan disebutkan operasi yang akan dilakukan, dalam hal ini adalah mengalikan nilai parameter
p
danl
untuk mendapatkan luas
Penggunaan Umum
Berikut diperlihatkan beberapa contoh umum penggunaan lambda expression dalam pemrograman java.
ActionListener
Dalam pemrograman GUI Swing, interface ActionListener
digunakan untuk menerima event yang terjadi pada suatu objek seperti user mengklik tombol atau item menu. Interface ini hanya memiliki satu buah metode yaitu actionPerformed()
. Contoh implementasinya sebagai berikut :
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Hello World");
}
}
JButton btnSample = new JButton("Sample");
btnSample.addActionListener(new ButtonListener());
Kode diatas bisa disederhanakan dengan lambda expression menjadi seperti berikut :
JButton btnSample = new JButton("Sample");
btnSample.addActionListener((e) -> System.out.println("Hello World"));
Runnable
Interface Runnable
digunakan pada class yang objek bentukannya akan dieksekusi pada thread yang berbeda dari program utama. Interface ini hanya memiliki satu metode yaitu run()
. Contoh implementasinya adalah sebagai berikut :
class RunnableImpl implements Runnable {
@Override
public void run() {
int delay = 500;
int x = 0;
while(true) {
x++;
System.out.println("Baris perulangan ke-" + x);
try {
Thread.sleep(delay);
}
catch(InterruptedException exc) {
System.err.println(exc.toString());
}
}
}
}
Thread t = new Thread(new RunnableImpl());
t.start();
Kode diatas dapat ditulis dengan lambda expression seperti berikut :
new Thread(() -> {
int delay = 500;
int x = 0;
while(true) {
x++;
System.out.println("Baris perulangan ke-" + x);
try {
Thread.sleep(delay);
}
catch(InterruptedException exc) {
System.err.println(exc.toString());
}
}
}).start();
Komentar
Posting Komentar