Javascript rīki darbībā
Atklājiet dažus JavaScript izgūšanas rīkus, lai uzlabotu savu programmēšanas spēli. Uzziniet vairāk par ESLint, Prettier un Husky!
Lasiet mūsu rakstu, lai atklātu JavaScript funkcionālās programmēšanas iespējas. Funkcionālā programmēšana tiek klasificēta kā deklaratīvā paradigma, kurā programmas apraksts ir atdalīts no aprēķiniem.
"Vienkāršāk sakot, funkcionālā programmēšana ir programmatūras izstrāde stils, kurā galvenais uzsvars tiek likts uz funkciju izmantošanu."
Fragmenti no grāmatas: Luis Atencio "Funkcionālā programmēšana in JavaScript. Kā uzlabot savu JavaScript programmas, izmantojot funkcionālās metodes"
Funkcionālā programmēšana ir klasificēts kā deklaratīvais paradigma, kurā programmas apraksts ir atdalīts no aprēķiniem. Šeit uzsvars tiek likts uz izteiksmju izmantošanu programmas loģikas aprakstīšanai. Tas ir pretējs imperatīvs programmēšana, kur kods tiek izpildīts soli pa solim un detalizēti norāda datoram, kā izpildīt uzdevumu.
Apskatiet gadījumu, kad mums ir veselu skaitļu masīvs un mums ir nepieciešams katru no tiem palielināt līdz otrajai pakāpei un pēc tam atlasīt tikai tās vērtības, kas nav pāra.
const numuri = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const results = []
for(let i = 0; i < numbers.length; i++) {
const secondPower = Math.pow(numbers[i], 2)
if(secondPower & 1) { // vai % 2, bet operācijas ar bitiem ir ātrākas
results.push(secondPower);
}
}
console.log(results) // [1, 9, 25, 49, 81]
Attiecībā uz imperatīvs risinājums, ir skaidri redzams, ka galvenā uzmanība tiek pievērsta īstenošanas detaļām. Cilpā var redzēt masīva indeksu, kas balstīts uz vajadzību kontrolēt elementu skaitu. Sakarā ar lielo detaļu skaitu kodā ir grūtāk koncentrēties uz to, ko tas dara. Ļaujiet mums tagad koncentrēties uz deklaratīvais risinājums.
const risesToSecondPower = (num) => Math.pow(num, 2)
const isOdd = (num) => num & 1;
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
const results = numbers
.map(risesToSecondPower)
.filter(isOdd);
console.log(results) // [1, 9, 25, 49, 81]
Šajā risinājumā īstenošana ir atdalīta no izsaukuma, pārnesot loģiku uz atsevišķām funkcijām. Pateicoties šim risinājumam, mēs varam koncentrēties tikai uz funkciju nosaukumiem, kas apraksta tajās notiekošo. Turklāt ir paaugstināts abstrakcijas līmenis, un loģiku tagad var izmantot atkārtoti. Tagad pievērsīsimies izsaukumam. Tajā nav redzamas nekādas detaļas, tikai apraksts, kas soli pa solim stāsta, ko šis kods dara:
karte(risesToSecondPower) - ņem katru masīva elementu un palielina to līdz otrajam lielumam,filtrs(isOdd) - filtru un atlasiet nepāra elementus.Funkcionālā programmēšana ir daudz priekšrocību. Kad runa ir par JavaScript, funkciju izmantošana ir dabiska, jo tā ir funkcionālā valoda. Pat klases šajā valodā ir "sintaktiskais cukurs", un tās pamatā sastāv no funkcijām.
Runājot par lasāmību, imperatīvās pieejas gadījumā kods parasti kļūst par sarakstu ar funkciju nosaukumiem, ko var lasīt secīgi, neiedziļinoties to loģikā. Rezultātā mēs nepievēršam uzmanību implementācijas detaļām.
Vēl viena priekšrocība ir nemainīgu objektu konvencijas ievērošana. Pateicoties šai pieejai, kods kļūst drošāks, jo atsauces JavaScript ir ļoti spēcīgi, un nevēlamo objektu ir viegli pārveidot.
Funkcionālajā programmēšanā kods tiek sadalīts mazās funkcijās, kuras var viegli uzskatīt par atkārtoti lietojamu abstraktu kodu.
Viens no svarīgākajiem funkcionālās programmēšanas aspektiem ir tīrās funkcijas. Lai izveidotu šādu funkciju, jāatceras daži noteikumi:
// Inpure funkcija
let counter = 5
...
const multipleCounter = (reizinātājs) => {
counter = counter * reizinātājs
}
multiplyCounter(2) // -> ? rezultāts atkarīgs no sākotnējās vērtības
// Tīra funkcija
const multiplyBy = (reizinātājs) => (vērtība) => vērtība * reizinātājs
const multipleByTwo = multiplyBy(2)
const counter = multiplyByTwo(5) // -> 10
Pirmā funkcija ir neparedzama, jo tā ir atkarīga no ārēja parametra, kas var mainīties. Otrā funkcija ir caurskatāma, tā ir atkarīga tikai no ieejas parametriem, nemaina tos un neizmanto mainīgos, kas ir ārpus diapazona. Tā ir caurspīdīga, jo ir atkarīga no parametriem, nemaina tos, neizmanto mainīgos ārpus diapazona un atgriež jaunu vērtību.
