Jason. Cała informatyka w jednym miejscu!

Wyrażenie lambda jest kolejnym fragmentem układanki w języku JavaScript. W sumie nie wiem czy zaliczyć to do zakresu podstawowego, czy pobocznego gdyż to niby tylko dodatek, a otwierający wrota do zmiany kodu do wykonania jak rękawiczki. Dowiedzcie się wszyscy chętni do czego służy funkcja "strzałkowa" i co nam daje jej użycie.

WYRAŻENIE LAMBDA W JĘZYKU JAVASCRIPT TO "DRZWI" DO PROGRAMOWANIA FUNKCYJNEGO!

Jednym zdaniem, wyrażenie lambda (nazywane też "funkcją strzałkową") to funkcja przekazywana do innej funkcji jako parametr. Służy to do kontrolowania wykonywanych serii instrukcji co każde osobne wywołanie funkcji przyjmującej za parametr lambdę. Jesteśmy przyzwyczajeni do przekazywania wartości jako parametry, ale funkcja? W JavaScript jest to możliwe i to stanowi początek poznawania paradygmatu funkcyjnego polegającego na wykorzystywaniu funkcji (lambd) jako danych innych funkcji.

JESZCZE RAZ. POWOLI!

OK. Wyrażenie lambda w języku JavaScript to pisząc łopatologicznie możliwość wprowadzania kodu jako parametru funkcji w momencie jej wywoływania. Oznacza to, że co każde nowe wywołanie funkcji, może się wykonywać coś ZUPEŁNIE innego, mimo wtłoczonego kodu wewnątrz funkcji! Ta "wymiana" kodu działa jak kartridż w konsoli. Konsola ma to samo zadanie - wyświetlić obraz gry i ją wczytać, ale zawartość zależy od samego kartridża. To taki parametr funkcyjny będzie naszym kartridżem, a funkcja wywoływana konsolą. No prościej już naprawdę nie mogę :D!

POSTAĆ WYRAŻENIA LAMBDA

Skoro wytłumaczyłem prostym językiem na czym z grubsza polega wyrażenie lambda w języku JavaScript, przejdźmy teraz do kodu źródłowego. Lambdę możecie zobaczyć w dwóch postaciach:

  1. jako funkcję anonimową
    const square = function(n) {
    	return n**2;
    };
  2. jako funkcję strzałkową
    const square = n => n**2;

Wszystko się zacznie wyjaśniać z biegiem artykułu. Pojęcie funkcji "strzałkowej" pochodzi od znaku charakterystycznej strzałki będącej kombinacją znaku równości i znaku większości ("=>"). Jest ona obowiązkową częścią składni, jeśli definiujemy funkcję strzałkową.

ZASADY

Zanim przejdziemy do zalet używania wyrażeń lambda (zwłaszcza tej drugiej postaci), omówię na szybko kilka zasad składniowych których interpreter będzie od Was wymagał.

NAWIASY OTACZAJĄCE PARAMETRY

Zdążyliście pewnie zauważyć jeden szczegół co do przykładu powyżej. Brak nawiasów okrągłych wokół parametru "n"! Tak, można pominąć ale wtedy i tylko wtedy, kiedy lambda przyjmuje JEDEN parametr! Jeśli są dwa lub więcej, wtedy trzeba już wstawić:

const times = (x, y) => x*y;

jak zero parametrów, też!

const writeText = () => console.log("Wypisuję tekst!");
NAWIASY OTACZAJĄCE KOD

Teraz chodzi mi o nawiasy klamrowe otaczające kod funkcji. Wyrażenie lambda w języku JavaScript nie wymaga ich, jeżeli składa się Z POJEDYNCZEJ instrukcji:

const times = (x, y) => x*y;

ale zacznie się ich dopominać, jeśli umieścimy przynajmniej dwie instrukcje:

const times = (x, y) => {
	const m = x*y;
	
	return m;
};

Spójrzcie uważnie na słowo "return"! Jeśli lambda przyjmuje dwie lub więcej instrukcji, wtedy MUSIMY wstawić dodatkowe słowo do zwracania wartości. Dlaczego przy jednej instrukcji nie musimy? Bo JavaScript domyśli się, że podane wyrażenie ma być zwracane.

ZALETY STOSOWANIA LAMBDY

O, tutaj wyrażenie lambda w języku JavaScript ma się czym pochwalić co do zalet :).

MNIEJ KODU, A DZIAŁANIE TO SAMO

Pierwsza i najważniejsza zaleta, efektywne skracanie kodu do samego meritum sprawy. Weźmy pod lupę funkcję zwracającą kwadrat podanej liczby w postaci funkcji anonimowej:

const square = function(n) {
	return n**2;
};

Co widzimy? Słowa kluczowe "function", "return" i całą resztę budowy. Standard. Nie sądzicie, że może to niepotrzebnie ściągać na siebie uwagę? Bo co tutaj się tak naprawdę liczy? Wyrażenie "n**2", prawda? Nic więcej! A popatrzcie teraz na postać funkcji strzałkowej:

const square = n => n**2;

O niebo lepiej! Skupiamy się tylko na konkretach. Funkcja, podaję Ci liczbę N i masz mi zwrócić kwadrat tej liczby. Przyjmuje "n", zwraca kwadrat, dziękuję, do widzenia :).

PRZEKAZYWANIE KODU JAKO PARAMETR

I to jest drodzy moi druga "big" zaleta stosowania funkcji strzałkowych. Możemy do innej funkcji przekazać nie wartość, a kod do wykonania (metafora kartridża i konsoli, pamiętacie?)! Przypuśćmy, że codziennie widzicie grupę swoich ulubionych ziomków. Witacie się, spędzacie ze sobą czas i się żegnacie. Jak mogłaby wyglądać taka funkcja strzałkowa?

function spendTimeWithBuddies(actions) {
	console.log("Cześć wszystkim!");
	actions();
	console.log("Widzimy się jutro!");
}

Widzicie? Wywołanie parametru w ujęciu dosłownym! Teraz wywołując taką funkcję, będziemy mogli zdecydować co chcemy robić. Innego dnia możemy iść na pizzę, innego zagrać w bilard, a dwa dni później pójść na imprezę:

spendTimeWithBuddies(() => console.log("Idziemy na pizzę!"));
spendTimeWithBuddies(() => console.log("Gramy partyjkę w bilarda!"));
spendTimeWithBuddies(() => console.log("Chodźmy na imprezę!"));

Wszystko legitne ;)! To zdecydowanie poszerza nasze możliwości do programowania uniwersalnego, aby się najzwyczajniej w świecie nie powtarzać i nie definiować bardzo podobnych funkcji.

"ŁAŃCUCHY" WYWOŁAŃ

Dodam na zakończenie pisania o zaletach, że metody tablicowe takie jak "forEach", "map" albo "filter" doskonale dogadują się z wyrażeniami lambda, więc przy ich odpowiednim użyciu, można bez kitu sobie uprzyjemnić życie i sprowadzić wiele czynności do jednej linijki kodu (tworzy się taki "łańcuszek" wywołań):

const numbers = [5, 18, 706, 46];

numbers.filter(e => e > 40;).forEach(e => console.log(e));

MINUSY

Też są. Nie tak dotkliwe jak plusy, aczkolwiek trzeba co nieco wiedzieć. Przede wszystkim, wyrażenie lambda w języku JavaScript to nie jest konstruktor! Zabrania się używania na nim słowa kluczowego "new". Oprócz tego, nie powinny być używane jako metody, zwłaszcza podczas wywołania poprzez "bind", "call" czy "apply". Lambda nie jest traktowana tak samo jak metoda! Jest jeszcze parę innych czynników, natomiast to już dla użytkowników zaawansowanych.

Wyrażenie lambda w języku JavaScript

Wyrażenie lambda umożliwia przekazywanie samego kodu jako parametru innej funkcji, a on może być za każdym razem inny co kolejne wywołanie!


Na tym kończę rozdział o wyrażeniach lambda. Nie musicie lubić programowania funkcyjnego, natomiast jeśli chodzi o samą możliwość przekazywania kodu jako parametru, na pewno znajdą się chętni.

PODOBNE ARTYKUŁY