Skip to content

Switch statements#

Code Example

Runnable Example in Jac and JacLib

def switch_case(Num: int) {
    switch Num{
        case 2:
        case 3:
        case 10:
            print("Matched case for value: 2, 3, 10");
        case 15:
        case 20:
            print("Matched case for value: 15, 20");
            break;
        case 25:
        case None:
            print("Matched case for value: 25 or None");
        default:
            print("No match found for value: " + str(Num));
    }
}

with entry{
    switch_case(3);
    switch_case(15);
    switch_case(25);
}
def switch_case(Num: int) {
    switch Num{
        case 2:
        case 3:
        case 10:
            print("Matched case for value: 2, 3, 10");
        case 15:
        case 20:
            print("Matched case for value: 15, 20");
            break;
        case 25:
        case None:
            print("Matched case for value: 25 or None");
        default:
            print("No match found for value: " + str(Num));
    }
}

with entry{
    switch_case(3);
    switch_case(15);
    switch_case(25);
}
from __future__ import annotations

def switch_case(Num: int) -> None:
    __executed = False
    while not __executed:
        if Num == 2 or __executed:
            pass
            __executed = True
        if Num == 3 or __executed:
            pass
            __executed = True
        if Num == 10 or __executed:
            print('Matched case for value: 2, 3, 10')
            __executed = True
        if Num == 15 or __executed:
            pass
            __executed = True
        if Num == 20 or __executed:
            print('Matched case for value: 15, 20')
            break
            __executed = True
        if Num == 25 or __executed:
            pass
            __executed = True
        if Num is None or __executed:
            print('Matched case for value: 25 or None')
            __executed = True
        print('No match found for value: ' + str(Num))
        __executed = True
switch_case(3)
switch_case(15)
switch_case(25)
Jac Grammar Snippet
switch_stmt: KW_SWITCH expression LBRACE switch_case_block+ RBRACE
switch_case_block: (KW_CASE pattern_seq | KW_DEFAULT) COLON statement*

pattern_seq: (or_pattern | as_pattern)
or_pattern: (pattern BW_OR)* pattern
as_pattern: or_pattern KW_AS NAME

pattern: literal_pattern
    | singleton_pattern
    | capture_pattern
    | sequence_pattern
    | mapping_pattern
    | attr_pattern
    | class_pattern

literal_pattern: (INT | FLOAT | multistring)
singleton_pattern: (NULL | BOOL)
capture_pattern: NAME
sequence_pattern: LSQUARE list_inner_pattern (COMMA list_inner_pattern)* RSQUARE
                | LPAREN list_inner_pattern (COMMA list_inner_pattern)* RPAREN
mapping_pattern: LBRACE (dict_inner_pattern (COMMA dict_inner_pattern)*)? RBRACE
list_inner_pattern: (pattern_seq | STAR_MUL NAME)
dict_inner_pattern: (literal_pattern COLON pattern_seq | STAR_POW NAME)
attr_pattern: NAME (DOT NAME)+
class_pattern: NAME (DOT NAME)* LPAREN kw_pattern_list? RPAREN
             | NAME (DOT NAME)* LPAREN pattern_list (COMMA kw_pattern_list)? RPAREN

pattern_list: (pattern_list COMMA)? pattern_seq
kw_pattern_list: (kw_pattern_list COMMA)? named_ref EQ pattern_seq

Description

Switch Case#