Now let's begin talking about the basic building blocks of computer programs. We'll show how computers can store data using variables, and discuss how Kotlin distinguishes between different types of data.
Computers represent the most powerful tool that humans have ever created. Part of what makes them so useful is that they are good at things that humans are not.
Over the next few lessons we'll be discussing several core computer capabilties:
These abilities form the foundation of everything that computers can do. Even if computers sometimes seem complex—they are actually quite simple. (That doesn't mean that computer programming or computer science is simple or easy, far from it!)
Computers are great at storing information or data. Let's look at how we can store a single number in a Kotlin program:
This code does three things:
iwill store integer data (
imay change (
ito be zero
We have declared our first variable! As its name implies, a variable's value can and usually does change as the program runs.
Technically the statement
var i: Int = 0 is combining two things that we can do separately: variable declaration and initialization.
Let's write it out on two separate lines:
While we can do it this way, Kotlin will complain if we don't set an initial value:
Run the code above and see what happens. As a result, it's more common to see the variable declaration and initialization combined into a single statement.
When we declare and initialize our variable in the same statement, Kotlin does not require that we explicitly provide a type. For example, this:
is equivalent to
In the second case, Kotlin can infer the type of
i from the value that we use to initialize it: 0, an
Because this is pretty convenient, we'll normally omit the unnecessary type notation when we can.
There are times when explicit type notation is needed, and we'll discuss them when we get there.
In the code above we also used our first literal—the value
0 that we used to initialize
A literal is a value that appears directly in your code.
Unlike a variable, it's value does not change.
Note that in Kotlin, character literals must be enclosed in single (not double) quotes. So this won't work:
But be careful here, since Kotlin's type inference might "help" you in a way that you don't expect!
All data in Kotlin is represented by combinations of 8 different types of value. These are known as the Kotlin basic types.
Here are all 8 Kotlin basic types, broken into four categories:
Kotlin has four different basic types for representing integer values. An integer is a number without a decimal point. So 0, 8, 16, and 333 are all integers, but 8.7, 9.001, and 0.01 are not.
Why does Kotlin have four different types for representing the same kind of data?
Because each can hold a different range of values.
Byte variables can store values from -128 to 127, while
Int variables can store values from -2,147,483,648 to 2,147,483,647:
Int variables also take up more computer memory.
Don't worry too much about these distinctions now.
We'll almost always use
Int variables to store integers in this class.
Kotlin provides two types for storing decimal values:
Similar to with integer values,
Float variables can store a smaller range of values than
We'll commonly use a
Double when we need to store a floating point value.
In order to make decisions about what to do in our programs, we'll frequently want to determine whether something is true or false.
Variables with Kotlin's
Boolean type can store only two values:
Finally, Kotlin provides the
char type for storing a single character value.
Not every programming language requires that you indicate what type of data a variable will hold. For example, this is valid code in the Python programming language:
So why does Kotlin enforce rules about what type of data each variable holds? Because it allows the computer to help you write correct programs and avoid errors. By keeping track of what type of data a variable holds, Kotlin can help us make sure that certain operations on that variable are valid. This will make more sense as we go, but we can already see these checks at work in a simple case:
Examining the primitive types, you'll notice that 6—
Double—are explicitly for storing numbers.
Well, we represent
false as 0 and
true as 1.
Char as the outlier that doesn't seem to store a numeric value.
But... it does!
What is shown above is the mapping from numbers to character values.
You can see that in action as you use the
char type in Kotlin:
The mapping above wasn't sent down on stone tablets. It was agreed upon at the dawn of the computer age. (And it leaves a lot to be desired, since there are many symbols in many alphabets that are not included!)
But it makes an important point. Internally, computers store everything as a number. Any non-numeric data must be converted to numeric form—or digitized—before it can be manipulated by a computer.
We live in the digital age. You enjoy music delivered in a digital format and take photos with a digital camera. You can increasingly enjoy fine art from a distance due to high-resolution scans. One day soon you'll have a completely digital medical record, consisting of medical information that was itself digitized so that it could be analyzed by a computer. Learning about computer science and programming will allow you to be a full participant in our digital present and future.
Need more practice? Head over to the practice page.