Variables
This primer demonstrates variable declaration syntax.
Variable Declarations
Variables are declared with the var keyword. Variable
declarations must have a type, initializer, or both. Here, we
declare myVariable1 to be an int. Since there was no initializer,
it is initialized to the default value for the int type: 0.
var myVariable1: int;
writeln("myVariable1 = ", myVariable1);
Here we declare a variable without a type. Since 1.618 is a real
value, the variable is inferred to be of type real. Note that we
print out the type by casting it to a string.
var myVariable2 = 1.618;
writeln("myVariable2 = ", myVariable2, " (type = ",
myVariable2.type:string, ")");
Variables can also be declared using type aliases. Here we declare
a type alias myType to be uint(16) and declare myVariable3
to be of type myType.
type myType = uint(16);
var myVariable3: myType = 3;
writeln("myType = ", myType:string);
writeln("myVariable3 = ", myVariable3, " (type = ",
myVariable3.type:string, ")");
Constants
Instead of var, const and param can be used to declare
runtime constants and compile-time constants respectively. A
const must be initialized in place, but can have its value
generated at runtime. A param must be known at compile time.
const myConst: real = sqrt(myVariable2);
param myParam = 3.14;
writeln("myConst = ", myConst, ", myParam = ", myParam);
Configs
At module scope, all three variable kinds can be qualified by the
config keyword. This allows the initial value to be overridden
on the command line. A config var or config const may be
overridden when the program is executed; a config param may be
overridden when the program is compiled. Similarly, type aliases
maybe be qualified by the config keyword. The comment following
each declaration shows how the value can be modified.
config var cfgVar = "hello"; // ./variables --cfgVar="world"
config const cfgConst: bool = false; // ./variables --cfgConst=true
config param cfgParam = 4; // chpl variables.chpl -s cfgParam=1
config type cfgType = complex; // chpl variables.chpl -s cfgType=imag
writeln("cfgVar = ", cfgVar,
", cfgConst = ", cfgConst,
", cfgParam = ", cfgParam,
", cfgType = ", cfgType:string);
Type and Value Propagation
Variable types and values propagate to the left. Here, a is a
floating point number initialized to 1.0, b and c are integers
initialized to 0, d and e are floating point numbers initialized
to 1.0, and f is a floating point number initialized to 0.0.
var a = 1.0, b, c: int, d, e = 1.0, f: real;
writeln("a = ", a, ", b = ", b, ", c = ", c,
", d = ", d, ", e = ", e, ", f = ", f);