Introduktion til F#

27
Introduktion til

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 of Introduktion til F#

Introduktion til

Agenda

• Overordnet om F#

• Cases

• Software arkitektur

• Sproget

• Demo

Page 2

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

F# - Klasser

• Defineres som ”type”

C#:

F#:

Page 12

• 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# - Enums

Page 15

F# - Tuples

• ”Multipliceret” sammen til en enhed/object

Page 16

F# - Units of measures

• En nemmere måde at arbejde med enheder (måleenheder) på:

Page 17

F# - Units of measures

• Newtons 2. lov:

• Valutaomregning

Page 18

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# - Recursion vs loops

Page 20

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

Demo

• Tekst søgemotor!

Page 22

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

F#

Small IS better

Page 24

F#

Page 25

Try F#!

http://www.tryfsharp.org

Page 26