Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Funksjonell programmering

449 visualizaciones

Publicado el

Foredrag fra møte om funksjonell programmering i Webstep.

Publicado en: Educación
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Funksjonell programmering

  1. 1. FUNKSJONELL PROGRAMMERING Av Kur t Rossgår d / @r ossgar d
  2. 2. HVA ER FUNKSJONELL PROGRAMMERING? Lage programmer med bare rene funksjoner (pure functions) Ingen sideeffekter
  3. 3. SIDEEFFEKTER
  4. 4. EKSEMPLER PÅ SIDEEFFEKTER Endre verdi på en variabel Endre verdier direkte i en datastruktur Sette et felt på et objekt Kaste et unntak Skrive til konsoll eller lese brukerinput Lese fra eller skrive til fil Tegne på skjermen
  5. 5. ET PROGRAM MED SIDEEFFEKTER casCf { ls ae dfbyofec:CeiCr) Cfe ={ e uCfe(c rdtad: ofe vlcp=nwCfe( a u e ofe) c.hrecppie ccag(u.rc) cp u } }
  6. 6. SIDEEFFEKTER, MEN TESTBAR casCf { ls ae dfbyofec:CeiCr,p Pyet) Cfe ={ e uCfe(c rdtad : amns: ofe vlcp=nwCfe( a u e ofe) pcag(c cppie .hrec, u.rc) cp u } }
  7. 7. FUNKSJONELT ALTERNATIV casCf { ls ae dfbyofec:CeiCr) (ofe Cag)={ e uCfe(c rdtad: Cfe, hre vlcp=nwCfe( a u e ofe) (u,Cag(c cppie) cp hrec, u.rc) } Klassen Charge: cs casCag(c CeiCr,aon:Dul){ ae ls hrec: rdtad mut obe dfcmieohr Cag) Cag = e obn(te: hre: hre i (c= ohrc) f c = te.c Cag(c aon +ohraon) hrec, mut te.mut es le trwnwEcpin"a' cmiecagsfrmlil crs) ho e xeto(Cnt obn hre o utpe ad" }
  8. 8. KJØPE FLERE casCf { ls ae dfbyofec:CeiCr) (ofe Cag).. e uCfe(c rdtad: Cfe, hre . dfbyofe(c CeiCr,n It:(itCfe] Cag)= e uCfesc: rdtad : n) Ls[ofe, hre vlprhss Ls[Cfe,Cag) =Ls.iln(uCfe(c) a ucae: it(ofe hre] itfl()byofec) vl(ofe,cags =prhssuzp a cfes hre) ucae.ni (ofe,cagsrdc(c,2 = c.obn(2) cfes hre.eue(1c) > 1cmiec)) } Gruppere per kredittkort og lage én belastning per kort dfcaec(hre:Ls[hre) Ls[hre = e olsecags itCag]: itCag] cagsgopy_c)vle.a(.eue_cmie_)tLs hre.ruB(.c.ausmp_rdc( obn ).oit List[Charge] -> Map(CreditCard, List[Charge]) -> Iterable[List[Charge]] -> Iterable[Charge] -> List[Charge]
  9. 9. RENE FUNKSJONER / PURE FUNCTIONS
  10. 10. HVA ER EN REN FUNKSJON? Gitt en funksjon f, med input type A og output type B A= B > It= Srn n > tig Alle verdier a av type A resulterer i en verdi b av type B, slik at b bare bestemmes ut fra a.
  11. 11. EKSEMPLER PÅ RENE FUNKSJONER (+) funksjonen for Integer Gitt to tall, vil alltid gi et bestemt tall tilbake .length for String String er immutable, og lengde vil alltid returnere samme lengde Referential transparency Egenskap ved et utrykk som sier at et utrykk kan byttes ut med resultatet av uttrykket, uten at programmet endrer seg 3 + 5 kan byttes ut med resultatet 8 .feks.
  12. 12. RT OG BUYCOFFEE EKSEMPELET casCf { ls ae dfbyofec:CeiCr) Cfe ={ e uCfe(c rdtad: ofe vlcp=nwCfe( a u e ofe) c.hrecppie ccag(u.rc) cp u } } For at eksempelet vårt skal være "pure" så må p(buyCoffee(aliceCreditCard)) oppføre seg på lik måte som p(new Coffee()) for ethvert program p. RT tvinger at alle effekter gjøres gjeldene i returtypen til funksjonen
  13. 13. SUBSTITUSJONSMODELLEN the substitution model
  14. 14. REPL (READ­EVAL­PRINT­LOOP) saa vlx="el,Wrd cl> a Hlo ol" x Srn =Hlo Wrd : tig el, ol saa vlr =xrvre cl> a 1 .ees r:Srn =drW,le 1 tig lo olH saa vlr =xrvre cl> a 2 .ees r:Srn =drW,le 2 tig lo olH Substituere saa vlr ="el,Wrd.ees cl> a 1 Hlo ol"rvre r:Srn =drW,le 1 tig lo olH saa vlr ="el,Wrd.ees cl> a 2 Hlo ol"rvre r:Srn =drW,le 2 tig lo olH
  15. 15. IKKE RT saa vlx=nwSrnBidr"el" cl> a e tigule(Hlo) x SrnBidr=Hlo : tigule el saa vly=xapn(,Wrd) cl> a .ped" ol" y SrnBidr=Hlo Wrd : tigule el, ol saa vlr =ytSrn cl> a 1 .otig r:Srn =Hlo Wrd 1 tig el, ol saa vlr =ytSrn cl> a 2 .otig r:Srn =Hlo Wrd 2 tig el, ol Sideeffekter knekker RT saa vlx=nwSrnBidr"el" cl> a e tigule(Hlo) x SrnBidr=Hlo : tigule el saa vlr =xapn(,Wrd)tSrn cl> a 1 .ped" ol".otig r:Srn =Hlo Wrd 1 tig el, ol saa vlr =xapn(,Wrd)tSrn cl> a 2 .ped" ol".otig r:Srn =Hlo Wrd Wrd 2 tig el, ol, ol
  16. 16. OPPSUMMERING Sideeffekter gjør at det blir vanskelig å forstå oppførselen til et program Referential transparency, i et uttrykk så input kan byttes ut med output fra uttrykket RT gjør at vi kan benytte oss av substitusjonsmodellen Funksjonell programmering gjør kode mer modulær. Vi kan komposisjonere funksjoner.

×