The Cobra Programming Language
How To
PrintHelloWorld
WriteBasicSyntax
UseProperties
MakeAnIfElseLadder
MakeABranchStatement
DeclareInits
MakeAClassHierarchy
UseNilAndNilableTypes
UseDynamicTyping
DeclareVariableNumberOfArgs
ReadAndWriteFiles
CheckInheritanceAndImplementation
ImplementIEnumerable1
ImplementIEnumerable2
IterateThroughRecursiveDataWithYield
MakeACollectionClass
AccessMySQL
"""
MakeABranchStatement.cobra

General syntax:

    branch WHAT
        on VALUE1
            STATEMENTS1
        on VALUE2
            STATEMENTS2
        [else
            STATEMENTS]

    branch WHAT
        on VALUE1: STATEMENT1
        on VALUE2: STATEMENT2
        [else: STATEMENT]

Key rules of the branch statement:

    * What's being branched on must be an integer, character, enumeration or string.

    * The expressions being matched must be constants (ex: 0, 1, 'x', State.Off, "foo").

When a branch statement isn't feasible, you can possibly:

    * Make a class hierarchy and send a message to the object.

    * Use an `if-else` ladder (see MakeAnIfElseLadder.cobra)


See also: MakeAnIfElseLadder.cobra, CheckInheritanceAndImplementation.cobra.

"""


class Program

    def main is shared

        word = ''

        # This is the general syntax, below. Notice the keywords `branch` and
        # `on` as well as the indentation under each `on` part:
        x = 2
        branch x
            on 1
                isEven = false
                word = 'one'
            on 2
                isEven = true
                word = 'two'
            on 3
                isEven = false
                word = 'three'
        assert isEven
        assert word == 'two'

        # In addition to `on`, you can put an `else` at the end:
        x = 2
        branch x
            on 1
                word = 'one'
            on 3
                word = 'three'
            else
                word = 'else'
        assert word == 'else'

        # If there is only one statement for the `on` or `else` and you want to
        # tighten up your code, you can do so by using a colon (:) and putting the
        # statement on the same line, like so:
        x = 2
        branch x
            on 1: word = 'one'
            on 3: word = 'three'
            else: word = 'else'
        assert word == 'else'

        # You can have more than one value for `on`:
        x = 2
        branch x
            on 1, 2, 3: word = 'number'
            else: word = 'else'
        assert word == 'number'

        # Don't forget that you can branch on enumerations, strings and characters.