4.4 Writing data types
When declaring a variable, you also have to specify what type of variable
it is. For most types, such as int and string this is
very easy. But there are much more interesting ways to declare variables
than that, let's look at a few examples:
int x; // x is an integer
int|string x; // x is a string or an integer
array(string) x; // x is an array of strings
array x; // x is an array of mixed
mixed x; // x can be any type
string *x; // x is an array of strings
// x is a mapping from int to string
mapping(string:int) x;
// x implements Stdio.File
Stdio.File x;
// x implements Stdio.File
object(Stdio.File) x;
// x is a function that takes two integer
// arguments and returns a string
function(int,int:string) x;
// x is a function taking any amount of
// integer arguments and returns nothing.
function(int...:void) x;
// x is ... complicated
mapping(string:function(string|int...:mapping(string:array(string)))) x;
As you can see there are some interesting ways to specify types.
Here is a list of what is possible:
- mixed
- This means that the variable can contain any type, or the
function return any value
- array( type )
- This means an array of elements with the type type.
- type *
- This also means an array of elements with the type type.
- mapping( key type : value type )
- This is a mapping where the keys are of type key type and the
values of value type.
- multiset ( type )
- This means a multiset containing values of the type type.
- object ( program )
- This means an object which 'implements' the specified program. The
program can be a class, a constant, or a string.
If the program is a string it will be casted to a program first.
See the documentation for inherit for more information
about this casting. The compiler will assume that any function
or variable accessed in this object has the same type information
as that function or variable has in program.
- program
- This too means 'an object which implements program'.
program can be a class or a constant.
- function( argument types : return type )
- This is a function taking the specified arguments and returning
return type. The argument types is a comma separated
list of types that specify the arguments. The argument list can also
end with ... to signify that there can be any amount of the
last type.
- type1 | type2
- This means either type1 or type2
- void
- Void can only be used in certain places, if used as return type for a
function it means that the function does not return a value. If used
in the argument list for a function it means that that argument can
be omitted. Example: function(int|void:void) this means a
function that may or may not take an integer argument and does not
return a value.