DEV Community

Cover image for F# For Dummys - Day 9 Branching
AllenZhu
AllenZhu

Posted on • Edited on

1 1 1

F# For Dummys - Day 9 Branching

Today we learn control flow, or branching
sometimes we need to execute a block of code only when it meets some condition

//Pseudocode
if conditionOne then doTaskOne
else if conditionTwo then doTaskTwo
else doSomethingElse
Enter fullscreen mode Exit fullscreen mode

we introduce 2 ways of branching

if...then

let temperature = 15

if temperature < 0 then
    printfn "Wear down coat"
elif temperature < 10 then
    printfn "Wear sweater"
elif temperature < 20 then
    printfn "Wear long sleeves"
elif temperature < 30 then
    printfn "Wear T-shirt"
else
    printfn "Wear bikini"
Enter fullscreen mode Exit fullscreen mode

temperature = 15, the first branch suits is temperature < 20 , even though temperature < 30 is also true, the rest logic will not execute

match...with

// Match expression. 
match test-expression with
| pattern1 [ when condition ] -> result-expression1
| pattern2 [ when condition ] -> result-expression2
| ...
Enter fullscreen mode Exit fullscreen mode

equivalent example:

let temperature = 15

match temperature with
| temperature when temperature < 0 -> printfn "Wear down coat"
| temperature when temperature < 10 -> printfn "Wear sweater"
| temperature when temperature < 20 -> printfn "Wear long sleeves"
| temperature when temperature < 30 -> printfn "Wear T-shirt"
| _ -> printfn "Wear bikini"
Enter fullscreen mode Exit fullscreen mode

AND Pattern: we can combine conditions with (&&) operator, it hits when both condition match

let age = 10

match age with
| age when age > 0 && age <= 1 -> printfn "Infant"
| age when age > 1 && age <= 12 -> printfn "Child"
| age when age > 12 && age <= 16 -> printfn "Teenager"
| age when age > 16 -> printfn "Adults"
| _ -> printfn "Not born"
Enter fullscreen mode Exit fullscreen mode

OR Pattern: we can combine patterns using the (||) operator to match multiple patterns

let x = 10

match x with
| x when x > 0 || x = 0 -> printfn "Positive or Zero"
| _ -> printfn "Negative"
Enter fullscreen mode Exit fullscreen mode

we can define a pattern matching function

let temperature = 15

let clothingAdvice temp =
    match temp with
    | t when t < 0 -> "Wear down coat"
    | t when t < 10 -> "Wear sweater"
    | t when t < 20 -> "Wear long sleeves"
    | t when t < 30 -> "Wear T-shirt"
    | _ -> "Wear bikini"

printfn "%s" (clothingAdvice temperature)
Enter fullscreen mode Exit fullscreen mode

another example from windows documentation

type Shape =
    | Square of side: double
    | Rectangle of width: double * length: double

let getArea shape =
    match shape with
    | Square side -> side * side
    | Rectangle (width, length) -> width * length

let square = Square 2.0
printfn $"The area of the square is {getArea square}"
let rect = Rectangle (3.0, 2.0)
printfn $"The area of the rect is {getArea rect}"
Enter fullscreen mode Exit fullscreen mode

getArea function calculate the area according to different shape
for a Square, it use side * side = 2.0 * 2.0
for a Rectangle, it use width * length = 3.0 * 2.0

The area of the square is 4
The area of the rect is 6
Enter fullscreen mode Exit fullscreen mode

we didn't learn type yet, it defines a Union type here, and there is more powerful usage of match, we will introduce type, Union and discover more usage of match in the coming days

Billboard image

Imagine monitoring that's actually built for developers

Join Vercel, CrowdStrike, and thousands of other teams that trust Checkly to streamline monitor creation and configuration with Monitoring as Code.

Start Monitoring

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay