The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2022-06-21
Programinės įrangos kūrimas

Funkcinis programavimas JavaScript 3 dalis - Funktorius ir monada Galbūt

The Codest

Pawel Ged

Vue.js kūrėjas

Peržiūrėkite trečiąją mūsų straipsnių ciklo "Funkcinio programavimo galia JavaScript" dalį. Šį kartą mūsų JavaScript ekspertas paaiškina daugiau apie Functor ir Monad Maybe.

Įvadas

Dažnai sunku išlaikyti nemodifikuojamą. Įvyniojimo modelis duomenys į konteinerį. Jis apsaugo vertybes, kad su jomis būtų galima saugiai dirbti ir nesukelti šalutinio poveikio.

Jei esate čia nauji, būtinai peržiūrėkite mano paskutines 2 dalis apie funkcinį programavimą The Codest tinklaraštis apie:

  • 1 dalis - Įvadas
  • 2 dalis - Kombinatoriai

Funktorius

Jame nėra sudėtingos logikos. Pagrindinė jo užduotis - apgaubti kontekstą ir atlikti su juo iš išorės gaunamas funkcijas. Kiekvieną kartą pasikeitus vertei, perpakuojamas ir grąžinamas naujas konteinerio egzempliorius. Kviečiant žemėlapis metodą, kuris atlieka tam tikrą veiksmą, jis grąžina naują konteinerio egzempliorių su perduotos funkcijos grąžinta verte, išlaikant nekeičiamumo principą.

Deklaracija

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

žemėlapis - naudinga, kai norite pakeisti konteinerio reikšmės būseną, bet dar nenorite jos grąžinti.

grandinė - naudojamas, jei norite perduoti reikšmę funkcijai nekeisdami konteinerio būsenos. Paprastai funkcijos pabaigoje žemėlapis skambučiai.

iš - grąžinti dabartinę vertę

Imperatyvus pavyzdys

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

const randomNumber = randomInt(200) // grąžinamas skaičius nuo 0 iki 200

decrease(randomNumber) // grąžinamas skaičius (nuo 0 iki 200) - 1

Deklaratyvinis pavyzdys

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() // grąžinamas skaičius nuo 0 iki 200
randomNumber.chain(decrease) // grąžina (skaičių nuo 0 iki 200) - 1

Monada

Kartais, be funkcijų, sukeliančių naują reikšmės būseną, reikia papildomos logikos, paslėptos konteineryje. Čia praverčia monada, nes ji yra plėtinys funktorius. Pavyzdžiui, jis gali nuspręsti, kas turėtų įvykti, kai reikšmė įgyja tam tikrą vertę, arba kokiu keliu turi būti atliekami kiti veiksmai.

Monada Galbūt

Monada galbūt išsprendžia verčių, kurios grąžina ne true, problemą. Kai taip atsitinka, vėlesni žemėlapis skambučiai ignoruojami, tačiau galima grąžinti alternatyvų skambinant į getOr metodas. Tai leidžia išvengti operatorių if / else, kurie populiarūs imperatyvas programavimas. Šią monadą sudaro trys konteineriai:

Nieko - paleidžiamas, kai į konteinerį patenka reikšmė, kuri nėra true, arba filtras metodas grąžina false. Jis naudojamas funkcijos vykdymui imituoti. Tai reiškia, kad šis konteineris gauna funkciją, bet jos nevykdo.

Tiesiog - tai yra pagrindinis konteineris, kuris atlieka visas funkcijas, tačiau jei reikšmė pasikeičia į klaidingą reikšmę arba filtras metodas grąžina false, jis perduos jį į Nieko konteineris.

Galbūt - Paimu pradinę vertę ir nusprendžiu, kokį konteinerį iškviesti pradžioje.

Deklaracija

const Just = value => ({
map: fn => Maybe(fn(value)),
chain: fn => fn(value),
of: () => value,
getOr: () => value,
filter: fn => fn(value) ? Just(value) : Nothing(),
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'
? Nothing()
: Just(value)
lentelės metodai funktorius

Dabar sukurkime ankstesnį pavyzdį apie sąlygą. Jei max yra didesnis už nulį, bus vykdoma funkcija. Priešingu atveju ji grąžins 0.

Imperatyvus pavyzdys

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

const bookMiddlePage = 200

const randomPage = randomInt(10) || bookMiddlePage // grąžina atsitiktinį variantą
const randomPage = randomInt(-10) || bookMiddlePage // grąžina 200

Deklaratyvinis pavyzdys

const randomIntWrapper = (max) =>
Maybe(max)
.filter(max => max > 0) // reikšmė false ignoruoja tolesnius iškvietimus
.map(padidinti)
.map(multiplyBy(Math.random()))
.map(Math.floor)

const bookMiddlePage = 200

// Tiesiog konteineris
const randomPage = randomIntWrapper(10).getOr(bookMiddlePage) // grąžina atsitiktinį skaičių
// Nieko konteineris
const randomPage = randomIntWrapper(-10).getOr(bookMiddlePage) // grąžina 200


bendradarbiavimo vėliava

Susiję straipsniai

Programinės įrangos kūrimas

Kibernetinio saugumo dilemos: Duomenų nutekėjimas

Prieššventinis skubėjimas įsibėgėja. Ieškodami dovanų savo artimiesiems, žmonės vis dažniau ryžtasi "šturmuoti" internetines parduotuves.

The Codest
Jakubas Jakubovičius CTO ir vienas iš įkūrėjų

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

      The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

      Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

      Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    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 lvLatvian lt_LTLithuanian