introduktion til f#
DESCRIPTION
Introduktion til F#. Dækker hovedtrækkene i syntaksen samt giver en hurtig beskrivelse af forskellen mellem OOP og funktionsbaseret programmering. Sidste slide indeholder en række gode ressourcer til at lære mere om F#.TRANSCRIPT
Sproget F#
• Designet og implementeret af Don Syme oa. (Microsoft Research) siden 2005
• Multiparadigme (funktionsbaseret,imperativt,objekt-orienteret)
• Oprindeligt en variant af ML
• Inspireret af ML, OCaml, Python, Haskell, Scala, Erlang og C#
• Reelt funktionelt scripting sprog ligesom Javascript (og SQL)
• Fuldt medlem af .NET-familien• Alle .NET libraries kan benyttes fra F#
• Et F# library kan bruges af alle andre .NET sprog (inkl. C#)
• Visual Studio 2010 og frem (tidligere kunne man installere F# som add-in til VS)• Vers. 3.0 (3.1 soon to be released…)
• Kan køre på alle platforme via mono-rammeværket
• Apache 2.0 licens
Page 3
Cases
• Komplekse udregninger
• Store datamængder
• Statistik
• BI
• Osv…
Brancher:• Finansiel
• Forsikring
• Energi
• Gaming (bl.a. kunstig intelligens)
http://msdn.microsoft.com/en-us/vstudio/gg634701.aspx
Page 4
Software arkitektur
Page 5
Data Access Layer (DAL)
Web Service
UI
C#
F#
C# / F#
C#
Business Logic Layer (BLL)(inkl. Utils, Unit Test osv.) F#
F#
F#
F#
Funktionsprogrammering
• Funktionsprogrammering kræver en anden måde at tænke på…!• ”Funktioner”, ikke ”metoder”
• Alle funktioner = værdier = ”variabler”
• Expressions i stedet for statements• Rekursive funktioner i stedet for loops• Match-with i stedet for if-then-else• Funktioner i stedet for dot-notationer
• Brug de indbyggede F# specifikke typer og funktioner (biblioteker – List, Seq)• Brug de medfølgende funktioner i bibliotekerne i stedet for at lave rekursive
funktioner.
• Brug ikke klasser
• Brug ”discriminated union” types
• Brug ”piping” i stedet for ”nestede” funktioner når det er muligt
• Lad være med at bruge debuggeren…
Page 6
Funktionsprogrammering
• Det er (desværre) muligt at falde tilbage til OOP når man koder F#• Multiparadigme
Page 7
F# - Compiler
• Kodefiler compiles i den rækkefølge de optræder i VS!
• Indhold af kodefilen compiles:• Left to right – top down
• Hvis kodefiler placeres i forkert rækkefølge:• ”Hvor er mine modules, funktioner” !?!?!?!?!?
• Hvis kode placeres i forkert rækkefølge i kodefilen:• ”Hvor er mine funktioner, types osv” !?!?!?!?!?
Page 8
F# - Generel syntaks
• ”Rent” sprog – intet kodestøj
• Statisk, typestærkt og med fuld type inference!
• Indrykning beskriver niveau
(Alternativt kan der også benyttes ”in”, ”begin” og ”end”)
• Ingen return – indhold af sidste linje returneres
• ”Nestede” funktioner
Page 9
F# - Værdier
• ”let” definerer en funktion / værdi (eller ”variabel”)
• Alle værdier/funktioner er immutable som standard• (Alt er per definition ”konstanter”)
Page 10
Namespaces og modules
• Namespaces som i C#
• Funktioner (og andre kodestumper) inddeles normalt i moduler (modules)• Gruppering af kode
• F# compileren forsøger selv automatisk at lægge koden i moduler…
Page 11
• type = Interfaces
• member benyttes til både at definere properties og metoder
F# - Interfaces
Page 13
• Langt nemmere måde at repræsentere data end klasser = unions!
• Record:
• Discriminated union:
• Hvordan bruges de?
F# - Unions
Page 14
F# - Ingen NullReferenceExceptions
NullReferenceExceptions i C#
• Eksemplet compiler fint…
Ingen NullReferenceExceptions i F#!
(I udgangspunktet…)
• Option som type = no compilation
• Funktionel programmering:• Ingen pointere
• Ingen uinitialiserede variabler
Page 19
F# - Specielle indbyggede funktioner
• Stort bibliotek med specielle funktioner
• Moduler under Microsoft.FSharp.Collections namespacet:• List / PList
• Seq / PSeq
• Array / PArray
• Map
• Fold
• Find
• Reduce
• Iter
• Osv….
Page 21
F# - All in all…
• Stor genbrugelighed – omdrejningspunktet er ”immutable” funktioner (i udgangspunktet)
• Matematiske udtryk defineres som de er tænkt i matematikken• højere ordens funktioner bl.a.
• Man kan det samme som i C#• … og mere til
• Hurtigere
• Mere ”intelligent” compiler = Mindre fejlrate
• Mange indbyggede funktioner
• Understøtter tail recursion (hvilket C# ikke gør)
Page 23
Ressourcer
• http://fsharp.org/
• http://blogs.msdn.com/b/dsyme/
• http://fsharpforfunandprofit.com/
• http://msdn.microsoft.com/en-us/library/dd233181.aspx
• https://github.com/fsharp/FsUnit/
• http://blogs.msdn.com/b/dsyme/archive/2010/06/28/f-case-study-banking-firm-uses-functional-language-to-speed-development.aspx
• http://fsharppowerpack.codeplex.com/
• The story of elfs working in your computer:• http://blog.functionalfun.net/2008/04/bouncing-on-your-tail.html
Page 27