# When-Cases

## When-Case syntax

```fsharp
when <expr> @ <Return Type Of Below exprs> {
    is <expr> -> <expr>
    is <expr> -> <expr>
    is <expr> -> <expr>
    default -> <expr>
}
```

A when-case is equivalent to a switch case, except:

1. when-cases are expressions, not statements
2. &#x20;The `default` case is **required**
3. New scopes **cannot** be used on the left side of the arrow. Only expressions can.

## Working Example

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

import "fmt" as fmt

fun main(): Unit {
  let language = "Gauntlet"
  let reaction = when language @ String {
    is "Gauntlet" -> "smiled"
    is "Java" -> "threw up"
    is "C++" -> "ripped my hair out"
    is "PHP" -> "died"
    default -> "laughed"
  }
  fmt.println("When I found out I was required to program in " + language + ", I " + reaction + "!")
}
```
{% endtab %}

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

import fmt "fmt"

func main() {
	language := "Gauntlet"
	reaction := (func() string {
		switch language {
		case "PHP":
			{
				return "died"
			}
		case "C++":
			{
				return "ripped my hair out"
			}
		case "Java":
			{
				return "threw up"
			}
		case "Gauntlet":
			{
				return "smiled"
			}
		default:
			{
				return "laughed"
			}
		}
	})()
	fmt.Println("When I found out I was required to program in " + language + ", I " + reaction + "!")
	// Eliminates any 'unused variable' errors
	_, _ = language, reaction

}

```
{% endtab %}

{% tab title="Output" %}
```
When I found out I was required to program in Gauntlet, I smiled!
```
{% endtab %}
{% endtabs %}
