User Tools

Site Tools


script:walkthrough:statements_and_compounds

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
script:walkthrough:statements_and_compounds [2017-03-20 22:25]
skyjake
script:walkthrough:statements_and_compounds [2019-11-20 19:30] (current)
skyjake [Assignment]
Line 1: Line 1:
 +<- Operator expressions ^ ^ Exceptions ->
 +
 +====== Statements and compounds ======
 +
 +===== Structure =====
 +
 +Statements normally end at a newline character, unless there is a backslash at the end of a line.
 +
 +  print '​Statement'​
 +  ​
 +  print \
 +    '​Statement'​
 +
 +Semicolons can be used on one line to separate ​ statements.
 +
 +  print '​Statement 1.'; print '​Statement 2.'
 +
 +Compounds are blocks of statements that end with the ''​end''​ keyword.
 +
 +  if True
 +      print '​Compound inside "​if"'​
 +  end
 +
 +As a special case, single-statement compounds can be created with a colon '':''​.
 +
 +  if True: print 'No "​end"​ needed here'
 +
 +The keyword ''​pass''​ can be used in place of an empty compound.
 +
 +  if True: print "'​Tis true.";​ else: pass
 +
 +Each compound must be closed with its own ''​end''​ keyword.
 +
 +  if True
 +      if True
 +          if True
 +              if True
 +              end
 +          end
 +      end
 +  end
 +
 +===== Assignment =====
 +
 +The assign statement is used to create new variables in the local namespace.
 +
 +  i = 10
 +
 +Variables are untyped, so any other kind of value can later be assigned to the same variable.  ​
 +  ​
 +  i = "​abc"​
 +
 +Arrays are modifiable, so one can change the value of an individual element.
 +
 +  $ array = [1, 2, 3, 4]  ​
 +    ​
 +  $ array[1] = 100
 +  ​
 +  $ print array
 +  [ 1, 100, 3, 4 ]
 +
 +Nested arrays can also be assigned into.
 +
 +  $ array[2] = ['​a',​ '​b',​ '​c'​]
 +  ​
 +  $ array[2][1] = '​Bee'​
 +  ​
 +  $ print array
 +  [ 1, 100, [ a, Bee, c ], 4 ]
 +
 +One can assign to dictionaries to add or modify the values of keys.
 +  ​
 +  $ d = {1:2, '​Three':​4}
 +  ​
 +  $ d[5] = '​Five'​
 +  ​
 +  $ print d
 +  { 1: 2, 5: Five, Three: 4 }
 +  ​
 +When assigning, the right-hand value is copied to the new variable.
 +
 +  array = [1, 2, 3]
 +  origArray = array
 +  array[1] = 10
 +  # origArray remains unmodified
 +
 +==== Weak assignment ====
 +
 +Weak assignment ''?​=''​ only creates new variables. It never modifies existing ones.
 +
 +  $ print "z exists?",​ '​z'​ in locals()
 +  z exists? False
 +  ​
 +  $ z ?= 3
 +  ​
 +  $ print "z exists?",​ '​z'​ in locals()
 +  z exists? True
 +  ​
 +  $ print 'z =', z
 +  z = 3
 +  ​
 +  $ z ?= 10    # this one does nothing
 +  ​
 +  $ print 'z =', z
 +  z = 3
 +
 +==== const ====
 +
 +You can use the ''​const''​ keyword when assigning to create a read-only variable.
 +
 +  $ const z = 10
 +  ​
 +  $ print 'z has been consted to', z
 +  z has been consted to 10
 +
 +Attempting to assign a new value to a const variable causes an exception.
 +  ​
 +  try
 +      z = 10
 +      print '​Allowed to reassign the same value...'​
 +      z = 5
 +  catch ReadOnlyError
 +      print 'Have to delete z before its value can change.'​
 +  end
 +
 +Output:
 +
 +  Allowed to reassign the same value...
 +  Have to delete z before its value can change.
 +
 +==== del ====
 +
 +Variables and functions can be deleted with the ''​del''​ keyword.
 +
 +  del z
 +
 +===== Flow control =====
 +
 +==== if, elsif, else ====
 +
 +''​if'',​ ''​elsif'',​ and ''​else''​ are used for conditional branching.
 +
 +  if False
 +      print '​a)'​
 +  elsif False
 +      print '​b)'​
 +  elsif True > False
 +      print '​c)'​
 +  else
 +      print '​d)'​
 +  end
 +
 +==== while ====
 +
 +  i = 5
 +  while i > 0
 +      print 'Still looping because %i > 0' % i
 +      i -= 1
 +  end
 +
 +Output:
 +
 +  Still looping because 5 > 0
 +  Still looping because 4 > 0
 +  Still looping because 3 > 0
 +  Still looping because 2 > 0
 +  Still looping because 1 > 0
 +
 +==== break ====
 +
 +The ''​break''​ statement is used to break out of loops.
 +
 +  while True
 +      print "I won't stay here."
 +      break
 +      print "​Jumped over this."
 +  end
 +
 +Optionally, a number argument can be given to ''​break''​ to break out of multiple nested loops. Below, the break escapes from two loops.
 +
 +  while True
 +      while True
 +          print "​Uh-oh,​ now I'm in trouble!"​
 +          break 2
 +      end
 +  end
 +  print "​Whew"​
 +
 +==== for ====
 +
 +''​for''​ loops iterate over a sequence of array elements, dictionary key-value pairs, or string characters. The loop variable is not deleted afterwards, so it can be checked if the loop was terminated early with ''​break''​.
 +
 +  for i in ['​planes',​ '​trains',​ '​automobiles'​]
 +      print i
 +  end
 +  print 'Value of i after the "​for"​ loop is', i
 +
 +Output:
 +
 +  planes
 +  trains
 +  automobiles
 +  Value of i after the "​for"​ loop is automobiles
 +
 +When iterating a dictionary, the loop variable is an array containing the key and the value.
 +
 +  a = {'​a':​ 1, '​b':​ 2}
 +  for i in a
 +      print i
 +  end
 +
 +Output:
 +
 +  [ a, 1 ]
 +  [ b, 2 ]
 +
 +==== continue ====
 +
 +The ''​continue''​ statement interrupts the loop and returns flow back to the beginning, with the next element.
 +
 +  for i in ['​planes',​ '​trains',​ '​automobiles'​]
 +      if i == '​trains':​ continue
 +      print i, 'are cool!'
 +  end
 +
 +Output:
 +
 +  planes are cool!
 +  automobiles are cool!
 +
 +
 +