Qore Programming Language Reference Manual  0.8.12.11
Data Type Declarations and Restrictions

Starting in Qore 0.8.0, it is possible to restrict variables, class members, and function and method parameters to certain data types. This allows programmers to write safer code, as many more errors can be caught at parse time that would otherwise be caught at run time. Furthermore, providing type information to the parser allows Qore to implement performance optimizations by performing lookups and resolutions once at parse time rather than every time a variable or class member is accessed at run time.

When types are declared in a parameter list, functions and methods can be overloaded as well.

The types in the following table can be used as well as any class name or '*classname' (i.e. an asterix followed by the class name), meaning either the given class or NOTHING (no value).

Data Type Declaration Names

Name Accepts Qore Type(s) Returns Qore Type(s) Description
int Integer Integer Restricts values Integer values
float Float or Integer Float Restricts values to Float values
number Number, Float, or Integer Number Restricts values to Number values
bool Boolean Boolean Restricts values to Boolean values
string String String Restricts values to String values
date Date Date Restricts values to Date values; values may be either absolute or relative
binary Binary Binary Restricts values to Binary values
hash Hash Hash Restricts values to Hash values
list List List Restricts values to List values
object Object Object Restricts values to Object values
<classname> Object Object Restricts values to objects of the specific class given; either the class name can be given (ex: Mutex or a qualified path to the class: Qore::Thread::Mutex)
null NULL NULL Restricts values to Qore's NULL type; this type has few (if any) practical applications and has been included for completeness' sake
nothing NOTHING NOTHING Restricts values to Qore's NOTHING type; this type is mostly useful for declaring that a function or method returns no value
timeout Integer, Date Integer Accepts Integer, Date and converts dates to an integer value representing milliseconds and returns the integer; incoming integers are assumed to represent milliseconds
softint Integer, Float, Number, Boolean, String, NULL Integer Accepts Integer, Float, Boolean, String, NULL and converts non-integer values to an integer and returns the integer
softfloat Integer, Float, Number, Boolean, String, NULL Float Accepts Integer, Float, Boolean, String, NULL and converts non-float values to a float and returns the new value
softnumber Integer, Float, Number, Boolean, String, NULL Float Accepts Integer, Float, Boolean, String, NULL and converts non-number values to a float and returns the new value
softbool Integer, Float, Number, Boolean, String, NULL Boolean Accepts Integer, Float, Boolean, String, NULL and converts non-boolean values to a boolean and returns the new value
softstring Integer, Float, Number, Boolean, String, NULL String Accepts Integer, Float, Boolean, String, NULL and converts non-string values to a string and returns the new value
softdate Integer, Float, Number, Boolean, String, Date, NULL Date Accepts Integer, Float, Boolean, String, Date, and NULL and converts non-date values to a date and returns the new value
softlist all types List Accepts all types; NOTHING is returned as an empty list; a list is returned unchanged, and any other type is returned as the first element of a new list
data String or Binary same as received Restricts input to String and Binary and returns the same type
code Closures, Call References same as received Restricts values to closures and call references
reference References the type the reference points to Restricts values to references to lvalues
*int Integer, NULL, or NOTHING Integer or NOTHING Restricts values to Qore's Integer or NOTHING types; if NULL is passed then NOTHING is returned
*float Float, NULL, or NOTHING Float or NOTHING Restricts values to Qore's Float or NOTHING types; if NULL is passed then NOTHING is returned
*number Number, NULL, or NOTHING Number or Number Restricts values to Qore's Number or NOTHING types; if NULL is passed then NOTHING is returned
*bool Boolean, NULL, or NOTHING Boolean or NOTHING Restricts values to Qore's Boolean or NOTHING types; if NULL is passed then NOTHING is returned
*string String, NULL, or NOTHING String or NOTHING Restricts values to Qore's String or NOTHING types; if NULL is passed then NOTHING is returned
*date Date, NULL, or NOTHING Date or NOTHING Restricts values to Qore's Date or NOTHING type; values may be either absolute or relative date/time values; if NULL is passed then NOTHING is returned
*binary Binary, NULL, or NOTHING Binary or NOTHING Restricts values to Qore's Binary or NOTHING types; if NULL is passed then NOTHING is returned
*hash Hash, NULL, or NOTHING Hash or NOTHING Restricts values to Qore's Hash or NOTHING types; if NULL is passed then NOTHING is returned
*list List, NULL, or NOTHING List or NOTHING Accepts either a List or NOTHING; if NULL is passed then NOTHING is returned
*object Object, NULL, or NOTHING Object or NOTHING Accepts either an Object or NOTHING; if NULL is passed then NOTHING is returned
*<classname> Object of the given class, NULL, or NOTHING Object of the given class or NOTHING Restricts values to objects of the specific class given or NOTHING; either the class name can be given (ex: *Mutex or a qualified path to the class: *Qore::Thread::Mutex); if NULL is passed then NOTHING is returned
*data String, Binary, NULL, or NOTHING String, Binary, or NOTHING Restricts input to String, Binary, or NOTHING and returns the same type; if NULL is passed then NOTHING is returned
*code Closures, Call References, NULL, or NOTHING Closures, Call References, or NOTHING Restricts values to closures, call references and NOTHING; if NULL is passed then NOTHING is returned
*timeout Integer, Date, NULL, or NOTHING Integer or NOTHING Accepts Integer, Date and converts dates to an integer value representing milliseconds and returns the integer; incoming integers are assumed to represent milliseconds. If no value or NULL is passed, then NOTHING is returned
*reference References, NULL, or NOTHING the type the reference points to Restricts values to references to lvalues and NOTHING; if NULL is passed then NOTHING is returned
*softint Integer, Float, Number, Boolean, String, NULL or NOTHING Integer or NOTHING Accepts Integer, Float, Number, Boolean, String, NULL and converts non-integer values to an integer and returns the integer. If no value or NULL is passed, then NOTHING is returned
*softfloat Integer, Float, Number, Boolean, String, NULL or NOTHING Float or NOTHING Accepts Integer, Float, Number, Boolean, String, NULL and converts non-float values to a float and returns the new value. If no value or NULL is passed, then NOTHING is returned
*softnumber Integer, Float, Number, Boolean, String, NULL or NOTHING Number or NOTHING Accepts Integer, Float, Number, Boolean, String, NULL and converts non-number values to a number and returns the new value. If no value or NULL is passed, then NOTHING is returned
*softbool Integer, Float, Number, Boolean, String, NULL or NOTHING Boolean or NOTHING Accepts Integer, Float, Number, Boolean, String, NULL and converts non-boolean values to a boolean and returns the new value. If no value or NULL is passed, then NOTHING is returned
*softstring Integer, Float, Number, Boolean, String, NULL or NOTHING String or NOTHING Accepts Integer, Float, Number, Boolean, String, NULL and converts non-string values to a string and returns the new value. If no value or NULL is passed, then NOTHING is returned
*softdate Integer, Float, Number, Boolean, String, Date, NULL or NOTHING Date or NOTHING Accepts Integer, Float, Number, Boolean, String, Date, and NULL and converts non-date values to a date and returns the new value. If no value or NULL is passed, then NOTHING is returned
*softlist all types List or NOTHING Accepts all types; NOTHING and list values are returned as the same value; NULL is returned as NOTHING, any other type is returned as the first element of a new list
any any same as received Provides no restrictions on the type of value it receives and returns the same value

int

int Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
int Integer Integer Restricts values to Qore's Integer type
Example
int sub foo(int i) {
return i;
}

float

float Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
float Float or Integer Float Restricts values to Qore's Float type
Example
float sub foo(float f = M_PI) {
return f;
}

number

number Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
number Number, Float, or Integer Number Restricts values to Qore's Number type
Example
number sub foo(number n = 2.35e40) {
return n;
}
Since
Qore 0.8.6 introduced the number type

bool

bool Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
bool Boolean Boolean Restricts values to Qore's Boolean type
Example
bool sub foo(bool b) {
return b;
}

string

string Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
string String String Restricts values to Qore's String type
Example
string sub foo(string str = "bar") {
return str;
}

date

date Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
date Date Date Restricts values to Qore's Date type; date/time values can be either absolute or relative
Example
date sub foo(date d = now_us()) {
return d;
}

binary

binary Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
binary Binary Binary Restricts values to Qore's Binary type
Example
binary sub foo(binary b) {
return b;
}

hash

hash Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
hash Hash Hash Restricts values to Qore's Hash type
Example
hash sub foo(hash h = ("foo": "bar", "x": 2)) {
return h;
}

list

list Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
list List List Restricts values to Qore's List type
Example
list sub foo(list l = ("foo", "bar")) {
return l;
}

object

object Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
object Object Object Restricts values to Qore's Object type; note that any class name can also be used as a type restriction directly
Example
object sub foo(object o = new Mutex()) {
return o;
}

<classname>

<classname> Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
any class name Object of the particular class given Object of the particular class given Restricts values to objects of the particular class given; subclasses are also accepted
Example
Mutex sub foo(Qore::Thread::Mutex m = new Mutex()) {
return m;
}

null

null Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
null NULL NULL Restricts values to Qore's NULL type; this type has few (if any) practical applications and has been included for completeness' sake
Example
# I don't know if this type has any useful/practical applications...
null n = NULL;

nothing

nothing Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
nothing NOTHING NOTHING Restricts values to Qore's NOTHING type; this type is mostly useful for declaring that a function or method returns no value
Example
nothing sub bar() {
printf("foo\n");
}

timeout

timeout Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
timeout Integer, Date Integer Accepts Integer, Date values and converts dates to an integer value representing milliseconds and returns the integer; incoming integers are assumed to represent milliseconds
Example
timeout sub foo(timeout to = 1250ms) {
return to;
}

softint

softint Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
softint Integer, Float, Number, Boolean, String, NULL Integer Accepts Integer, Float, Number, Boolean, String, and NULL values and converts non-integer values to an integer and returns the integer
Example
softint sub foo(softint i = "1000") {
# note that "200" will be converted to an integer on return
return i > 500 ? "200" : i;
}

softfloat

softfloat Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
softfloat Integer, Float, Number, Boolean, String, NULL Float Accepts Integer, Float, Number, Boolean, String, and NULL values and converts non-float values to a float and returns the float
Example
softfloat sub foo(softfloat f = "1000") {
# note that "200" will be converted to a float on return
return f > 500.0 ? "200" : f;
}

softnumber

softnumber Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
softnumber Integer, Float, Number, Boolean, String, NULL Float Accepts Integer, Float, Number, Boolean, String, and NULL values and converts non-number values to a number and returns the number
Example
softnumber sub foo(softnumber n = "1000") {
# note that "200" will be converted to a number on return
return n > 500.0n ? "200" : n;
}
Since
Qore 0.8.6 introduced the softnumber type

softbool

softbool Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
softbool Integer, Float, Number, Boolean, String, NULL Boolean Accepts Integer, Float, Number, Boolean, String, and NULL values and converts non-boolean values to a boolean and returns the boolean
Example
softbool b = "0.5";

softstring

softstring Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
softstring Integer, Float, Number, Boolean, String, NULL String Accepts Integer, Float, Number, Boolean, String, and NULL values and converts non-string values to a string and returns the string
Example
softstring str = 200;

softdate

softdate Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
softdate Integer, Float, Number, Boolean, String, Date, NULL Date Accepts Integer, Float, Number, Boolean, String, Date, and NULL values and converts non-date values to a date and returns the date
Example
softdate d = "2001-10-10T20:00:05 +04:00";

softlist

softlist Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
softlist all data types List Accepts all data types; NOTHING is returned as an empty list; a list is returned unchanged, and any other type is returned as the first element of a new list
Example
softlist sub foo(softlist l) {
foreach any element in (\l) {
}
return l;
}
Since
Qore 0.8.3 introduced the softlist type

data

data Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
data String or Binary same as received Restricts values to String and Binary
Example
data sub foo(data d) {
return d;
}

code

code Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
code Closures, Call References same as received Restricts values to Closures and Call References
Example
sub foo(code c) {
c();
}
Note
that also "closure" and "callref" are accepted as synonyms for "code" (they are not more specific than "code" but rather provide identical type restrictions)

reference

reference Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
reference References the type the reference points to Requires a reference to an lvalue to be assigned
Example
sub foo(reference f) {
f = 10;
}
int i;
foo(\i);

*int

*int Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*int Integer, NULL, or NOTHING Integer or NOTHING Restricts values to Integer and NOTHING; if NULL is passed then NOTHING is returned
Example
*int sub foo(*int i) {
return i;
}

*float

*float Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*float Float, NULL, or NOTHING Float or NOTHING Restricts values to Float and NOTHING; if NULL is passed then NOTHING is returned
Example
*float sub foo(*float f) {
return f;
}

*number

*number Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*number Number, NULL, or NOTHING Number or NOTHING Restricts values to Number and NOTHING; if NULL is passed then NOTHING is returned
Example
*number sub foo(*number n) {
return n;
}
Since
Qore 0.8.6 introduced the *number type

*bool

*bool Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*bool Boolean, NULL, or NOTHING Boolean or NOTHING Restricts values to Boolean and NOTHING; if NULL is passed then NOTHING is returned
Example
*bool sub foo(*bool b) {
return b;
}

*string

*string Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*string String, NULL, or NOTHING String or NOTHING Restricts values to String and NOTHING; if NULL is passed then NOTHING is returned
Example
*string sub foo(*string str) {
return str;
}

*date

*date Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*date Date, NULL, or NOTHING Date or NOTHING Restricts values to Date and NOTHING; if NULL is passed then NOTHING is returned
Example
*date sub foo(*date str) {
return str;
}

*binary

*binary Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*binary Binary, NULL, or NOTHING Binary or NOTHING Restricts values to Binary and NOTHING; if NULL is passed then NOTHING is returned
Example
*binary sub foo(*binary b) {
return b;
}

*hash

*hash Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*hash Hash, NULL, or NOTHING Hash or NOTHING Restricts values to Hash and NOTHING; if NULL is passed then NOTHING is returned
Example
*hash sub foo(*hash h) {
return h;
}

*list

*list Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*list List or NOTHING List or NOTHING Restricts values to List and NOTHING; if NULL is passed then NOTHING is returned
Example
*list sub foo(*list l) {
return l;
}

*object

*list Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*list Object, NULL, or NOTHING Object or NOTHING Restricts values to Object and NOTHING; if NULL is passed then NOTHING is returned
Example
*object sub foo(*object obj) {
return obj;
}

*<classname>

*<classname> Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*any class name Object of the particular class given, NULL, or NOTHING Object of the particular class given or NOTHING Restricts values to objects of the particular class given or NOTHING; subclasses are also accepted; if NULL is passed then NOTHING is returned
Example
sub foo(*Mutex m) {
}

*date

*data Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*data String, Binary, NULL, or NOTHING String, Binary, or NOTHING Restricts values to String, Binary, and NOTHING; if NULL is passed then NOTHING is returned
Example
sub foo(*data d) {
}

*code

*code Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*code Closures, Call References, NULL, or NOTHING Closures, Call References, or NOTHING Restricts values to Closures, Call References, and NOTHING; if NULL is passed then NOTHING is returned
Example
sub foo(*code c) {
}

*timeout

*timeout Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*timeout Integer, Date, NULL, or NOTHING Integer or NOTHING converts dates to an integer value representing milliseconds and returns the integer; incoming integers are assumed to represent milliseconds; also accepts NOTHING and returns NOTHING; if NULL is passed then NOTHING is returned
Example
sub foo(*timeout c) {
}

*reference

reference Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
reference References, NULL, or NOTHING the type the reference points to Requires a reference to an lvalue to be assigned or NOTHING; if NULL is passed then NOTHING is returned
Example
sub foo(*reference f) {
f = 10;
}
int i;
foo(\i);

*softint

*softint Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*softint Integer, Float, Number, Boolean, String, NULL, NOTHING Integer or NOTHING Accepts Integer, Float, Number, Boolean, String, and NULL values and converts non-integer values to an integer and returns the integer; also accepts NOTHING and NULL and returns NOTHING
Example
sub foo(*softint i) {
}

*softfloat

*softfloat Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*softfloat Integer, Float, Number, Boolean, String, NULL, NOTHING Float or NOTHING Accepts Integer, Float, Number, Boolean, String, and NULL values and converts non-float values to a float and returns the float; also accepts NOTHING and NULL and returns NOTHING
Example
sub foo(*softfloat f) {
}

*softnumber

*softnumber Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*softnumber Integer, Float, Number, Boolean, String, NULL, NOTHING Number or NOTHING Accepts Integer, Float, Number, Boolean, String, and NULL values and converts non-number values to a number and returns the number; also accepts NOTHING and NULL and returns NOTHING
Example
sub foo(*softnumber n) {
}
Since
Qore 0.8.6 introduced the *softnumber type

*softbool

*softbool Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*softbool Integer, Float, Number, Boolean, String, NULL, NOTHING Boolean or NOTHING Accepts Integer, Float, Number, Boolean, String, and NULL values and converts non-boolean values to a boolean and returns the boolean; also accepts NOTHING and NULL and returns NOTHING
Example
sub foo(*softbool b) {
}

*softstring

*softstring Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*softstring Integer, Float, Number, Boolean, String, NULL, NOTHING String or NOTHING Accepts Integer, Float, Number, Boolean, String, and NULL values and converts non-string values to a string and returns the string; also accepts NOTHING and returns NOTHING
Example
sub foo(*softstring str) {
}

*softdate

*softdate Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*softdate Integer, Float, Number, Boolean, String, Date, NULL, NOTHING String or NOTHING Accepts Integer, Float, Number, Boolean, String, Date, and NULL values and converts non-date values to a date and returns the date; also accepts NOTHING and NULL and returns NOTHING
Example
sub foo(*softdate d) {
}

*softlist

*softlist Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
*softlist all data types List or NOTHING Accepts all data types; NOTHING and NULL are returned as NOTHING; a list is returned unchanged, and any other type is returned as the first element of a new list
Example
*softlist d = v;
Since
Qore 0.8.3 introduced the *softlist type

any

any Type Restriction

Name Accepts Qore Type(s) Returns Qore Type(s) Description
any all data types all data types Accepts all data types and returns the same data type
Example
any v = bar;
Note
Complex types (hash of lists, reference to string, etc) are currently not possible to declare but support may be added in future versions of Qore for this.