Shake Variables
Variables in shake are defined using the var
and val
keywords.
var
is used to define a variable that can be reassigned,
while val
is used to define a variable that cannot be reassigned.
§ 1 Variable Declaration
§ 1.1 var
Keyword
The var
keyword is used to declare a variable that can be reassigned.
The syntax is as follows:
var variableName: Type = value
§ 1.2 val
Keyword
The val
keyword is used to declare a variable that cannot be reassigned.
val variableName: Type = value
§ 2 Variable Types
§ 2.1 Primitive Types
Shake supports the following builtin (primitive) data types:
byte
- 8-bit signed integershort
- 16-bit signed integerint
- 32-bit signed integerlong
- 64-bit signed integerfloat
- 32-bit floating point number (float32 ieee754 single precision standard)double
- 64-bit floating point number (float64 ieee754 double precision standard)ubyte
- 8-bit unsigned integerushort
- 16-bit unsigned integeruint
- 32-bit unsigned integerulong
- 64-bit unsigned integerchar
- ? [We cannot garantee the size of this char as we have multiple compilation targets]boolean
- boolean value
§ 2.2 Custom Types
Custom types can be defined using the class
keyword.
class ClassName {
// class body
}
§ 2.3 Type Inference
Shake supports type inference, which means that you don't have to specify the type of a variable explicitly. The type of the variable is inferred from the value assigned to it.
var x = 10 // x is of type int
val y = "Hello" // y is of type string
Common Types / Structures
String
- A sequence of charactersArray<T>
- An array of elements of typeT
Note Arrays are not implemented via a built-in type, but are instead implemented as a library type.
§ 3 Variable Scope
Variables in shake have block scope. This means that a variable declared inside a block is only accessible within that block.
{
var x = 10
println(x) // 10
}
§ 4 Constants
Constants are declared using the const
keyword.
A constant is a variable whose value cannot be changed once it is assigned.
const val PI: double = 3.14159
§ 5 Nullability
By default, variables in shake are non-nullable.
This means that a variable cannot be assigned a null
value unless it is explicitly declared as nullable.
var x: int? = null
§ 6 Type Casting
Type casting is the process of converting a variable from one type to another. Shake supports both implicit and explicit type casting.
§ 6.1 Implicit Type Casting
Implicit type casting is done automatically by the compiler when it is safe to do so.
var x: int = 10
var y: double = x // Implicit type casting
§ 6.2 Explicit Type Casting
Explicit type casting is done manually by the programmer using the as
keyword.
var x: double = 10.5
var y: int = x as int // Explicit type casting
§ 7 Type Checking
Type checking is the process of verifying that a variable is of a certain type.
Shake supports the is
operator for type checking.
var x: int = 10
if (x is int) {
println("x is an integer")
}