More than Just Lines on a Map: Best Practices for U.S Bike Routes
F#: Funkcijsko programiranje za .NET
1. Funkcijsko programiranje F# Primjeri Resursi
F#
Funkcijsko programiranje za .NET
Nikola Pleji¢ <nikola@plejic.com>
Web User Group, studeni 2010.
2. Funkcijsko programiranje F# Primjeri Resursi
Funkcijsko programiranje
• In computer science, functional programming is a
programming paradigm that treats computation as the
evaluation of mathematical functions and avoids state and
mutable data.
3. 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
4. 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)
5. Funkcijsko programiranje F# Primjeri Resursi
Povijest
• teorijska podloga: A. Church - λ ra£un (1930-ih)
6. Funkcijsko programiranje F# Primjeri Resursi
Povijest
• teorijska podloga: A. Church - λ ra£un (1930-ih)
• po£eci: kasnih 1950-ih
• MIT: John McCarthy / LISP
7. 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
8. 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
13. Funkcijsko programiranje F# Primjeri Resursi
Za²to funkcijsko programiranje?
• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenih
procesora
• druga£iji pristup i izraºajnija sintaksa pogodna za
matematiku, DSL-ove...
14. Funkcijsko programiranje F# Primjeri Resursi
Za²to funkcijsko programiranje?
• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenih
procesora
• druga£iji pristup i izraºajnija sintaksa pogodna za
matematiku, DSL-ove...
• manje koda = manje bugova
15. Funkcijsko programiranje F# Primjeri Resursi
Za²to funkcijsko programiranje?
• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenih
procesora
• druga£iji pristup i izraºajnija sintaksa pogodna za
matematiku, DSL-ove...
• manje koda = manje bugova
• osobno prosvjetljenje
16. Funkcijsko programiranje F# Primjeri Resursi
Za²to funkcijsko programiranje?
• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenih
procesora
• druga£iji pristup i izraºajnija sintaksa pogodna za
matematiku, DSL-ove...
• manje koda = manje bugova
• osobno prosvjetljenje
• geekPoints++
19. Funkcijsko programiranje F# Primjeri Resursi
F#
• ML =⇒ (O)Caml =⇒ F#
• Don Syme, Microsoft Research, Cambridge cca. 2002.
20. Funkcijsko programiranje F# Primjeri Resursi
F#
• ML =⇒ (O)Caml =⇒ F#
• Don Syme, Microsoft Research, Cambridge cca. 2002.
• vi²eparadigmatski
• funkcijski
• objektno-orijentirani
• imperativni
21. Funkcijsko programiranje F# Primjeri Resursi
F#
1
• stati£no i jako tipiziran
1 statically strongly typed
2 Hindley-Milner
22. Funkcijsko programiranje F# Primjeri Resursi
F#
1
• stati£no i jako tipiziran
2
• pogaža tipove: type inference
1 statically strongly typed
2 Hindley-Milner
23. Funkcijsko programiranje F# Primjeri Resursi
F#
1
• stati£no i jako tipiziran
2
• pogaža tipove: type inference
• eksplicitna promjenjivost (keyword mutable)
1 statically strongly typed
2 Hindley-Milner
24. Funkcijsko programiranje F# Primjeri Resursi
F# i .NET Framework
• puni pristup Base Class Libraryju + libraryji speci£ni za F#
(Microsoft.FSharp)
25. 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]
26. 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#
27. 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#
28. Funkcijsko programiranje F# Primjeri Resursi
F# na Windowsima
• Visual Studio 2010
• Visual Studio 2008 uz zasebnu instalaciju
29. Funkcijsko programiranje F# Primjeri Resursi
F# na drugim platformama
3
• GNU/Linux i MacOS X: Mono
4
• editori: MonoDevelop 2.4 , Emacs, Vim...
3 http://fsxplat.codeplex.com/
4 http://functional-variations.net/screencasts/linux-monodevelop.aspx