Saya membaca "JavaScript: Bagian yang Baik" dan penulis menyebutkan bahwa JavaScript adalah bahasa lambda pertama yang diluncurkan.
Fungsi JavaScript adalah objek kelas satu dengan (kebanyakan) cakupan leksikal. JavaScript adalah bahasa lambda pertama yang menjadi mainstream. Jauh di lubuk hati, JavaScript memiliki lebih banyak kesamaan dengan Lisp dan Skema daripada dengan Java. Ini adalah pakaian Lisp in C. Ini membuat JavaScript menjadi bahasa yang sangat kuat.
Saya tidak mengerti apa itu bahasa lambda. Apa sajakah properti bahasa tersebut dan apa bedanya dengan bahasa seperti Java, C, C ++ dan Php?
javascript
lambda
sushil bharwani
sumber
sumber
Jawaban:
Saya belum pernah mendengar ada orang yang menggunakan istilah "bahasa lambda", dan satu-satunya definisi yang masuk akal yang dapat saya pikirkan akan mengecualikan JavaScript sebagai "yang pertama".
Karena itu, saya kira dia mungkin bermaksud:
function
sintaks di JavaScript; ini ditulislambda
dalam banyak bahasa, karenanya mungkin "bahasa lambda".Kedua penggunaan tersebut berasal dari penggunaan huruf yunani lambda untuk menunjukkan abstraksi fungsi dalam kalkulus lambda, model komputasi yang dirancang oleh Gereja Alonzo dan yang menjadi dasar pemrograman fungsional.
Sunting: melihat hasil Google Buku --- "pertama menjadi arus utama"; baik, itu bisa diperdebatkan. Saya akan mengemukakan bahwa LISP pada satu hal setidaknya cukup umum. Ini adalah poin yang adil, semantik JavaScript secara langsung terinspirasi oleh Skema dan tentu saja menjangkau audiens yang lebih besar daripada bahasa lain yang dapat membuat klaim serupa.
sumber
Bahasa lambda, dalam istilah sederhana, adalah bahasa yang memungkinkan penerusan fungsi ke fungsi lain, di mana fungsi tersebut diperlakukan sebagai variabel lain. Selain itu, Anda harus dapat menentukan fungsi ini untuk diteruskan secara anonim (atau sebaris). PHP 5.3 menambahkan dukungan untuk fungsi lambda. Apakah JavaScript adalah bahasa utama pertama? Lisp telah banyak digunakan dalam pengaturan pendidikan sebelum JavaScript dan juga dalam menyesuaikan Emacs tercinta kami http://www.gnu.org/software/emacs/manual/html_node/eintr/
Berikut contohnya
function applyOperation(a, b, operation) { return operation(a,b); } function add(a,b) { return a+ b; } function subtract(a,b) {return a - b;} // Can be called like applyOperation(1,2, add); applyOperation(4,5, subtract); // Anonymous inline function applyOperation(4,7, function(a,b) {return a * b})
Apa bedanya dengan C? Di C, Anda bisa meneruskan pointer ke fungsi, tapi Anda tidak bisa mendefinisikannya sebaris secara anonim.
Di Java (sebelum versi 8), untuk mencapai efek yang sama, Anda harus meneruskan objek yang mengimplementasikan antarmuka, yang sebenarnya dapat didefinisikan sebaris secara anonim.
sumber
Dia mengacu pada kalkulus Lambda .
sumber
Saya telah melihat lambda didefinisikan sebagai fungsi anonim dan sebagai referensi ke suatu fungsi. Javascript mendukung keduanya:
setTimeout(function(){ /* an anonymous function */ }, 100) var f = function(){ /* function ref */ }
Di sinilah JS mendapatkan banyak kekuatan dan fleksibilitasnya. Java mendukung yang pertama sampai batas tertentu (implementasi antarmuka anonim),
tetapi tidak mendukung yang terakhir- lihat di bawah untuk pembaruan untuk Java 8.Tidak jelas bagi saya yang mana (atau keduanya) di antaranya adalah definisi lambda yang tepat.
JS jelas bukan bahasa pertama yang mendukung fitur ini. Berangkat dari ingatan, saya pikir itu adalah percakapan kecil yang selalu dipuji oleh para penggemar bahasa tentang mendukung lambda.
BTW: Di Jawa, kelas anonim biasanya digunakan untuk meneruskan definisi kelas dengan cepat untuk sebuah argumen (digunakan banyak dalam ayunan). Sesuatu seperti ini (dari memori, tidak dikompilasi):
someGuiContainer(new WidgetInterface() { public void importantMethodToDefine(){ // Handle having the method called in my special widget way } } )
Memperbarui
Java, pada 8, sekarang secara resmi menjadi bahasa Lambda.
Anda sekarang dapat menggunakan sintaks berikut:
MathOperation addition = (int a, int b) -> a + b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
Sumber Kode
sumber
Dalam kursus terbuka MIT yang disebut struktur dan interpretasi program komputer sebuah buku oleh Hal Abelson, Jerry Sussman dan Julie Sussman. Mereka membahas Skema, yang merupakan dialek dari LISP dan di sana mereka menjelaskan penjelasan yang sangat rinci dan jelas tentang apa itu lambda dan Skema LISP dan bahasa secara umum. Saya sangat menyarankan Anda melihatnya jika Anda ingin memiliki pemahaman yang benar-benar jelas dan mendalam tentang Pemrograman Komputer. Untuk menjelaskan kepada Anda akan memakan waktu tiga kali lebih banyak daripada jika Anda pergi ke sana dan hanya membaca buku atau menonton tutorial yang menjelaskannya dengan sempurna, itu jenius.
Javascript terutama didasarkan pada Skema bahasa dan itu adalah ayah Lisp, dan sebagai tambahan ia mengambil struktur lamda dan menjadi arus utama dengannya.
sumber
Dari wikipedia: Dalam bahasa pemrograman seperti Lisp dan Python, lambda adalah operator yang digunakan untuk menunjukkan fungsi atau penutupan anonim, mengikuti penggunaan kalkulus lambda. Contoh penggunaan lambda dalam bahasa Python ini adalah bagian kode komputer ini yang mengurutkan daftar menurut abjad dengan karakter terakhir dari setiap entri:
>>> list = ['woman', 'man', 'horse', 'boat', 'plane', 'dog'] >>> sorted(list, key=lambda word: word[-1]) ['horse', 'plane', 'dog', 'woman', 'man', 'boat'] * In the C# programming language a lambda expression is an anonymous function that can contain expressions and statements
sumber
JavaScript memungkinkan untuk mendefinisikan fungsi Anonim yaitu fungsi yang tidak terikat pada pengenal. Fungsi seperti itu juga dikenal sebagai Abstraksi Lambda dan karena JS mendukungnya, ini dikenal sebagai Bahasa Lambda.
Properti: Fungsi ini diperlukan dalam kasus eksekusi segera dari suatu fungsi atau untuk penggunaan jangka pendek, di mana tidak ada arti penting memberi nama pada fungsi.
Ini berbeda dari bahasa seperti Java, C, C ++ dan PHP seperti dalam fungsi JS Anonymous yang digunakan untuk Closure dan Currying.
sumber