DEV Community

Magda Miu
Magda Miu

Posted on • Originally published at Medium on

5

Kotlin Basics

In my previous articlewe discovered details about how Kotlin was designed, what is the philosophy behind this new programming language and how its popularity has grown over the past years.

In this article we’re going to continue with some basic concepts from Kotlin Wonderland like:

✅basic types from Kotlin

✅control flow instructions

✅equality checks

✅null safety

📌Define variables (val vs var)

  • val is immutable (read-only) and we can only assign a value to them exactly one time.
  • var is mutable and can be reassigned.
// immediate assignment
val countOfEvenNumbers: Int = 10
// `Int` type is inferred
var sumOfNumbers = 0
// type required when no initializer is provided
var countOfPrimeNumbers: Int
// deferred assignment
countOfPrimeNumbers = 3
countOfPrimeNumbers = 24
view raw KotlinBasics.kt hosted with ❤ by GitHub

📌Types in Kotlin

In Kotlin everything is an object.

// Kotlin Numeric Types Examples
val myByte: Byte = 10
val myShort: Short = 125
val myInt = 3000
val myLong = 3000L // The suffix 'L' is used to specify a long value
val myFloat = 123.45f // The suffix 'f' or 'F' represents a Float
val myDouble = 321.05
val hundredThousand = 100_000
val oneMillion = 1_000_000
val aTrueValue = true
val letterChar = 'K'
val digitChar = '1'
var basicKotlin = "Basic Kotlin"
view raw KotlinBasics.kt hosted with ❤ by GitHub

Arrays in Kotlin are represented using the Array class. To create an array we can use the helper function arrayOf() or the constructor Array()

var numbers = arrayOf(1, 2, 3, 4, 5)
var colors = arrayOf("red", "blue", "pink", "yellow")
// primitive arrays
val myCharArray = charArrayOf('K', 'O', 'T', 'L', 'I', 'N') // CharArray (corresponds to Java 'char[]')
val myIntArray = intArrayOf(1, 3, 5, 7, 9, 11) // IntArray (corresponds to Java 'int[]')
// Array constructor
val numbersArray = Array(8, { i -> i * 2 }) // 0 2 4 6 8 10 12 14
view raw KotlinBasics.kt hosted with ❤ by GitHub

String interpolation

  • Simple reference uses $
  • Complex references uses ${}
  • Raw Strings ”””
val firstWord = "Learn "
val secondWord = "Kotlin"
var bothWords = "$firstWord $secondWord"
println("$bothWords has ${bothWords.length}")
println(""""$bothWords" has ${bothWords.length}""")
view raw KotlinBasics.kt hosted with ❤ by GitHub

📌Control flow: if, when, for, while

  • if —  in Kotlin if is an expression, so it returns a value. There is no ternary operator.
  • when  — replaces “switch” from Java. We can also check a value for being or not in a specific range and we can also check if a variable is or not of a particular type.
  • for  — iterates through anything that provides an iterator. Can use the withIndex library function.
  • while and do … while  — same behavior like in Java.
val number = 0
val result = if (number > 0) {
"Positive number"
} else if (number < 0) {
"Negative number"
} else {
"Zero"
}
println(result) // => Zero
view raw KotlinBasics.kt hosted with ❤ by GitHub
val firstValue = 6
val secondValue = 3
val operator = "/"
val resultOfOperation = when (operator) {
"+" -> firstValue + secondValue
"-" -> firstValue - secondValue
"*" -> firstValue * secondValue
"/" -> firstValue / secondValue
else -> "$operator operator is invalid."
}
println(resultOfOperation) // => 2
view raw KotlinBasics.kt hosted with ❤ by GitHub
var age = 22
when (age) {
in 1..18 -> print("Age is in the range")
!in 18..110 -> print("Age is outside the range")
else -> print("None of the above")
} // => None of the above
view raw KotlinBasics.kt hosted with ❤ by GitHub
var sum = 234
when (sum) {
is Int -> println("The sum is $sum")
else -> println("It is not an Int")
}// => The sum is 234
view raw KotlinBasics.kt hosted with ❤ by GitHub
for (index in 1..10) {
println(index)
}
for (index in 12 downTo 0 step 2) {
println(index)
}
view raw KotlinBasics.kt hosted with ❤ by GitHub
var languages = arrayOf("Java", "Kotlin", "Scala", "C#")
for (item in languages)
println(item)
var desserts = arrayOf("Cupcake", "Ice cream", "Eclair", "Pie")
for (item in desserts.indices) {
if (desserts[item].length > 4)
println(desserts[item])
}
view raw KotlinBasics.kt hosted with ❤ by GitHub
while (sumOfNumbers > 0) {
sumOfNumbers--
}
do {
val result = retrieveData()
} while (result != null)
view raw KotlinBasics.kt hosted with ❤ by GitHub

📌 Equality checks

  • In Kotlin we have structural equality (a check for equals()) ==
  • Referential equality (two references point to the same object) ===
val countries = setOf("Java", "JavaScript", "Swift")
val neighbors = setOf("Swift", "JavaScript", "Java")
println(countries == neighbors) // => true
println(countries === neighbors) // => false
view raw KotlinBasics.kt hosted with ❤ by GitHub

📌Null safety

  • In an effort to rid the world of NullPointerException, variable types in Kotlin don’t allow the assignment of null. 👼👼👼
  • In order to use a variable that can be null, declare it nullable by adding ? at the end of its type.

But… 😥😥😥

The only possible causes of NPE’s may be:

  • An explicit call to throw NullPointerException()
  • Usage of the !! operator (not-null assertion operator)
  • Some data inconsistency with regard to initialization
  • Java inter-operation
// check for null in conditions
val trainingName: String? = "Learn Kotlin in 45 minutes"
if (trainingName != null && trainingName.isNotEmpty()) {
print("String of length ${trainingName.length}")
} else {
print("Empty string")
}
val platform: String? = null
val language = "Kotlin"
println(platform?.length) // safe call
println(language.length) // unnecessary safe call
val lengthOfWord = platform!!.length // !! operator
val numberOfLetters: Int? = lengthOfWord as? Int // safe cast
view raw KotlinBasics.kt hosted with ❤ by GitHub

// Elvis operator
val name: String? = null
val lengthOfName = name?.length ?: -1
println(lengthOfName) // => -1
view raw KotlinBasics.kt hosted with ❤ by GitHub

Enjoy and feel free to leave a comment if something is not clear or if you have questions. And if you like it please 👏 and share !

Thank you for reading! 🙌🙏😍✌

Magda Miu

Reinvent your career. Join DEV.

It takes one minute and is worth it for your career.

Get started

Top comments (0)

Imagine monitoring actually built for developers

Billboard image

Join Vercel, CrowdStrike, and thousands of other teams that trust Checkly to streamline monitor creation and configuration with Monitoring as Code.

Start Monitoring

👋 Kindness is contagious

Immerse yourself in a wealth of knowledge with this piece, supported by the inclusive DEV Community—every developer, no matter where they are in their journey, is invited to contribute to our collective wisdom.

A simple “thank you” goes a long way—express your gratitude below in the comments!

Gathering insights enriches our journey on DEV and fortifies our community ties. Did you find this article valuable? Taking a moment to thank the author can have a significant impact.

Okay