The Codest
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Nozares
    • Fintech un banku darbība
    • E-commerce
    • Adtech
    • Healthtech
    • Ražošana
    • Loģistika
    • Automobiļu nozare
    • IOT
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
Atpakaļ bultiņa ATGRIEZTIES ATPAKAĻ
2022-06-21
Programmatūras izstrāde

Funkcionālā programmēšana JavaScript 3. daļā - Funkcionālais funkcionālais programmēšana un monādes varbūt

The Codest

Pawel Ged

Vue.js izstrādātājs

Iepazīstieties ar mūsu rakstu sērijas Power of functional programming in JavaScript trešo daļu. Šoreiz mūsu JavaScript eksperts skaidro vairāk par Functor un Monad Maybe.

Ievads

Bieži vien ir grūti uzturēt nemodificējamu. Ietīšanas modelis dati konteinerā nāk palīgā. Tas nodrošina vērtības tā, lai darbs ar tām būtu drošs un nerastos blakusparādības.

Ja esat šeit jauns, pārliecinieties, ka pārbaudījāt manas pēdējās 2 daļas par funkcionālo programmēšanu par The Codest blogs par:

  • 1. daļa - Ievads
  • 2. daļa - Kombinatori

Funktors

Tam nav sarežģītas loģikas. Tās galvenais uzdevums ir ietīt kontekstu un veikt funkcijas, ko tā saņem no ārpuses. Katru reizi, kad mainās vērtība, tiek pārpakots un atdots jauns konteinera gadījums. Izsaucot karte metode, kas veic konkrētu darbību, tā atgriež jaunu konteinera gadījumu ar vērtību, ko atdod nodotā funkcija, vienlaikus saglabājot nemodificēšanas principu.

Deklarācija

 const Functor = value => ({ {
     map: fn => Functor(fn(value)),
     chain: fn => fn(value),
     of: () => value
 });

karte - noderēs, ja vēlaties mainīt konteinera vērtības stāvokli, bet vēl nevēlaties to atgriezt.

ķēde - izmanto, ja vēlaties nodot vērtību funkcijai, nemainot konteinera stāvokli. Parasti beigās karte zvani.

no - atgriezt pašreizējo vērtību

Imperatīvais piemērs

const randomInt = (max) => Math.floor(Math.random() * (max + 1))

const randomNumber = randomInt(200) // atgriež skaitli no 0 līdz 200

reduce(randomNumber) // atgriež (skaitli no 0 līdz 200) - 1

Deklaratīvs piemērs

const randomIntWrapper = (max) =>
Functor(max)
.map(increase) // max + 1
.map(multiplyBy(Math.random())) // Math.random() * (max + 1)
.map(Math.floor) // Math.floor(Math.random() * (max + 1))

const randomNumber = randomIntWrapper(200)

randomNumber.of() // atgriež skaitli no 0 līdz 200
randomNumber.chain(reduce) // atgriež (skaitli no 0 līdz 200) - 1

Monādes

Dažreiz papildus funkcijām, kas izraisa vērtības jauno stāvokli, ir nepieciešama papildu loģika, kas ir paslēpta konteinerā. Šajā gadījumā noder monada, jo tā ir paplašinājums funktors. Tā var, piemēram, izlemt, kas notiks, ja vērtībai būs noteikta vērtība, vai kāds ceļš jāizvēlas nākamajām darbībām.

Monādes varbūt

Monādes varbūt atrisina problēmu ar vērtībām, kas neatgriež true. Ja tā notiek, turpmākie karte izsaukumi tiek ignorēti, bet tas ļauj atgriezt alternatīvu, izsaucot getOr metode. Tas ļauj izvairīties no if / else operatoru izmantošanas, kas ir populāri metodēs. imperatīvs programmēšana. Šī monāde sastāv no trim konteineriem:

Nekas - darbojas, kad konteinerā iekrīt vērtība, kas nav true, vai filtrs metode atgriež false. To izmanto, lai simulētu funkcijas izpildi. Tas nozīmē, ka šis konteiners saņem funkciju, bet neizpilda to.

Tikai - tas ir galvenais konteiners, kas veic visas funkcijas, bet, ja vērtība mainās uz nepatiesu vērtību vai filtrs metode atgriež false, tā to nodos vienumam Nekas konteiners.

Varbūt - Es ņemu sākotnējo vērtību un izlemju, kādu konteineru izsaukt sākumā.

Deklarācija

const Just = vērtība => ({
map: fn => Maybe(fn(value)),
chain: fn => fn(value),
of: () => value,
getOr: () => value,
filter: fn => fn(value) ? Just(value) : Nekas(),
type: 'just'
});

const Nothing = () => ({
map: fn => Nothing(),
chain: fn => fn(),
of: () => Nothing(),
getOr: substitute => substitute,
filter: () => Nothing(),
type: "nothing
});

const Maybe = value =>
value === null || value === undefined || value.type === 'nothing'
? nekas()
: Just(value)
tabulas metodes funktors

Tagad izveidosim iepriekšējo piemēru par nosacījumu. Ja max ir lielāks par nulli, funkcija tiks izpildīta. Pretējā gadījumā tā atgriezīs 0.

Imperatīvais piemērs

const randomInt = (max) => {
if(max > 0) {
return Math.floor(Math.random() * (max + 1))
} citādi {
return 0
}
}

const bookMiddlePage = 200

const randomPage = randomInt(10) || bookMiddlePage // atgriež nejaušības principu
const randomPage = randomInt(-10) || bookMiddlePage // atgriež 200

Deklaratīvs piemērs

const randomIntWrapper = (max) =>
Maybe(max)
.filter(max => max > 0) // vērtība false ignorē turpmākos izsaukumus
.map(palielināt)
.map(multiplyBy(Math.random()))
.map(Math.floor)

const bookMiddlePage = 200

// Tikai konteiners
const randomPage = randomIntWrapper(10).getOr(bookMiddlePage) // atgriež nejaušo lapu
// Nekas konteiners
const randomPage = randomIntWrapper(-10).getOr(bookMiddlePage) // atgriež 200


sadarbības baneris

Saistītie raksti

Programmatūras izstrāde

Kiberdrošības dilemmas: Datu noplūde

Pirmssvētku steiga ir pilnā sparā. Meklējot dāvanas saviem mīļajiem, cilvēki arvien biežāk ir gatavi "šturmēt" interneta veikalus.

The Codest
Jakub Jakubowicz CTO un līdzdibinātājs

Abonējiet mūsu zināšanu bāzi un saņemiet jaunāko informāciju par IT nozares pieredzi.

    Par mums

    The Codest - starptautisks programmatūras izstrādes uzņēmums ar tehnoloģiju centriem Polijā.

    Apvienotā Karaliste - Galvenā mītne

    • 303B birojs, 182-184 High Street North E6 2JA
      Londona, Anglija

    Polija - Vietējie tehnoloģiju centri

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polija

      The Codest

    • Sākums
    • Par mums
    • Pakalpojumi
    • Case Studies
    • Zināt, kā
    • Karjera
    • Vārdnīca

      Pakalpojumi

    • Tā Konsultatīvais dienests
    • Programmatūras izstrāde
    • Backend izstrāde
    • Frontend izveide
    • Staff Augmentation
    • Backend izstrādātāji
    • Mākoņa inženieri
    • Datu inženieri
    • Citi
    • QA inženieri

      Resursi

    • Fakti un mīti par sadarbību ar ārējo programmatūras izstrādes partneri
    • No ASV uz Eiropu: Kāpēc Amerikas jaunuzņēmumi nolemj pārcelties uz Eiropu?
    • Tehnoloģiju ārzonas attīstības centru salīdzinājums: Tech Offshore Eiropa (Polija), ASEAN (Filipīnas), Eirāzija (Turcija)
    • Kādi ir galvenie CTO un CIO izaicinājumi?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autortiesības © 2026 The Codest. Visas tiesības aizsargātas.

    lvLatvian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lt_LTLithuanian lvLatvian