Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Funksjonell programmering

447 views

Published on

Foredrag fra møte om funksjonell programmering i Webstep.

Published in: Education
  • Be the first to comment

  • Be the first to like this

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.

×