# Switch-Case

## Switch-Case Syntax (Expressions)

```fsharp
switch <expr> {
    case <expr> : {
        <case body>
    }
    case <expr> : {
        <case body>
    }
    // The default case is optional
    default : {
        <default case body>
    }
}
```

## Switch-Case Syntax (Types)

```fsharp
switch typeof <expr> {
    case <Type> : {
        <case body>
    }
    case <Type> : {
        <case body>
    }
    // The default case is optional
    default : {
        <default case body>
    }
}
```

## Working Example

{% tabs %}
{% tab title="Gauntlet" %}
```fsharp
package main

import "fmt" as fmt

fun Unit main() {
  let result = (1 + 2) - 1 
  fmt.println("Evaluating the result of (1 + 2) - 1 ...")
  switch result {
    case 1: {
      fmt.println("It's one")
    }
    case 2: {
      fmt.println("It's two")
    }
    case 3: {
      fmt.println("It's three")
    }
    default: {
      fmt.println("It's not one, two, or three.")
    }
  }

  fmt.println("And also...")
  
  let Any a = 1

  switch typeof a {
    case String: {
      fmt.println("1 is a String!")
    }
    case Int: {
      fmt.println("1 is an Int!")
    }
  }

}
```
{% endtab %}

{% tab title="Transpiled" %}
```go
package main

import fmt "fmt"

func main() {
	result := (1 + 2) - 1
	fmt.Println("Evaluating the result of (1 + 2) - 1 ...")
	switch result {
	case 1:
		{
			fmt.Println("It's one")
		}
	case 2:
		{
			fmt.Println("It's two")
		}
	case 3:
		{
			fmt.Println("It's three")
		}
	default:
		{
			fmt.Println("It's not one, two, or three.")
		}
	}
	fmt.Println("And also...")
	var a any = 1
	switch a.(type) {
	case string:
		{
			fmt.Println("1 is a String!")
		}
	case int:
		{
			fmt.Println("1 is an Int!")
		}

	}
	// Eliminates any 'unused variable' errors
	_, _ = a, result

}

```
{% endtab %}

{% tab title="Output" %}
```
Evaluating the result of (1 + 2) - 1 ...
It's two
And also...
1 is an Int!
```
{% endtab %}
{% endtabs %}
