31

F#: Funkcijsko programiranje za .NET

Embed Size (px)

Citation preview

Page 1: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F#

Funkcijsko programiranje za .NET

Nikola Pleji¢ <[email protected]>

Web User Group, studeni 2010.

Page 2: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Funkcijsko programiranje

• �In computer science, functional programming is aprogramming paradigm that treats computation as the

evaluation of mathematical functions and avoids state and

mutable data.�

Page 3: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Primjer

[ for x in 1 .. 999 do

if x % 3 = 0 or x % 5 = 0 then yield x ]

|> List.sum

(Project Euler, zadatak 1: suma svih umnoºaka brojeva 3

i 5 manjih od 1000)

Page 4: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Primjer

[ for x in 1 .. 999 do

if x % 3 = 0 or x % 5 = 0 then yield x ]

|> List.sum

(Project Euler, zadatak 1: suma svih umnoºaka brojeva 3

i 5 manjih od 1000)

Page 5: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Povijest

• teorijska podloga: A. Church - λ ra£un (1930-ih)

• po£eci: kasnih 1950-ih

• MIT: John McCarthy / LISP

• Scheme, ML

• FP danas:

• Haskell, Erlang, OCaml, XSLT...• vrlo popularno u akademskoj zajednici i u razvoju visokorizi£nih

sustava

Page 6: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Povijest

• teorijska podloga: A. Church - λ ra£un (1930-ih)

• po£eci: kasnih 1950-ih

• MIT: John McCarthy / LISP

• Scheme, ML

• FP danas:

• Haskell, Erlang, OCaml, XSLT...• vrlo popularno u akademskoj zajednici i u razvoju visokorizi£nih

sustava

Page 7: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Povijest

• teorijska podloga: A. Church - λ ra£un (1930-ih)

• po£eci: kasnih 1950-ih

• MIT: John McCarthy / LISP

• Scheme, ML

• FP danas:

• Haskell, Erlang, OCaml, XSLT...• vrlo popularno u akademskoj zajednici i u razvoju visokorizi£nih

sustava

Page 8: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Povijest

• teorijska podloga: A. Church - λ ra£un (1930-ih)

• po£eci: kasnih 1950-ih

• MIT: John McCarthy / LISP

• Scheme, ML

• FP danas:

• Haskell, Erlang, OCaml, XSLT...• vrlo popularno u akademskoj zajednici i u razvoju visokorizi£nih

sustava

Page 9: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

FP u drugim jezicima

• C#: LINQ

• Python: list comprehensions, higher-order functions, ...

• Ruby, JavaScript...

Page 10: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

FP u drugim jezicima

• C#: LINQ

• Python: list comprehensions, higher-order functions, ...

• Ruby, JavaScript...

Page 11: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

FP u drugim jezicima

• C#: LINQ

• Python: list comprehensions, higher-order functions, ...

• Ruby, JavaScript...

Page 12: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Za²to funkcijsko programiranje?

• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenihprocesora

• �druga£iji� pristup i izraºajnija sintaksa pogodna zamatematiku, DSL-ove...

• manje koda = manje bugova

• osobno prosvjetljenje

• geekPoints++

Page 13: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Za²to funkcijsko programiranje?

• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenihprocesora

• �druga£iji� pristup i izraºajnija sintaksa pogodna zamatematiku, DSL-ove...

• manje koda = manje bugova

• osobno prosvjetljenje

• geekPoints++

Page 14: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Za²to funkcijsko programiranje?

• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenihprocesora

• �druga£iji� pristup i izraºajnija sintaksa pogodna zamatematiku, DSL-ove...

• manje koda = manje bugova

• osobno prosvjetljenje

• geekPoints++

Page 15: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Za²to funkcijsko programiranje?

• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenihprocesora

• �druga£iji� pristup i izraºajnija sintaksa pogodna zamatematiku, DSL-ove...

• manje koda = manje bugova

• osobno prosvjetljenje

• geekPoints++

Page 16: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Za²to funkcijsko programiranje?

• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenihprocesora

• �druga£iji� pristup i izraºajnija sintaksa pogodna zamatematiku, DSL-ove...

• manje koda = manje bugova

• osobno prosvjetljenje

• geekPoints++

Page 17: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Hello, World!

printfn �Hello, World!�

Page 18: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F#

• ML =⇒ (O)Caml =⇒ F#

• Don Syme, Microsoft Research, Cambridge cca. 2002.

• vi²eparadigmatski

• funkcijski• objektno-orijentirani• imperativni

Page 19: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F#

• ML =⇒ (O)Caml =⇒ F#

• Don Syme, Microsoft Research, Cambridge cca. 2002.

• vi²eparadigmatski

• funkcijski• objektno-orijentirani• imperativni

Page 20: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F#

• ML =⇒ (O)Caml =⇒ F#

• Don Syme, Microsoft Research, Cambridge cca. 2002.

• vi²eparadigmatski

• funkcijski• objektno-orijentirani• imperativni

Page 21: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F#

• stati£no i jako tipiziran1

• �poga�a� tipove: type inference2

• eksplicitna promjenjivost (keyword mutable)

1statically strongly typed2Hindley-Milner

Page 22: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F#

• stati£no i jako tipiziran1

• �poga�a� tipove: type inference2

• eksplicitna promjenjivost (keyword mutable)

1statically strongly typed2Hindley-Milner

Page 23: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F#

• stati£no i jako tipiziran1

• �poga�a� tipove: type inference2

• eksplicitna promjenjivost (keyword mutable)

1statically strongly typed2Hindley-Milner

Page 24: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F# i .NET Framework

• puni pristup Base Class Libraryju + libraryji speci�£ni za F#(Microsoft.FSharp)

• referenca na DLL + open [namespace]

• C# library → F#

• F# library → C#

Page 25: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F# i .NET Framework

• puni pristup Base Class Libraryju + libraryji speci�£ni za F#(Microsoft.FSharp)

• referenca na DLL + open [namespace]

• C# library → F#

• F# library → C#

Page 26: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F# i .NET Framework

• puni pristup Base Class Libraryju + libraryji speci�£ni za F#(Microsoft.FSharp)

• referenca na DLL + open [namespace]

• C# library → F#

• F# library → C#

Page 27: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F# i .NET Framework

• puni pristup Base Class Libraryju + libraryji speci�£ni za F#(Microsoft.FSharp)

• referenca na DLL + open [namespace]

• C# library → F#

• F# library → C#

Page 28: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F# na Windowsima

• Visual Studio 2010

• Visual Studio 2008 uz zasebnu instalaciju

Page 29: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

F# na drugim platformama

• GNU/Linux i MacOS X: Mono3

• editori: MonoDevelop 2.44, Emacs, Vim...

3http://fsxplat.codeplex.com/4http://functional-variations.net/screencasts/linux-monodevelop.aspx

Page 30: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Primjeri

Page 31: F#: Funkcijsko programiranje za .NET

Funkcijsko programiranje F# Primjeri Resursi

Resursi

• F# Programming:http://en.wikibooks.org/wiki/F_Sharp_Programming

• F# PowerPack: http://fsharppowerpack.codeplex.com/

• hubFS: http://cs.hubfs.net/

• F# Developer Center: http://fsharp.net/

• Don Syme: http://blogs.msdn.com/b/dsyme/

• Tomas Petricek: http://tomasp.net/