|
| """
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) |