Gandrīz neviens uz vakardienas aptauju par monādēm, neatbildēja, ka var tās paskaidrot, tāpēc te ir mans tikai mazliet izplūdušais skaidrojums 17 atbildes

Reinis Ivanovs
(2023-03-31 19:00:05)
@twitter
Gandrīz neviens uz vakardienas aptauju par monādēm, neatbildēja, ka var tās paskaidrot, tāpēc te ir mans tikai mazliet izplūdušais skaidrojums
Reinis Ivanovs
(2023-03-31 19:05:54)
@twitter
Monādes pavisam īsumā ir datu tips, kas ļauj kodā izteikt secīgas darbības, kas nodod viena otrai tālāk savu kontekstu jeb ir pakārtotas, bet darīt to "plakanā" stilā jeb nepakārtojot (nenestojot) pašu kodu arvien dziļāk
Reinis Ivanovs
(2023-03-31 19:09:06)
@twitter
Imperatīvā programmēšana ir tādas pašas secīgas vienā līmenī izteiktas darbības, kuras atdala ar semikolu, un tāpēc monādes var aprakstīt kā "programmējamus semikolus", kas piedod šiem atdalījumiem papildus uzvedību (tādu kā gaidīt uz event loopu) https://t.co/x40uUmzIsF
Reinis Ivanovs
(2023-03-31 19:10:00)
@twitter
Pati aptauja https://t.co/GsOD22JAlm
Reinis Ivanovs
(2023-03-31 19:13:31)
@twitter
Es to arī paskaidroju klipā, bet monādes savu sarežģītību attaisno ar to, ka tā ir bagātīga (rich) vai jaudīga abstrakcija, jo piemērojama tik daudzos gadījumos
Reinis Ivanovs
(2023-03-31 19:19:41)
@twitter
Konkrēts piemērs kaut kam monādveidīgam, ar ko daudzi būs saskārušies, ir Promise objekti JavaScriptā, ar ko kombinē darbības ar vērtībām vēl pirms tās pastāv, un tas ir piemērs, kā tiek abstrahēta asinhrona kontroles plūsma
Reinis Ivanovs
(2023-03-31 19:23:43)
@twitter
Tieši par asinhronitāti runājot, es ļoti silti iesaku arī savu paskaidrojumu par to, ka tas ir izpildes modelis, kurā izpilde notiek atšķirīgos laikos un sazinās savā starpā, padodot ziņas/kontinuācijas https://t.co/PcBhXsoA9X
Reinis Ivanovs
(2023-03-31 19:27:28)
@twitter
Vienkāršākais un tradicionālais paņēmiens, kā šo modeli izteikt kodā, ir CPS, bet no tā izriet gan minētā posta piramīda (pyramid of doom), gan tas, ko sauc par callback hell, un promises to atrisina https://t.co/k6XfUlx5aq
Reinis Ivanovs
(2023-03-31 19:31:15)
@twitter
Bēdīgā slava monādēm ir tāpēc, ka tās nāk no matemātikas un konkrēti no kategoriju teorijas, un ir daudz mulsinošu mēģinājumu iepazīstināt cilvēkus ar tām, sākot ar to, ka tas ir algebrisks datu tips
Reinis Ivanovs
(2023-03-31 19:34:08)
@twitter
To var nepamanīt, ja izmanto .then() sintaksi, bet plašākā būtība ir, ka monādes ļauj strukturēt kodu tāpat kā matemātiskā pierakstā, jeb kombinēt funkcijas tādā pašā veidā, kā to dara matemātikā
Reinis Ivanovs
(2023-03-31 19:35:27)
@twitter
Teorētiskais skaidrojums ir, ka monāde ir jebkurš tips, kurš atbilst monādiskajiem likumiem vai aksiomām, jeb labajai un kreisajai identitātei un asociativitātei
Reinis Ivanovs
(2023-03-31 19:39:15)
@twitter
JavaScript promises tāpēc ir tikai monādveidīgas vai monādīgas, jo JS standartizācijas komiteja neuzskatīja, ka būtu vērts būt pilnīgi korektiem, un diskusijā tā tika nosaukta par fantāziju, ka JS varētu būt īsta funkcionālās programmēšanas valoda
Reinis Ivanovs
(2023-03-31 19:41:49)
@twitter
Atbildē uz šo diskusiju tika izveidota fantasy land specifikācija ar JS domātiem algebriskajiem tipiem, un šajā diagrammā var redzēt, ka monādes apvieno funktoru, apply un aplikatīvās algebras https://t.co/CKQOY37RYc https://t.co/pvVpBOOoXv
Reinis Ivanovs
(2023-03-31 19:44:05)
@twitter
Kategoriju teoriju žargons ir diezgan drausmīgs, bet funktorus var saprast kā konteinerus, kuru saturam var piemērot secīgas darbības, un, piemēram, JS masīvi (arrayi) ir funktori, jo ar var rakstīt "ķēdes" ar .map() izsaukumiem
Reinis Ivanovs
(2023-03-31 19:56:00)
@twitter
Monādes ir sarežģītāki funktori, kurus tāpēc var vairāk veidos kombinēt, bet tas ir pats galvenais, ka var rakstīt ķēdes ar darbībām, kas padod tālāk skaitļošanas kontekstu, un tāpēc ļauj modelēt daudz dažādus "problēmu domēnus"
Reinis Ivanovs
(2023-03-31 19:59:04)
@twitter
JS tika projektēta, lai tajā varētu modelēt lietotāju interakcijas ar lapām kā notikumiem, un tāpēc JS kopš iesākuma ir bijušas funkcijas kā t.s. pirmšķirīgie vai pirmās klases objekti, kas nozīmē, ka tās var padot tālāk kā argumentus citām funkcijām
Reinis Ivanovs
(2023-03-31 20:02:54)
@twitter
Visas valodas nav tādas, kurās būtu iespējams t.s. augstākās pakāpes (higher-order) programmēšana, jeb tāda, kur funkcijas var saņemt funkcijas kā argumentus un atgriezt funkcijas kā rezultātus, un PHP piemērs valodai, kur iesākumā nekas līdzīgs nebija iespējams
Reinis Ivanovs
(2023-03-31 20:43:44)
@twitter
Te pie reizes ir avots par "uz dzelzceļu orientēto programmēšanu", par ko ir jocīgs kontekts, ka tas ir intuitīvs paskaidrojums par monadēm, kas tās speciāli pat nepiemin https://t.co/YOaC8zPUOC

© 2009-2017 civciv ;)