SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Functional
Programming
  {   Introduction to F#
   Oleksiy Tereshchenko
       Principal consultant at Neudesic
       10 years experience in Custom Application
        Development and Connected Systems




About Presenter
 Introduction to F#
    F# fundamentals

    Demo

   & Questions




Agenda
   Functional programming is a style of
        programming that emphasizes the evaluation
        of expressions, rather than execution of
        commands. The expressions in these languages
        are formed using functions to combine basic
        values. [Hutton ed. 2002]




Definition
   LISP - by John McCarthy in 1958
    (based on the lambda calculus theory)

       ML - by Robin Milner in 1970s
    (notion of types and types inference)

       OCaml – in 1996
    (pragmatic extension of ML, combination of object-oriented and functional
    programming)

       Haskell – in 1990s
    (mathematical purity and elegance)

       Erlang – in 1986
    (simplified concurrent programming)




History
   LINQ
        SQL
        XAML
        XSLT




Modern declarative
technologies
   Business Logic Layer of Enterprise Systems




Best fit for functional
programming
   Makes you and your team productive




Key reason for coding in
functional Style
   Express Abstraction   (hide how code executed and specify what needs to be
         achieved)

        Reuse of patterns
        Reduce impact of requirements change
        Deterministic flow
        Asynchronies flow
        Run concurrently on multiprocessor core
        Simple testing


F# designed to solve
problems
   Functional Programming
             Function Values
             Function Composition
             Immutability
             Recursive Functions
             Type Inference
             Lazy Evaluation
             Tail Recursion
             Sequences

        Imperative Programming
        Object-Oriented Programming
        Asynchronous Workflows
        Parallel Programing




F# offers
F# Fundamentals
let number = 1
    let Number : int = 1 (F# is case sensitive)
    let number = 1 (will fail compilation, since = is binding operation and not assignment )




Variables
let main (argument) =
            printfn “Hello, World %s ” argument
            0
    let square x = x * x

    let rec factorial x =
             if x <= 1 then
                      1
             else
                      x * factorial (x-1)




Functions
let isOdd x = (x % 2 = 1)
    let describeNumber x =
            match isOdd x with
            | true -> printfn “x is odd”
            | false -> printfn “x is event”;;




Pattern Matching
let x = Lazy<int>.Create(fun () -> printfn
    "Evaluating x…"; 10)
    let y = lazy (printfn "Evaluating y…"; x.Value +
    x.Value);;

    y.Value




Lazy evaluation
let sequenceOfNumbers = seq {1 .. 5}
    sequenceOfNumbers |> Seq.iter (printfn "%d")




Sequences
while
            let mutable i = 0
                    while i < 5 do
                      i <- i + 1
                             printf “i = %d” i;;



    for i = 1 to 5 do
      printf “i = %d” i;;




Looping constructs
try
      try
                failwithf "Error!"
      with
                | :? NotSupportedException ->
    reraise()
              | ex -> printfn "Exception caught: %s"
    ex.Message
    finally
            printfn "finally block"




Exception management
Demo

Weitere ähnliche Inhalte

Ähnlich wie Functional Programming Fundamentals

Ähnlich wie Functional Programming Fundamentals (20)

Functional Programming Past Present Future
Functional Programming Past Present FutureFunctional Programming Past Present Future
Functional Programming Past Present Future
 
Functional Programming In Practice
Functional Programming In PracticeFunctional Programming In Practice
Functional Programming In Practice
 
Clojure intro
Clojure introClojure intro
Clojure intro
 
ScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin Odersky
 
Pydiomatic
PydiomaticPydiomatic
Pydiomatic
 
Python idiomatico
Python idiomaticoPython idiomatico
Python idiomatico
 
Scala: functional programming for the imperative mind
Scala: functional programming for the imperative mindScala: functional programming for the imperative mind
Scala: functional programming for the imperative mind
 
A brief introduction to lisp language
A brief introduction to lisp languageA brief introduction to lisp language
A brief introduction to lisp language
 
Functional Objects in Ruby: new horizons – Valentine Ostakh
Functional Objects in Ruby: new horizons  – Valentine OstakhFunctional Objects in Ruby: new horizons  – Valentine Ostakh
Functional Objects in Ruby: new horizons – Valentine Ostakh
 
ppt7
ppt7ppt7
ppt7
 
ppt2
ppt2ppt2
ppt2
 
name name2 n
name name2 nname name2 n
name name2 n
 
name name2 n2
name name2 n2name name2 n2
name name2 n2
 
test ppt
test ppttest ppt
test ppt
 
name name2 n
name name2 nname name2 n
name name2 n
 
ppt21
ppt21ppt21
ppt21
 
name name2 n
name name2 nname name2 n
name name2 n
 
ppt17
ppt17ppt17
ppt17
 
ppt30
ppt30ppt30
ppt30
 
name name2 n2.ppt
name name2 n2.pptname name2 n2.ppt
name name2 n2.ppt
 

Kürzlich hochgeladen

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Kürzlich hochgeladen (20)

Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

Functional Programming Fundamentals

  • 1. Functional Programming { Introduction to F#
  • 2. Oleksiy Tereshchenko  Principal consultant at Neudesic  10 years experience in Custom Application Development and Connected Systems About Presenter
  • 3.  Introduction to F#  F# fundamentals  Demo & Questions Agenda
  • 4. Functional programming is a style of programming that emphasizes the evaluation of expressions, rather than execution of commands. The expressions in these languages are formed using functions to combine basic values. [Hutton ed. 2002] Definition
  • 5. LISP - by John McCarthy in 1958 (based on the lambda calculus theory)  ML - by Robin Milner in 1970s (notion of types and types inference)  OCaml – in 1996 (pragmatic extension of ML, combination of object-oriented and functional programming)  Haskell – in 1990s (mathematical purity and elegance)  Erlang – in 1986 (simplified concurrent programming) History
  • 6. LINQ  SQL  XAML  XSLT Modern declarative technologies
  • 7. Business Logic Layer of Enterprise Systems Best fit for functional programming
  • 8. Makes you and your team productive Key reason for coding in functional Style
  • 9. Express Abstraction (hide how code executed and specify what needs to be achieved)  Reuse of patterns  Reduce impact of requirements change  Deterministic flow  Asynchronies flow  Run concurrently on multiprocessor core  Simple testing F# designed to solve problems
  • 10. Functional Programming  Function Values  Function Composition  Immutability  Recursive Functions  Type Inference  Lazy Evaluation  Tail Recursion  Sequences  Imperative Programming  Object-Oriented Programming  Asynchronous Workflows  Parallel Programing F# offers
  • 12. let number = 1 let Number : int = 1 (F# is case sensitive) let number = 1 (will fail compilation, since = is binding operation and not assignment ) Variables
  • 13. let main (argument) = printfn “Hello, World %s ” argument 0 let square x = x * x let rec factorial x = if x <= 1 then 1 else x * factorial (x-1) Functions
  • 14. let isOdd x = (x % 2 = 1) let describeNumber x = match isOdd x with | true -> printfn “x is odd” | false -> printfn “x is event”;; Pattern Matching
  • 15. let x = Lazy<int>.Create(fun () -> printfn "Evaluating x…"; 10) let y = lazy (printfn "Evaluating y…"; x.Value + x.Value);; y.Value Lazy evaluation
  • 16. let sequenceOfNumbers = seq {1 .. 5} sequenceOfNumbers |> Seq.iter (printfn "%d") Sequences
  • 17. while let mutable i = 0 while i < 5 do i <- i + 1 printf “i = %d” i;; for i = 1 to 5 do printf “i = %d” i;; Looping constructs
  • 18. try try failwithf "Error!" with | :? NotSupportedException -> reraise() | ex -> printfn "Exception caught: %s" ex.Message finally printfn "finally block" Exception management
  • 19. Demo