SlideShare a Scribd company logo
Funkcijsko programiranje             F#                Primjeri   Resursi




                                          F#
                           Funkcijsko programiranje za .NET




                           Nikola Pleji¢ <nikola@plejic.com>




                            Web User Group, studeni 2010.
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.
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
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)
Funkcijsko programiranje            F#                    Primjeri   Resursi

Povijest




          •   teorijska podloga: A. Church -   λ   ra£un (1930-ih)
Funkcijsko programiranje               F#                 Primjeri   Resursi

Povijest




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


          •   po£eci: kasnih 1950-ih

                 •   MIT: John McCarthy / LISP
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
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
Funkcijsko programiranje   F#   Primjeri   Resursi

FP u drugim jezicima




          •   C#: LINQ
Funkcijsko programiranje             F#                 Primjeri         Resursi

FP u drugim jezicima




          •   C#: LINQ


          •   Python: list comprehensions, higher-order functions, ...
Funkcijsko programiranje             F#                 Primjeri         Resursi

FP u drugim jezicima




          •   C#: LINQ


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


          •   Ruby, JavaScript...
Funkcijsko programiranje              F#                  Primjeri         Resursi

Za²to funkcijsko programiranje?




          •   asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenih
              procesora
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...
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
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
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++
Funkcijsko programiranje       F#      Primjeri   Resursi

Hello, World!




             printfn Hello, World!
Funkcijsko programiranje              F#       Primjeri   Resursi

F#




          •   ML    =⇒     (O)Caml   =⇒   F#
Funkcijsko programiranje              F#            Primjeri       Resursi

F#




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


          •   Don Syme, Microsoft Research, Cambridge cca. 2002.
Funkcijsko programiranje               F#           Primjeri       Resursi

F#




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


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


          •   vi²eparadigmatski

                 • funkcijski
                 • objektno-orijentirani
                 • imperativni
Funkcijsko programiranje                  F#   Primjeri   Resursi

F#




                                        1
          •   stati£no i jako tipiziran




          1 statically strongly typed
          2 Hindley-Milner
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
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
Funkcijsko programiranje             F#                Primjeri               Resursi

F# i .NET Framework




          •   puni pristup Base Class Libraryju + libraryji speci£ni za F#
              (Microsoft.FSharp)
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]
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#
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#
Funkcijsko programiranje            F#                    Primjeri   Resursi

F# na Windowsima




          •   Visual Studio 2010

          •   Visual Studio 2008 uz zasebnu instalaciju
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
Funkcijsko programiranje   F#   Primjeri   Resursi

Primjeri
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/

More Related Content

Featured

Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
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
  • 9. Funkcijsko programiranje F# Primjeri Resursi FP u drugim jezicima • C#: LINQ
  • 10. Funkcijsko programiranje F# Primjeri Resursi FP u drugim jezicima • C#: LINQ • Python: list comprehensions, higher-order functions, ...
  • 11. Funkcijsko programiranje F# Primjeri Resursi FP u drugim jezicima • C#: LINQ • Python: list comprehensions, higher-order functions, ... • Ruby, JavaScript...
  • 12. Funkcijsko programiranje F# Primjeri Resursi Za²to funkcijsko programiranje? • asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenih procesora
  • 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++
  • 17. Funkcijsko programiranje F# Primjeri Resursi Hello, World! printfn Hello, World!
  • 18. Funkcijsko programiranje F# Primjeri Resursi F# • ML =⇒ (O)Caml =⇒ F#
  • 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
  • 30. Funkcijsko programiranje F# Primjeri Resursi Primjeri
  • 31. 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/