Explicați-mi și mie, că poate îmi scapă ceva esențial, de ce o groază de lume folosește arrow function în javascript. sintaxă care mie mi se pare oribilă și greu de înțeles când “scanezi” codul, mai ales când e scris de altcineva.
Adică este folosit ceva de genul
const Button = () => {
}
în loc de
function Button()
{
}
În al doilea caz înțeleg instant că e o funcție, în primul caz am nevoie de o fracțiune de secundă să parsez codul și să-l interepretez ca să înțeleg că variabila aia e de fapt o funcție.
Mie sincer imi place sa folosesc arrow function dar de exemplu in React cred ca este mai okay vizibil ca functional compontents sa fie declarate cu function si result functilor folosind arrow.
Bănuiesc că pentru interiorul funcțiilor te referi la lambda. Dar chiar și acolo prefer să văd cuvântul “function”, să nu am fracțiunea aia de secundă pentru e decoda hieroglifele care simbolizează o funcție, de exemplu așa:
Am văzut, înțeleg că this-ul funcției părinte se propagă în jos spre funcțiile arrow. Nu cred că am folosit prea des this în funcții, așa că n-am remarcat diferența, probabil mi-ar fi crăpat capul să depanez vreun bug subtil legat de chestia asta
O chestie de genul ăsta am pățit zilele astea în php, când într-un foreach am suprascris din greșeală o variabilă cu același nume din afara scope-ului.
E mai scurt si se preteaza la callback-uri, declararea in sine cu const e doar pentru consistenta.
Arrow function-ul e mai elegant daca returnezi direct ceva si nu ai nevoie de { ceva; return ceva }, eventual returnezi direct obiecte cu x => ({ greeting: "Hey " + x })
Arrow function-ul nu are o referinta pentru this, ceea ce e foarte bine fiindca daca lucrezi cu functii nu vrei sa ai deaface cu this fiindca e mereu un ‘parametru’ care vine din context-ul in care e rulat. Daca dai explicit ceva functiei stii de unde isi primeste referinta. Problema cu react de exemplu e ca daca folosesti functia normala trebuie sa faci bind la this mereu ca sa ai contextul din componenta curenta, cu arrow function cum n-ai this nu te mai intereseaza ca fiecare arrow function va fi in contextul lui izolat fara sa ii pese de unde ruleaza.
This nu se foloseste din cauza programarii functionale mai bine zis, daca n-ai clase e urat, se prefera compozitia si functiile pure pe cat de mult posibil, this incalca puritatea functiilor.
Cateodata ai nevoie de this, atunci folosesti un function sau il dai jos in arrow function.
Daca folosesti un arrow function ca o metoda intr-un obiect, o sa fie doar o functie salvata in obiect, nu o metoda. (nu are prototip)
Se combina foarte mult cu ternary operator-ul, e.g. let max = (a, b) => a > b ? a : b;
Mie function-ul imi aduce aminte de perioada cu IIFE-uri si closures Codul e clar mai modern cu arrow function-uri peste tot.