In Kotlin, we can save keystrokes and optimize our variable declarations with a feature known as type inference.
Type inference indicates that the compiler can infer the type of a declared variable, and its data type can be omitted in the declaration. Take a look at the following variable declaration:
var lightsOn: Boolean = true
We’re explicitly stating the type of variable, but the Kotlin compiler is also intelligent enough to make this assumption even with the absence of a type:
var lightsOn = true // valid declaration
The compiler recognizes that a
false value stored in a variable falls under the Boolean data type, thus the
lightsOn variable is a Boolean.
It’s important to know that regardless of how a variable is declared, its type cannot change throughout a program. A Boolean variable, whether explicitly stated or inferred, can only hold a
If we try to assign a value that’s not a Boolean:
lightsOn = "no" // error
The compiler will throw the following error:
Inference.kt:4:14: error: type mismatch: inferred type is String but Boolean was expected lightsOn = "no"
Note: Variable declarations with explicitly specified data types and those with inferred data types are both valid ways in creating variables. Each syntax will be accepted by the compiler, thus choosing one or the other is simply up to the developer’s preference.
In Inference.kt, we’ve added a
print() statement with some Kotlin code within the
main() function that outputs the inferred data type for a variable, called
typeTest. Don’t worry about understanding exactly how this code works now, we’ll cover what these symbols and names mean later in the course. For now, we’ll just use it to show the type of data that was inferred by the compiler.
print() statement, declare
typeTest and initialize it with any value from this list:
Observe the inferred type in the terminal. Was it what you expected?
Assign and test a few other values for