Hemmeligheten bak funksjonell programmering avslørt


tirsdag 19. april 2011 Jobb Polyglot Funksjonell programmering

For en liten stund siden holdt jeg en ZipTalk på jobben om funksjonell programmering. Her følger en kort oppsummering, og jeg har også lagt ved “lysbildene” jeg brukte.

Budskapet i foredraget er rettet mot deg som kanskje har vært på foredrag eller hørt podcasts om funksjonell programmering, men likevel ikke helt fått tak på hva det er. Det gir liksom ikke mening når koden ikke skal ha såkalte “side effects”, og man ikke engang kan endre variabler. Det er noe som ikke stemmer her, noe som mangler. Hvordan kan man bruke funksjonell programmering til å lage programmer som faktisk gjør noe fornuftig?

Ett av poengene mine er at funksjonell programmering ikke er det samme som å bruke et såkalt funksjonelt programmeringsspråk. Funksjonell programmering er en stil, en filosofi, en måte å strukturere kode, en måte å bruke språket på. Ulike språk støtter og legger til rette for denne typen programmering i ulik grad. Språk som Haskell og Clean gjør det lett å skrive funksjonell kode, og gjør det vanskelig å gjøre noe annet. Språk som Ruby og C# har det som trengs for å skrive funksjonelle programmer, men er ikke optimalisert for det. Og et sted imellom finner du f.eks. F#, som forsøker å forene objektorientering og funksjonell programmering på .net-plattformen.

Nå passer det at du tar en titt på slidene, og så kan du lese konklusjonen etterpå.

Hemmeligheten

Hemmeligheten, det som veldig ofte ikke blir sagt når man lærer om funksjonell programmering, er altså at det ikke finnes noen magi. Funksjonell programmering alene kan ikke gjøre noe som helst. Et program utviklet i denne stilen består av to deler. Den største delen er ren og funksjonell, mens den minste delen inneholder den skitne koden med bi-effekter.

Trikset er å klare å separere delene – vite hva som er rent og til å stole på, og hva som ikke er det. Og så må man jobbe mot å la den rene koden gjøre mest mulig.

Var dette oppklarende?


comments powered by Disqus