Czytałem „JavaScript: dobre części” i autor wspomina, że JavaScript jest pierwszym z uruchomionych języków lambda.
Funkcje JavaScript są obiektami pierwszej klasy z (głównie) zakresem leksykalnym. JavaScript jest pierwszym językiem lambda, który wszedł do głównego nurtu. W głębi duszy JavaScript ma więcej wspólnego z Lisp i Scheme niż z Javą. To Lisp w ubraniu C. To sprawia, że JavaScript jest niezwykle potężnym językiem.
Nie rozumiem, co to jest język lambda. Jakie właściwości ma taki język i czym różni się od języków takich jak Java, C, C ++ i Php?
javascript
lambda
sushil bharwani
źródło
źródło
Odpowiedzi:
Nigdy nie słyszałem, żeby ktokolwiek używał terminu „język lambda”, a jedyne prawdopodobne definicje, jakie przychodzą mi do głowy, wykluczałyby JavaScript jako „pierwszy”.
To powiedziawszy, podejrzewam, że może mieć na myśli:
function
składni JavaScript; jest to napisanelambda
w wielu językach, stąd prawdopodobnie „języki lambda”.Oba zwyczaje wywodzą się z użycia greckiej litery lambda do oznaczenia abstrakcji funkcji w rachunku lambda, modelu obliczeń opracowanym przez Alonzo Churcha, na którym opiera się programowanie funkcjonalne.
Edycja: spojrzałem na wynik w Książkach Google --- "pierwszy do głównego nurtu"; cóż, to dyskusyjne. Stwierdziłem, że LISP był w pewnym momencie przynajmniej rozsądnie głównym nurtem. To słuszna uwaga, semantyka JavaScript jest bezpośrednio inspirowana schematem iz pewnością dotarła do większej liczby odbiorców niż jakikolwiek inny język, który może wysuwać podobne twierdzenia.
źródło
Mówiąc prościej, język lambda to język, który umożliwia przekazanie funkcji do innej funkcji, przy czym funkcja ta jest traktowana jak każda inna zmienna. Powinieneś także móc zdefiniować tę funkcję, aby była przekazywana anonimowo (lub w tekście). PHP 5.3 dodał obsługę funkcji lambda. Czy JavaScript był pierwszym głównym językiem? Lisp był szeroko stosowany w ustawieniach edukacyjnych przed JavaScriptem, a także w dostosowywaniu naszego ukochanego Emacsa http://www.gnu.org/software/emacs/manual/html_node/eintr/
Oto przykład
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})
Czym różni się od C? W C możesz przekazać wskaźnik do funkcji, ale nie możesz zdefiniować go anonimowo.
W Javie (przed wersją 8), aby osiągnąć ten sam efekt, należy przekazać obiekt implementujący interfejs, który w rzeczywistości można zdefiniować anonimowo w tekście.
źródło
Odnosi się do rachunku Lambda .
źródło
Widziałem lambdę zdefiniowaną jako funkcja anonimowa i jako odniesienie do funkcji. Javascript obsługuje oba:
setTimeout(function(){ /* an anonymous function */ }, 100) var f = function(){ /* function ref */ }
W tym miejscu JS uzyskuje dużą moc i elastyczność. Java obsługuje do pewnego stopnia pierwszą (implementacje anonimowych interfejsów),
ale nie drugą- zobacz poniżej aktualizację dla Java 8.Nie jest dla mnie jasne, która z nich (lub obie) jest właściwą definicją lambdy.
JS zdecydowanie nie jest pierwszym językiem obsługującym te funkcje. Wychodząc z pamięci, myślę, że to drobiazg, że entuzjaści języków zawsze zachwycają się wspieraniem lambd.
BTW: W Javie, klasa anonimowa jest zwykle używana do przekazywania definicji klasy w locie dla argumentu (często używana w ruchu). Coś takiego (z pamięci, nieskompilowane):
someGuiContainer(new WidgetInterface() { public void importantMethodToDefine(){ // Handle having the method called in my special widget way } } )
Aktualizacja
Java, od 8, jest teraz oficjalnie językiem Lambda.
Możesz teraz użyć następującej składni:
MathOperation addition = (int a, int b) -> a + b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
Źródło kodu
źródło
W otwartym kursie MIT zatytułowanym struktura i interpretacja programów komputerowych jest to książka autorstwa Hala Abelsona, Jerry'ego Sussmana i Julie Sussman. Omawiają Schemat, który jest dialektem LISP-a i tam wyjaśniają bardzo szczegółowe i jasne wyjaśnienie czym jest lambda i Schemat LISP-a oraz języki w ogóle. Gorąco polecam przyjrzeć się temu, jeśli chcesz mieć naprawdę jasne i głębokie zrozumienie programowania komputerowego. Wyjaśnienie ci zajęłoby trzy razy więcej czasu, niż gdybyś tam poszedł i po prostu przeczytał książkę lub obejrzał samouczki, które doskonale to wyjaśniają, to genialne.
Javascript jest oparty głównie na języku Scheme i jest ojcem Lispa, a ponadto wziął swoją strukturę lamda i wszedł z nim do głównego nurtu.
źródło
Z Wikipedii: W językach programowania, takich jak Lisp i Python, lambda jest operatorem używanym do oznaczania anonimowych funkcji lub domknięć, po zastosowaniu rachunku lambda. Przykładem zastosowania lambdy w języku Python jest ta sekcja kodu komputerowego, która sortuje listę alfabetycznie według ostatniego znaku każdego wpisu:
>>> 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
źródło
JavaScript pozwala zdefiniować funkcję anonimową, czyli funkcję, która nie jest powiązana z identyfikatorem. Taka funkcja jest również znana jako Lambda Abstraction, a ponieważ JS obsługuje tę funkcję, jest znana jako Lambda Language.
Właściwości: Ta funkcja jest potrzebna w przypadku natychmiastowego wykonania funkcji lub do krótkotrwałego użycia, gdy nie ma znaczenia nadawanie nazwy funkcji.
Różni się od języków takich jak Java, C, C ++ i PHP, ponieważ w JS Anonymous funkcje są używane do zamykania i curry.
źródło