Wiki
Version 5 (modified by hopscc, 7 years ago)

--

Literals

Cobra provides a convenient way to specify literals for initializing standard collections and
explicitly setting the types (size and sign) for numeric literals.

List Literals

Dynamically sized heterogenous content data structures.

List contents are comma separated, collection is [] delimited.

Empty list is []

e.g

names = [ 'mike', 'gary', 'pat', 'bruce', 'paul'] # List<of String>
heads = [3,1,1,1,1] # List<of int>
if name in [ 'fred', 'george', 'bill' ]

myList=[]
myList.add('1th')

Map/Dictionary Literals

Also known as associative arrays or Dictionaries (Dicts).

Key and value is colon separated, each entry comma separated, collection is {} delimited.

empty map is {:}.

e.g.

nameId = { 'mike':10110, 'gary':21003, 'paul':32289 }  # Dictionary<of String, int>
assert nameId['mike'] == 10110

order = { 0:'mike', 1:'bruce', 2:'gary', 3:'pat' } # Dictionary<of int, String>

mmap = {:}
mmap['top'] = 99

Set Literals

Unordered hashed collection of unique items optimized for membership testing and set operations.

Values are comma separated, collection is {} delimited.

Empty set is {}.

e.g.

names= {'gary', 'mike', 'bruce', 'paul'}
assert names.intersection({'gary', 'paul'} == {'gary', 'paul'}
assert not names.isSuperSetOf({'paula'})

collisions={}
collisions.add(toyota)

Array Literals

Statically sized homogenous content data structure.

Values are comma separated, collection is [] delimited with an '@' prefix.

Empty array is @[]

e.g

names = @[ 'mike', 'gary', 'pat', 'bruce', 'paul'] # String[] or Array<of String>
heads = @[3,1,1,1,1] # int[] or Array <of int>
heads[4] = 3

Lists are probably easier to use and more flexible but for some purposes arrays have better performance.

Numeric Literals

Non explicitly typed numeric literals are typed to Decimal by default.
This can be overidden by the compiler -number commandline switch or @number compiler directive.

Explicitly typed numeric literals can be specified by suffixing the numeric literal with a type and size specification ( with an optional leading '_').

Types are

  • u - unsigned int
  • i - signed int
  • d - decimal
  • f - float

Sizes are

  • for int 8, 16, 32, 64
  • for float 32, 64

as in

d = 123      # default (Decimal)
d = 123.4d

ii = 123i    # integer (default size) 32 bits
# same as 
ii = 123 to int

j = 123_i16  #  signed 16 bit
k = 32u8     #  unsigned 8 bit == Byte

l = 879289992978_i64 # signed 64 bit 

f = 1327.3_f # float (default size 64)
f1 = 97.3f32 # or
f1 = 97.3_f32

String Literals

See Strings

Back to LanguageTopics