The Cobra Programming Language
How To
PrintHelloWorld
WriteBasicSyntax
UseProperties
MakeAnIfElseLadder
MakeABranchStatement
DeclareInits
MakeAClassHierarchy
UseNilAndNilableTypes
UseDynamicTyping
DeclareVariableNumberOfArgs
ReadAndWriteFiles
CheckInheritanceAndImplementation
ImplementIEnumerable1
ImplementIEnumerable2
IterateThroughRecursiveDataWithYield
MakeACollectionClass
AccessMySQL
"""
Cobra supports both static and dynamic typing.

See also: http://cobralang.com/docs/release-notes/Cobra-0.5.0.html
"""

class Person
    get name as String
        return 'Blaise'

class Car
    get name as String
        return 'Saleen S7'

class Program

    shared

        def main
            assert .add(2, 3) == 5
            assert .add('Hi ', 'there.') == 'Hi there.'
            .printName(Person())
            .printName(Car())

        def add(a, b) as dynamic
            return a + b

        def printName(x)
            print x.name  # dynamic binding


class Notes

    def add(a, b) as dynamic
        return a + b
        # + flexible (any type with "+" operator works)
        #   + fast prototyping
        #   + less brittle wrt other software components that change unpredictably
        # + more reusable
        # - errors detected late (run-time)
        # - one error reported at a time (the first one that throws an exception)
        # - slow at run-time
        # - fat at run-time (values must carry type information; boxing)
        # - difficult IDE support
        #   (Intellisense/autosuggestion requires complex analysis and/or execution of code)

    def add(a as decimal, b as decimal) as decimal
        return a + b
        # - inflexible
        #   - slower coding / more typing
        #   - more brittle (to change program to `float` you must find and replace everywhere)
        # - less reusable (cannot use with int and float)
        # + errors detected early (compile-time)
        # + multiple errors reported (every one that the compiler can find)
        # + fast at run-time
        # + slim at run-time (values need only carry data)
        # + easy IDE support (Intellisense/autosuggestion)