Javascript tööriistad tegevuses
Avastage mõningaid vahendeid JavaScript, et tõsta oma programmeerimismängu taset. Lisateave ESLint, Prettier ja Husky kohta!

Lugege meie artiklit, et avastada funktsionaalse programmeerimise võimalusi JavaScript-s. Funktsionaalne programmeerimine liigitatakse deklaratiivse paradigma alla, kus programmi kirjeldus on eraldatud arvutustest.
"Lihtsustatult öeldes on funktsionaalne programmeerimine tarkvaraarendus stiil, mis paneb suurt rõhku funktsioonide kasutamisele"
Väljavõtted raamatust: Luis Atencio "Funktsionaalne programmeerimine in JavaScript. Kuidas parandada oma JavaScript programmid funktsionaalsete tehnikate abil"
Funktsionaalne programmeerimine liigitatakse deklaratiivne paradigma, kus programmi kirjeldus on arvutustest eraldatud. Rõhk on siinkohal väljendite kasutamisel programmi loogika kirjeldamiseks. See on vastupidine imperatiiv programmeerimine, kus kood täidetakse samm-sammult ja ütleb arvutile üksikasjalikult, kuidas tööd teha.
Võtame näiteks juhtumi, kus meil on täisarvude massiivi ja meil on vaja tõsta igaüks neist teise potentsi ja seejärel valida ainult need väärtused, mis ei ole paarilised.
const numbers = [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) { // või % 2, kuid operatsioonid bittidega on kiiremad.
results.push(secondPower);
}
}
console.log(results) // [1, 9, 25, 49, 81]
Mis puutub imperatiiv lahenduse puhul on selgelt näha keskendumist rakendamise üksikasjadele. Loopis on näha, et massiivi indeks põhineb vajadusel kontrollida elementide arvu. Kuna koodis on palju detaile, on raskem keskenduda sellele, mida see teeb. Keskendume nüüd sellele, et deklaratiivne lahendus.
const risesToSecondPower = (num) => Math.pow(num, 2)
const isOdd = (num) => num & 1;
const arvud = [1, 2, 3, 4, 5, 6, 7, 8, 9]
const results = numbers
.map(risesToSecondPower)
.filter(isOdd);
console.log(results) // [1, 9, 25, 49, 81]
Selles lahenduses on rakendamine eraldatud kutsumisest, viies loogika eraldi funktsioonidesse. Tänu sellele lahendusele saame keskenduda ainult funktsioonide nimedele, mis kirjeldavad neis toimuvat. Lisaks on abstraktsiooni taset tõstetud ja loogika on nüüd korduvkasutatav. Keskendume nüüd kutsele. Selles ei ole näha mingeid detaile, vaid ainult kirjeldus, mis ütleb samm-sammult, mida see kood teeb:
map(risesToSecondPower)
- võtta iga massiivi element ja tõsta see teise potentsile,filter(isOdd)
- filtreerida ja valida paaritu elemente.Funktsionaalne programmeerimine on palju kasu. Kui tegemist on JavaScript, on funktsioonide kasutamine loomulik, sest tegemist on funktsionaalse keelega. Isegi klassid on selles keeles "süntaktiline suhkur" ja need on funktsioonidest koosnevad.
Mis puutub loetavusse, siis imperatiivse lähenemise puhul muutub kood tavaliselt loeteluks funktsioonide nimedega, mida saab järjestikku lugeda ilma nende loogikasse süvenemata. Selle tulemusena ei keskenduta rakendamise üksikasjadele.
Teine eelis on muutumatute objektide konventsioonist kinnipidamine. Tänu sellisele lähenemisele muutub kood turvalisemaks, sest viited in JavaScript on väga tugevad ja soovimatut objekti on lihtne muuta.
Funktsionaalse programmeerimise puhul jaotatakse kood väikesteks funktsioonideks, mida saab hõlpsasti pidada taaskasutatavaks abstraktseks koodiks.
Üks oluline kaalutlus funktsionaalse programmeerimise puhul on puhtad funktsioonid. Sellise funktsiooni loomiseks tuleb meeles pidada mõningaid reegleid:
// Inpure funktsioon
let counter = 5
...
const multipleCounter = (multiplier) => {
counter = counter * multiplier
}
multiplyCounter(2) // -> ? tulemus sõltub algväärtusest
// Puhas funktsioon
const multiplyBy = (kordaja) => (väärtus) => väärtus * kordaja
const multipleByTwo = multiplyBy(2)
const counter = multiplyByTwo(5) // -> 10
Esimene funktsioon on ettearvamatu, sest see sõltub välisest parameetrist, mis võib muutuda. Teine funktsioon on läbipaistev, see sõltub ainult sisendparameetritest, ei muuda neid ja ei kasuta muutujaid, mis on väljaspool vahemikku. See on läbipaistev, sest see sõltub parameetritest, ei muuda neid, ei kasuta vahemikust väljapoole jäävaid muutujaid ja tagastab uue väärtuse.