Skip to content

Statements

DQ statements are separated by newlines or semicolons. Blocks normally use : plus an end... keyword, and may also use braces.

Variable Declaration

var x : int = 0
var y : int
var inferred_array : [?]int = [1, 2, 3]

Local reference variables use ref.

var value : int = 10
ref alias = value
alias = 20     // value is now 20

Constant Declaration

const DEFAULT_PORT : int = 8080

Constants must be initialized with compile-time constant expressions.

Assignment

x = 1
x += 1
arr[i] = x
obj.property = value

Assignment is not an expression.

If

if condition:
    DoSomething()
elif other_condition:
    DoOther()
else:
    DoFallback()
endif

Conditions must be bool. Numbers are not compatible with bool, comparisons must be used.

While

while i < limit:
    i += 1
endwhile

break leaves the nearest loop. continue continues with the next iteration.

For

DQ numeric for loops have several forms.

for i : int = 0 to 5:
    PrintInt(i)
endfor

for i : int = 5 downto 1:
    PrintInt(i)
endfor

for i : int = 0 count 5:
    PrintInt(i)
endfor

for i : int = 10 downcount 5:
    PrintInt(i)
endfor

for i : int = 0 while i < 10 step 2:
    PrintInt(i)
endfor

The loop variable may be declared in the loop header or may refer to an existing variable.

var i : int = 0
for i = 0 to 10 step 2:
    // ...
endfor

step must be positive for to, downto, count, and downcount forms. The while form may use a negative step when the condition is written accordingly.

Return

return
return value

Functions with a return type may either return value or assign to the built-in result variable.

function Square(x : int) -> int:
    result = x * x
endfunc

Break and Continue

while true:
    if Done():
        break
    endif
    if SkipThis():
        continue
    endif
endwhile

break and continue apply to the nearest enclosing loop.

Try, Except, Finally

Exceptions are handled with try, except, and finally.

try:
    MayRaise()
except Exception as e:
    e.PrintMessage()
finally:
    Cleanup()
endtry

finally runs when control leaves the try, including normal completion, exception propagation, return, break, and continue.

Multiple except clauses may be used to handle different exception object types. An exception can be raised with raise.

raise Exception("message")

Use in Methods

Object methods may use a restricted local use statement to bring selected module-scope names into method lookup.

function OThing.Method():
    use .
    use helper_module
endfunc

This form is only valid in object methods. See Modules.

Compound Brace Statements

Many block statements can use braces instead of : and end....

if ok
{
    Run()
}

The colon form is the canonical form used by most DQ code.