SlideShare uma empresa Scribd logo
1 de 30
Eriawan Kusumawardhono
   F# is starting from a research project of
    Microsoft, created by Don Syme
   F# is a functional programming language
    that runs on top of .NET
   F# is now part of VS 2010 built in
    programming language
   Also part of OCAML programming language
    family
   There are many definitions about this, and
    there’s no simple standard definition
   According to Erik Meijer and Brian Beckman
    of Microsoft, Functional Programming is
    programming with mathematical function,
    where function is a first class citizen of a
    program
   A simple operation that returns a value, that
    can have a parameter or more than one
    parameters
f(x) = x+1
y=x+1
x=x+1
x++
F#                                 OOP (C#, VB, C++…)

    Immutable by default             Mutable by default
    Function is the same as          Function is treated as a
     data in a program, and can        method that must reside in
     be written as a standalone        a body of a class
     function                         ‘Noisy’ syntax
    Succinct syntax                  Type inference is only
    Type inference is available       available since C# 3.0 and
     from the start                    VB 9.0, not in C++ and
                                       others
Comparison of F# to others such as C#, VB, C++
   Immutable by default       Mutable by default

    let y = x + 1               x = x +1

   Mutable is explicit        Immutable is explicit.
                                For example, in C#:
    let mutable x = x + 1        readonly x = 0


                               In VB:
                                 ReadOnly x As Integer
   In F#, it can be              In C# and VB, it must
    standalone and simple          be enclosed in a
                                   class/module

    let f x = x +2                 class SimpleFunc
                                   {
                                       public static Int32
                                   f(Int32 x)
   This is why it is called           {
                                           return x + 2;
    “succinct”                         }
                                   }

                                  This is “noisy”
   Already have at the first release
   It is also a strong type language
   Including built in support of Generic
   The type inference is not just local type
    inference, but it then can be inferred based
    on the use of the parameters!
Int32
let avalue =10               String
let aName = ‘Hello’
let savingInterest = 0.2           Double
   Type inference on functions when it’s used
                     let f x = sqr x + 1
                                            Infers integer
                         .. return type     from a whole
                          becomes int       number…
let sqr x = x * x

                                             Infers double
                                            from a double
                                                literal..
                    let f x = sqr x + 1.0
Less noise syntax but it’s still strongly typed
   Always begin with keyword “let”


      let avalue = 10
      let aName = ‘Hello’
      let savingInterest = 0.2
   When there’s a need for explicit type system:


     let x:int = 0
     let piConstant:float = 3.141
     let Name:String = ‘Eriawan’
   Always begin with let keyword

     let f x = x + 1
     let sqr y = y * y
     let force x = x * gravity
   Parameters are written in a nice separation
    “juxtaposition” syntax: a space

          let sqr x = x * x
                               Function parameter

          let add a b = a + b
The code in F#
   Multiple lines of code is using indentation:


       let rec fib x =
           if x < 2 then 1
           else fib (x–1) + fib (x-2)
   Comment is the same with VB and C#
       // some code
       let x = x + 2

       // XML doc comment:

       /// <summary>A square function<summary>
       /// <param name=‚x‛>the value</param>
       let f x = x * x
The object oriented and imperative are here in F#
let f x = x *x
let g(x) = x* x
fun x -> x * x
   Mutable is easy, by adding keyword
    “mutable”
   Next operation of assignment must use “<-”
    to differentiate mutability.
              let mutable y = 10
              y <- y + 1
   Creating enum is also easy:


                   type Suit =
                       | Heart
                       | Diamond
                       | Spade
                       | Club
type Vector2D(dx:float, dy:float) =
    // The pre-computed length of the vector
    let length = sqrt(dx*dx + dy*dy)
    /// The displacement along the X-axis
    member v.DX = dx
    /// The displacement along the Y-axis
    member v.DY = dy
    /// The length of the vector
    member v.Length = length
    // Re-scale the vector by a constant
    member v.Scale(k) = Vector2D(k*dx, k*dy)
   It’s easy! Just create type but with abstract
    keyword as modifier for all functions and
    other members:

          type IPeekPoke =
              abstract Peek: unit -> int
              abstract Poke: int -> unit
Unit of measure in F# only!
[<Measure>]
type kg

[<Measure>]
type m

[<Measure>]
type s

let gravityOnEarth = 9.81<m/s^2>
let heightOfMyOfficeWindow = 3.5<m>
let speedOfImpact =
    sqrt (2.0 * gravityOnEarth + heightOfMyOfficeWindow)
Created by Eriawan Kusumawardhono, courtesy of RX Communica

Mais conteúdo relacionado

Mais procurados

Lec 42.43 - virtual.functions
Lec 42.43 - virtual.functionsLec 42.43 - virtual.functions
Lec 42.43 - virtual.functions
Princess Sam
 
yield and return (poor English ver)
yield and return (poor English ver)yield and return (poor English ver)
yield and return (poor English ver)
bleis tift
 
Lecturer23 pointersin c.ppt
Lecturer23 pointersin c.pptLecturer23 pointersin c.ppt
Lecturer23 pointersin c.ppt
eShikshak
 

Mais procurados (20)

Lec 42.43 - virtual.functions
Lec 42.43 - virtual.functionsLec 42.43 - virtual.functions
Lec 42.43 - virtual.functions
 
C++ Chapter I
C++ Chapter IC++ Chapter I
C++ Chapter I
 
Virtual function
Virtual functionVirtual function
Virtual function
 
yield and return (poor English ver)
yield and return (poor English ver)yield and return (poor English ver)
yield and return (poor English ver)
 
C++ Chapter III
C++ Chapter IIIC++ Chapter III
C++ Chapter III
 
Lecturer23 pointersin c.ppt
Lecturer23 pointersin c.pptLecturer23 pointersin c.ppt
Lecturer23 pointersin c.ppt
 
Kotlin Delegates: Reduce the boilerplate
Kotlin Delegates: Reduce the boilerplateKotlin Delegates: Reduce the boilerplate
Kotlin Delegates: Reduce the boilerplate
 
Bc0037
Bc0037Bc0037
Bc0037
 
Pointers in C
Pointers in CPointers in C
Pointers in C
 
5 - OOP - Smalltalk in a Nutshell (c)
5 - OOP - Smalltalk in a Nutshell (c)5 - OOP - Smalltalk in a Nutshell (c)
5 - OOP - Smalltalk in a Nutshell (c)
 
Interpreter Case Study - Design Patterns
Interpreter Case Study - Design PatternsInterpreter Case Study - Design Patterns
Interpreter Case Study - Design Patterns
 
C# Summer course - Lecture 3
C# Summer course - Lecture 3C# Summer course - Lecture 3
C# Summer course - Lecture 3
 
Dynamic Memory Allocation in C
Dynamic Memory Allocation in CDynamic Memory Allocation in C
Dynamic Memory Allocation in C
 
Lecture 7, c++(complete reference,herbet sheidt)chapter-17.
Lecture 7, c++(complete reference,herbet sheidt)chapter-17.Lecture 7, c++(complete reference,herbet sheidt)chapter-17.
Lecture 7, c++(complete reference,herbet sheidt)chapter-17.
 
Interpreter Design Pattern
Interpreter Design PatternInterpreter Design Pattern
Interpreter Design Pattern
 
Java Foundations: Basic Syntax, Conditions, Loops
Java Foundations: Basic Syntax, Conditions, LoopsJava Foundations: Basic Syntax, Conditions, Loops
Java Foundations: Basic Syntax, Conditions, Loops
 
Java essence part 1
Java essence part 1Java essence part 1
Java essence part 1
 
Back to the Future with TypeScript
Back to the Future with TypeScriptBack to the Future with TypeScript
Back to the Future with TypeScript
 
Rust Intro
Rust IntroRust Intro
Rust Intro
 
2013 lecture-02-syntax shortnewcut
2013 lecture-02-syntax shortnewcut2013 lecture-02-syntax shortnewcut
2013 lecture-02-syntax shortnewcut
 

Destaque

Destaque (11)

Introduction in Image Processing Matlab Toolbox
Introduction in Image Processing Matlab ToolboxIntroduction in Image Processing Matlab Toolbox
Introduction in Image Processing Matlab Toolbox
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShare
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
 
You Suck At PowerPoint!
You Suck At PowerPoint!You Suck At PowerPoint!
You Suck At PowerPoint!
 
2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare
 
What to Upload to SlideShare
What to Upload to SlideShareWhat to Upload to SlideShare
What to Upload to SlideShare
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Semelhante a F sharp _vs2010_beta2

Learn a language : LISP
Learn a language : LISPLearn a language : LISP
Learn a language : LISP
Devnology
 
#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting Started#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting Started
Hadziq Fabroyir
 
C++totural file
C++totural fileC++totural file
C++totural file
halaisumit
 
Tutconstructordes
TutconstructordesTutconstructordes
Tutconstructordes
Niti Arora
 

Semelhante a F sharp _vs2010_beta2 (20)

Functional programming with FSharp
Functional programming with FSharpFunctional programming with FSharp
Functional programming with FSharp
 
Testing for share
Testing for share Testing for share
Testing for share
 
Intro f# functional_programming
Intro f# functional_programmingIntro f# functional_programming
Intro f# functional_programming
 
C++ quik notes
C++ quik notesC++ quik notes
C++ quik notes
 
Introduction to python programming ( part-2 )
Introduction to python programming ( part-2 )Introduction to python programming ( part-2 )
Introduction to python programming ( part-2 )
 
C# programming
C# programming C# programming
C# programming
 
Introduction to FSharp
Introduction to FSharpIntroduction to FSharp
Introduction to FSharp
 
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
 
Pydiomatic
PydiomaticPydiomatic
Pydiomatic
 
Python idiomatico
Python idiomaticoPython idiomatico
Python idiomatico
 
ForLoopandUserDefinedFunctions.pptx
ForLoopandUserDefinedFunctions.pptxForLoopandUserDefinedFunctions.pptx
ForLoopandUserDefinedFunctions.pptx
 
Functions_21_22.pdf
Functions_21_22.pdfFunctions_21_22.pdf
Functions_21_22.pdf
 
Learn a language : LISP
Learn a language : LISPLearn a language : LISP
Learn a language : LISP
 
Functions.pdf
Functions.pdfFunctions.pdf
Functions.pdf
 
Functionscs12 ppt.pdf
Functionscs12 ppt.pdfFunctionscs12 ppt.pdf
Functionscs12 ppt.pdf
 
#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting Started#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting Started
 
C++ Language
C++ LanguageC++ Language
C++ Language
 
C++totural file
C++totural fileC++totural file
C++totural file
 
Tutconstructordes
TutconstructordesTutconstructordes
Tutconstructordes
 
C++ tutorial
C++ tutorialC++ tutorial
C++ tutorial
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
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...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
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
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 

F sharp _vs2010_beta2

  • 2. F# is starting from a research project of Microsoft, created by Don Syme  F# is a functional programming language that runs on top of .NET  F# is now part of VS 2010 built in programming language  Also part of OCAML programming language family
  • 3. There are many definitions about this, and there’s no simple standard definition  According to Erik Meijer and Brian Beckman of Microsoft, Functional Programming is programming with mathematical function, where function is a first class citizen of a program
  • 4. A simple operation that returns a value, that can have a parameter or more than one parameters
  • 7. F# OOP (C#, VB, C++…)  Immutable by default  Mutable by default  Function is the same as  Function is treated as a data in a program, and can method that must reside in be written as a standalone a body of a class function  ‘Noisy’ syntax  Succinct syntax  Type inference is only  Type inference is available available since C# 3.0 and from the start VB 9.0, not in C++ and others
  • 8. Comparison of F# to others such as C#, VB, C++
  • 9. Immutable by default  Mutable by default let y = x + 1 x = x +1  Mutable is explicit  Immutable is explicit. For example, in C#: let mutable x = x + 1 readonly x = 0  In VB: ReadOnly x As Integer
  • 10. In F#, it can be  In C# and VB, it must standalone and simple be enclosed in a class/module let f x = x +2 class SimpleFunc { public static Int32 f(Int32 x)  This is why it is called { return x + 2; “succinct” } }  This is “noisy”
  • 11. Already have at the first release  It is also a strong type language  Including built in support of Generic  The type inference is not just local type inference, but it then can be inferred based on the use of the parameters!
  • 12. Int32 let avalue =10 String let aName = ‘Hello’ let savingInterest = 0.2 Double
  • 13. Type inference on functions when it’s used let f x = sqr x + 1 Infers integer .. return type from a whole becomes int number… let sqr x = x * x Infers double from a double literal.. let f x = sqr x + 1.0
  • 14. Less noise syntax but it’s still strongly typed
  • 15. Always begin with keyword “let” let avalue = 10 let aName = ‘Hello’ let savingInterest = 0.2
  • 16. When there’s a need for explicit type system: let x:int = 0 let piConstant:float = 3.141 let Name:String = ‘Eriawan’
  • 17. Always begin with let keyword let f x = x + 1 let sqr y = y * y let force x = x * gravity
  • 18. Parameters are written in a nice separation “juxtaposition” syntax: a space let sqr x = x * x Function parameter let add a b = a + b
  • 20. Multiple lines of code is using indentation: let rec fib x = if x < 2 then 1 else fib (x–1) + fib (x-2)
  • 21. Comment is the same with VB and C# // some code let x = x + 2 // XML doc comment: /// <summary>A square function<summary> /// <param name=‚x‛>the value</param> let f x = x * x
  • 22. The object oriented and imperative are here in F#
  • 23. let f x = x *x let g(x) = x* x fun x -> x * x
  • 24. Mutable is easy, by adding keyword “mutable”  Next operation of assignment must use “<-” to differentiate mutability. let mutable y = 10 y <- y + 1
  • 25. Creating enum is also easy: type Suit = | Heart | Diamond | Spade | Club
  • 26. type Vector2D(dx:float, dy:float) = // The pre-computed length of the vector let length = sqrt(dx*dx + dy*dy) /// The displacement along the X-axis member v.DX = dx /// The displacement along the Y-axis member v.DY = dy /// The length of the vector member v.Length = length // Re-scale the vector by a constant member v.Scale(k) = Vector2D(k*dx, k*dy)
  • 27. It’s easy! Just create type but with abstract keyword as modifier for all functions and other members: type IPeekPoke = abstract Peek: unit -> int abstract Poke: int -> unit
  • 28. Unit of measure in F# only!
  • 29. [<Measure>] type kg [<Measure>] type m [<Measure>] type s let gravityOnEarth = 9.81<m/s^2> let heightOfMyOfficeWindow = 3.5<m> let speedOfImpact = sqrt (2.0 * gravityOnEarth + heightOfMyOfficeWindow)
  • 30. Created by Eriawan Kusumawardhono, courtesy of RX Communica