window.pipedriveLeadboosterConfig = { base: pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on jo olemassa') } 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 }) }, } } })() Funktionaalinen ohjelmointi JavaScript Osa 3 - Funktio ja monadi Ehkä - The Codest
Codest
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Toimialat
    • Fintech & pankkitoiminta
    • E-commerce
    • Adtech
    • Terveysteknologia
    • Valmistus
    • Logistiikka
    • Autoteollisuus
    • IOT
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
Takaisin nuoli PALAA TAAKSE
2022-06-21
Ohjelmistokehitys

Funktionaalinen ohjelmointi JavaScript:ssä Osa 3 - Funktio ja monadi Maybe

Codest

Pawel Ged

Vue.js Kehittäjä

Lue kolmas osa artikkelisarjastamme Toiminnallisen ohjelmoinnin teho JavaScript:ssä. Tällä kertaa JavaScript-asiantuntijamme kertoo lisää Functorista ja Monad Maybesta.

Johdanto

Usein muokkaamattomana pitäminen on vaikeaa ylläpitää. Tietojen kääriminen konttiin on silloin apuna. Se turvaa arvot niin, että niiden käsittely on turvallista ja sivuvaikutukset poissulkevaa.

Jos olet uusi täällä varmista tarkistaa minun 2 viimeistä osaa koskien toiminnallista ohjelmointia The Codest blogi noin:

  • Osa 1 - Johdanto
  • Osa 2 - Yhdistimet

Funktio

Siinä ei ole monimutkaista logiikkaa. Sen päätehtävänä on paketoida konteksti ja suorittaa siihen ulkopuolelta saamansa toiminnot. Aina kun arvo muuttuu, uusi konteksti-instanssi pakataan uudelleen ja palautetaan. Kun kutsutaan kartta metodi, joka ottaa tietyn toiminnon, se palauttaa uuden säiliön instanssin, jonka arvo palautetaan välitetyllä funktiolla, säilyttäen kuitenkin periaatteen, jonka mukaan säiliötä ei voi muuttaa.

Ilmoitus

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

kartta - käyttökelpoinen, kun haluat muuttaa säiliössä olevan arvon tilaa, mutta et halua palauttaa sitä vielä.

ketju - käytetään, jos haluat siirtää arvon funktiolle muuttamatta säiliön tilaa. Yleensä lopussa kartta puhelut.

of - palauttaa nykyisen arvon

Imperatiivinen esimerkki

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

const randomNumber = randomInt(200) // palauttaa luvun 0 ja 200 välillä.

decrease(randomNumber) // palauttaa (luvun 0 ja 200 välillä) - 1

Deklaratiivinen esimerkki

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() // palauttaa luvun 0 ja 200 välillä.
randomNumber.chain(decrease) // palauttaa (luvun 0 ja 200 välillä) - 1.

Monadi

Joskus arvon uuden tilan käynnistävien funktioiden lisäksi tarvitaan säiliöön piilotettua lisälogiikkaa. Tässä kohtaa monad on kätevä, sillä se on laajennus funktiolle funktiotekijä. Se voi esimerkiksi päättää, mitä tapahtuu, kun arvolla on tietty arvo, tai mitä polkua seuraavien toimintojen on kuljettava.

Monadi Ehkä

Monadi ehkä ratkaisee ongelman arvoista, jotka palauttavat arvoja, jotka eivät ole totta. Kun näin tapahtuu, seuraavat kartta kutsut jätetään huomiotta, mutta sen avulla voit palauttaa vaihtoehtoisen kutsumalla komentoa getOr menetelmä. Sen avulla voit välttää if/ else-operaattoreiden käytön, jotka ovat suosittuja seuraavissa menetelmissä imperatiivinen ohjelmointi. Tämä monadi koostuu kolmesta säiliöstä:

Ei mitään - suoritetaan, kun arvo, joka ei ole tosi, putoaa säiliöön tai suodatin menetelmä palauttaa false. Sitä käytetään simuloimaan funktion suoritusta. Tämä tarkoittaa, että tämä säiliö vastaanottaa funktion mutta ei suorita sitä.

Vain - tämä on pääsäiliö, joka suorittaa kaikki toiminnot, mutta jos arvo muuttuu vääräksi arvoksi tai suodatin menetelmä palauttaa false, se siirtää sen kohtaan Ei mitään kontti.

Ehkä - Otan alkuarvon ja päätän, mitä säiliötä kutsutaan alussa.

Ilmoitus

const Just = arvo => ({
map: fn => Maybe(fn(arvo)),
chain: fn => fn(arvo),
of: () => arvo,
getOr: () => arvo,
filter: fn => fn(arvo) ? Vain(arvo) : Nothing(),
type: 'vain'
});

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

const Maybe = arvo =>
value === null || value === undefined || value.type === 'nothing'
? Nothing()
: Vain(arvo)
taulukon menetelmät funktionaali

Rakennetaan nyt edellinen esimerkki ehdosta. Jos max on suurempi kuin nolla, funktio suoritetaan. Muussa tapauksessa se palauttaa arvon 0.

Imperatiivinen esimerkki

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

const bookMiddlePage = 200

const randomPage = randomInt(10) || bookMiddlePage // palaa satunnaisesti.
const randomPage = randomInt(-10) || bookMiddlePage // palauttaa 200

Deklaratiivinen esimerkki

const randomIntWrapper = (max) =>
Maybe(max)
.filter(max => max > 0) // arvo false ei huomioi muita kutsuja.
.map(increase)
.map(multiplyBy(Math.random())))
.map(Math.floor)

const bookMiddlePage = 200

// Vain säiliö
const randomPage = randomIntWrapper(10).getOr(bookMiddlePage) // Palauttaa satunnaisarvon
// Ei mitään säiliö
const randomPage = randomIntWrapper(-10).getOr(bookMiddlePage) // palaa 200


yhteistyöbanneri

Aiheeseen liittyvät artikkelit

Ohjelmistokehitys

Asynkroninen ja yksisäikeinen JavaScript?

JavaScript on yksisäikeinen kieli, joka on samalla myös lukkiutumaton, asynkroninen ja samanaikainen. Tässä artikkelissa selitetään sinulle, miten se tapahtuu.

Lukasz Kolko
E-commerce

Kyberturvallisuuden ongelmat: Tietovuodot

Joulua edeltävä kiire on täydessä vauhdissa. Ihmiset etsivät lahjoja läheisilleen ja ovat yhä useammin valmiita "ryntäämään" verkkokauppoihin.

Codest
Jakub Jakubowicz teknologiajohtaja ja toinen perustaja

Tilaa tietopankkimme ja pysy ajan tasalla IT-alan asiantuntemuksesta.

    Tietoa meistä

    The Codest - Kansainvälinen ohjelmistokehitysyritys, jolla on teknologiakeskuksia Puolassa.

    Yhdistynyt kuningaskunta - pääkonttori

    • Toimisto 303B, 182-184 High Street North E6 2JA
      Lontoo, Englanti

    Puola - Paikalliset teknologiakeskukset

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsova, Puola

      Codest

    • Etusivu
    • Tietoa meistä
    • Palvelut
    • Tapaustutkimukset
    • Tiedä miten
    • Työurat
    • Sanakirja

      Palvelut

    • Se neuvoa-antava
    • Ohjelmistokehitys
    • Backend-kehitys
    • Frontend-kehitys
    • Staff Augmentation
    • Backend-kehittäjät
    • Pilvi-insinöörit
    • Tietoinsinöörit
    • Muut
    • QA insinöörit

      Resurssit

    • Faktoja ja myyttejä yhteistyöstä ulkoisen ohjelmistokehityskumppanin kanssa
    • Yhdysvalloista Eurooppaan: Miksi amerikkalaiset startup-yritykset päättävät muuttaa Eurooppaan?
    • Tech Offshore -kehityskeskusten vertailu: Tech Offshore Eurooppa (Puola), ASEAN (Filippiinit), Euraasia (Turkki).
    • Mitkä ovat teknologiajohtajien ja tietohallintojohtajien tärkeimmät haasteet?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Verkkosivuston käyttöehdot

    Tekijänoikeus © 2025 by The Codest. Kaikki oikeudet pidätetään.

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