Saya baru-baru ini menguasai ekspresi Lambda yang diperkenalkan di java 8. Saya menemukan bahwa setiap kali saya menggunakan antarmuka fungsional, saya cenderung selalu menggunakan ekspresi Lambda alih-alih membuat kelas yang mengimplementasikan antarmuka fungsional.
Apakah ini dianggap praktik yang baik? Atau situasi mereka di mana menggunakan Lambda untuk antarmuka fungsional tidak tepat?
Jawaban:
Ada sejumlah kriteria yang harus membuat Anda mempertimbangkan untuk tidak menggunakan lambda:
priceIsOver100
.x -> x.price > 100
hanya sejelas nama itu. Maksud saya nama-nama sepertiisEligibleVoter
itu menggantikan daftar syarat yang panjang.Jangan berlebihan. Ingat, perangkat lunak mudah diubah. Jika ragu, tuliskan keduanya dan lihat mana yang lebih mudah dibaca.
sumber
Tergantung. Setiap kali Anda menemukan diri Anda menggunakan lambda yang sama di tempat yang berbeda, Anda harus mempertimbangkan untuk mengimplementasikan kelas yang mengimplementasikan antarmuka. Tetapi jika Anda akan menggunakan kelas dalam anonim jika tidak saya pikir lambda jauh lebih baik.
sumber
Saya mendukung jawaban Karl Bielefeldt, tetapi ingin memberikan tambahan singkat.
sumber
Akses ke variabel lokal dari cakupan terlampir
Jawaban yang diterima oleh Karl Bielefeldt benar. Saya dapat menambahkan satu lagi perbedaan:
Kode lambda yang bersarang di dalam metode di dalam kelas dapat mengakses variabel akhir yang efektif yang ditemukan dalam metode & kelas itu.
Membuat kelas yang mengimplementasikan antarmuka fungsional tidak memberi Anda akses langsung ke status kode panggilan.
Untuk mengutip Java Tutorial (penekanan):
Jadi, sementara ada manfaat untuk mengeluarkan kode panjang dan menamainya, Anda harus mempertimbangkan itu terhadap kesederhanaan akses langsung ke keadaan metode & kelas terlampir.
Lihat:
sumber
Ini mungkin nit-picking, tetapi untuk semua poin bagus lainnya yang dibuat dalam jawaban lain, saya akan menambahkan:
Pilih Referensi Metode bila memungkinkan. Membandingkan:
melawan
Menggunakan referensi metode menghemat kebutuhan Anda untuk menamai argumen lambda, yang biasanya berlebihan dan / atau mengarah ke nama-nama malas seperti
e
ataux
.sumber
Berdasarkan jawaban Matt McHenry, mungkin ada hubungan antara lambda dan referensi metode di mana lambda dapat ditulis ulang sebagai serangkaian referensi metode. Sebagai contoh:
vs.
sumber