Skip to the content.

Variables

Declare a variable with let:

let x = 10
let name = "chloride"
let pi = 3.14159

Once declared, you can reassign without let:

let x = 10
x = 20
x = x + 1

Argon also has compound assignment operators:

let i = 0
i += 1   # i = i + 1
i -= 1
i *= 2
i /= 2

(See iteration.ar in the test suite for += used in a loop counter.)

Dynamic typing

Argon is dynamically typed — a variable can hold any type, and the type isn’t declared up front:

let value = 10
value = "now I'm a string"
value = [1, 2, 3]

null

The absence of a value is null:

let x = null

Everything is an object

Unlike some older/simpler interpreters, in Chloride every value is an object — numbers, strings, booleans, functions, and null all have an underlying type and can have methods called on them:

term.log((5).__string__())
term.log("hi".length)

You can find a value’s type with the built-in type() function:

term.log(type(5))       # number
term.log(type("hi"))    # string
term.log(type([1,2]))   # array

and check whether something is an instance of a type (or class) with is_instance:

term.log(is_instance(5, number))       # true
term.log(is_instance("hi", string))    # true

Scope

Variables declared with let are scoped to the block/function they’re declared in. Functions form closures over the scope they were defined in — see Functions for details, and loop_continue_and_break_test.ar for an example of a nested function (g) calling an outer function (f) that itself closes over local variables.

Next