Programming language Chora: Type conversion
Type conversion operators are used whenever an operand in an expression must be subjected to a conversion of its data type. Such a type conversion can be necessary when the data type of the operand can’t be used directly in the expression, or when ambiguities exist in the possible evaluation of the expression.
Depending on the data type of the operands involved in an operation, the operation may produce ambiguous results. In such case the Chora compiler will report a warning or even an error message. Compared with other programming languages, Chora handles such situations very strictly expecting you to express your intention precisely. For example, the addition of an int32 and float operand can result in an int32 or float value. Which of them is then right?
Explicit type conversion
To express your intention you apply in such case an explicit type conversion on one or on both of the operands instructing so Chora to convert the operands just before operating on them. In this manner you can decide whether the addition of an int32 operand with a float operand should be performed with integer or floating-point precision. Usually, to convert an operand in another data type you prefix the operand by the desired data type enclosed between a pair of (...) (parentheses):
var float a = 13.69; var int32 b = 1251; // Convert the operand 'b' in 'float' and perform a floating-point // addition var float c = a + (float)b; // 1264.69 // Convert the operand 'a' in 'int32' and perform an integer addition var int32 d = (int32)a + b; // 1264
The following table provides an overview of the type conversion operators implemented in the programming language Chora:
Type conversion |
Description |
---|---|
Converting between diverse signed or unsigned integer data types. |
|
Converting between floating-point and signed or unsigned integer data types. |
|
Converting between an enumeration data type and signed or unsigned integer data types. |
|
Converting between a set data type and signed or unsigned integer data types. |
|
Converting between char and signed or unsigned integer data types. |
|
Formatting a string from a floating-point, signed or unsigned integer data types. |
|
Parsing a string as number and converting its content in a floating-point, signed or unsigned integer data types. |
|
Converting any data type to bool data type. |
|
Evaluating the class ancestry of an object. |
|
Evaluating the class ancestry of a class. |
Implicit type conversion
Wherever it is not ambiguous, the Chora compiler applies the necessary type conversion implicitly. This is usually the case when you assign the result of an expression to e.g. a variable or you pass it as parameter in a method invocation. In such cases the Chora compiler can derive from the destination operand the corresponding data type and decide whether or not to convert the expression. For example, the following assignment implies the conversion to uint8 data type since the destination operand is the red instant property declared with uint8 as data type:
var int32 a = 167; var color clr = #00000000; // Apply an implicit conversion from 'int32' to 'uint8' clr.red = a; // clr.red = 167
If the applied implicit type conversion has potential side effects, the Chora compiler will report a warning giving you a chance to review the affected expression. To avoid the warning you can extend the expression by an additional explicit type conversion operator. For example: