window.pipedriveLeadboosterConfig = { base: leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on juba olemas') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Funktsionaalne programmeerimine JavaScript 1. osa - Sissejuhatus - The Codest
The Codest
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Tööstusharud
    • Fintech & pangandus
    • E-commerce
    • Adtech
    • Healthtech
    • Tootmine
    • Logistika
    • Autotööstus
    • IOT
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
Tagasi nool TAGASI
2022-05-25
Tarkvaraarendus

Funktsionaalne programmeerimine JavaScript 1. osa - Sissejuhatus

The Codest

Pawel Ged

Vue.js Arendaja

Lugege meie artiklit, et avastada funktsionaalse programmeerimise võimalusi JavaScript-s. Funktsionaalne programmeerimine liigitatakse deklaratiivse paradigma alla, kus programmi kirjeldus on eraldatud arvutustest.

Mis on funktsionaalne programmeerimine?

"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.

Deklaratiivne vs imperatiivne, näited

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.

Imperatiiv

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.

Deklaratiivne

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:

  1. map(risesToSecondPower) - võtta iga massiivi element ja tõsta see teise potentsile,
  2. filter(isOdd) - filtreerida ja valida paaritu elemente.

Eelised

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.

Puhas funktsioon

Üks oluline kaalutlus funktsionaalse programmeerimise puhul on puhtad funktsioonid. Sellise funktsiooni loomiseks tuleb meeles pidada mõningaid reegleid:

  • funktsiooni tagastatav tulemus sõltub ainult sisendparameetritest,
  • ärge kasutage globaalseid muutujaid ja muutujaid, mis on väljaspool teie enda vahemikku,
  • ei muuda parameetrite olekut,
  • puhaste funktsioonide puhul ei ole mingeid "kõrvalmõjusid" (tavaliselt objekti omaduste muutmine),
  • märgitud sisendparameetrite jaoks, annavad nad alati ühe ja sama tulemuse,
  • puhas funktsioon võtab alati ühe parameetri ja tagastab alati ühe parameetri.
// 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.

koostööbänner

Seotud artiklid

Tarkvaraarendus

Javascript tööriistad tegevuses

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

The Codest
Reda Salmi React Arendaja

Tellige meie teadmistebaas ja jääge kursis IT-sektori eksperditeadmistega.

    Meie kohta

    The Codest - rahvusvaheline tarkvaraarendusettevõte, mille tehnoloogiakeskused asuvad Poolas.

    Ühendkuningriik - peakorter

    • Büroo 303B, 182-184 High Street North E6 2JA
      London, Inglismaa

    Poola - kohalikud tehnoloogiakeskused

    • Fabryczna büroopark, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varssavi, Poola

      The Codest

    • Kodu
    • Meie kohta
    • Teenused
    • Case Studies
    • Tea kuidas
    • Karjäärivõimalused
    • Sõnastik

      Teenused

    • See nõuandev
    • Tarkvaraarendus
    • Backend arendus
    • Frontend arendus
    • Staff Augmentation
    • Backend arendajad
    • Pilveinsenerid
    • Andmeinsenerid
    • Muud
    • QA insenerid

      Ressursid

    • Faktid ja müüdid koostööst välise tarkvaraarenduspartneriga
    • USAst Euroopasse: Miks otsustavad Ameerika idufirmad Euroopasse ümber asuda?
    • Tech Offshore arenduskeskuste võrdlus: Euroopa (Poola), ASEAN (Filipiinid), Euraasia (Türgi).
    • Millised on CTO ja CIOde peamised väljakutsed?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2025 by The Codest. Kõik õigused kaitstud.

    etEstonian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch elGreek etEstonian