Lazy Evaluation
Pendahuluan
Di dunia IT Software engineering, Lazy Evaluation adalah konsep yang sering dipakai untuk meningkatkan efisiensi dari sistem.
Lazy Evaluation atau disebut juga call-by-need.
Ini adalah strategi evaluasi dimana eksekusi dari sebuah ekspresi ditunda hingga nilai tersebut benar-benar dibutuhkan.
Dengan kata lain, program hanya akan memproses bagian yang diperlukan saja, sehingga bisa menghemat resource dan meningkatkan performa.
Lazy Evaluation artinya :
- sebuah expression yang berisikan beberapa variable atau parameter.
- sudah didefinisikan dari awal.
- tetapi kenyataannya di evaluasi atau dijalankan/dilakukan komputasi nya pada saat dibutuhkan hasilnya saja.
Contohnya :
- Java Stream API yang mempunyai intermediate operation seperti filter, map, reduce, dll. Dan membutuhkan terminal operation agar evaluasinya berjalan.
- Closure yang membutuhkan variable terakhir agar fungsinya bisa dijalankan.
- Enumerasi dari nilai bilangan. Misalnya fungsi range() di phyton, atau generator.
- Subroutine yang bisa melakukan inject terhadap fungsi subroutine lain, misalnya terminologi thunk di Haskell.
- Penulisan message di file log yang biasa kita gunakan ketika membuat monitoring terhadap alur program kita.
Apa gunanya ?
Gunaya Lazy Evaluation tentunya efisiensi.
Entah misalnya :
- Efisiensi secara low level. Misalnya dalam melakukan enumerasi dari nilai bilangan. Tidak perlu menyimpan nilai range(10.000) dalam list yang terdiri dari 10.000 item.
- Reusable. Misalnya dengan Lazy Evaluation ini, maka kita bisa menggunakan fungsi closure yang sama untuk inputan yang banyak dan berbeda.
- Abstraksi. Lazy Evaluation ini membutuhkan kemampuan abstraksi kita terhadap proses yang ingin di tunda dulu sampai hasilnya dibutuhkan.
- Save temporary data. Dengan Lazy Evaluation maka kita dapat menyimpan data sementara sebagai masukan untuk proses selanjutnya, misalnya dengan memakai Memoization atau Thunk, dll.
Penggunaan Lazy Evaluation
Lazy evaluation banyak ditemui pada bahasa pemrograman fungsional seperti Haskell dan Lisp.
Konsep ini juga dapat diimplementasikan pada bahasa imperative seperti Python dengan teknik tertentu, seperti penggunaan generator dan iterators.
Pertimbangan dalam Menggunakan Lazy Evaluation
Meskipun memiliki keuntungan, lazy evaluation juga perlu dipertimbangkan dengan hati-hati. Beberapa hal yang perlu diperhatikan:
- Overhead Tambahan: Menunda eksekusi bisa menambah overhead karena program perlu melacak bagian ekspresi yang belum dievaluasi dan kapan harus mengevaluasinya.
- Kesulitan Debugging: Penundaan eksekusi dapat membuat debugging program menjadi lebih sulit karena urutan eksekusi aktual mungkin berbeda dari yang terlihat pada kode.
Kesimpulan
Lazy evaluation merupakan strategi evaluasi yang cukup bagus untuk mengoptimalkan program dan memungkinkan penanganan data kompleks.
Namun, penggunaannya perlu disesuaikan dengan kebutuhan dan dipertimbangkan potensinya terhadap overhead dan debugging.
Dengan pemahaman yang baik, lazy evaluation dapat menjadi alat yang berharga dalam pengembangan program yang efisien dan efektif.