Kotlin, developed by JetBrains, has rapidly emerged as a modern programming language that combines simplicity with robust features, making it a favorite among developers. Whether you are a beginner or transitioning from another language like Java, this guide will help you understand the fundamentals of Kotlin.
Kotlin Programming Basics
Kotlin is a statically typed language designed to improve code readability and productivity.
Hello, Kotlin!
fun main() {
println("Hello, Kotlin!")
}
This simple program demonstrates Kotlin's concise syntax. The main
function serves as the entry point, and println
is used to print output.
Variables and Data Types
Kotlin variables are declared using either val
or var
:
val
: Immutable, read-only (likefinal
in Java).var
: Mutable, can be reassigned.
val name: String = "Kotlin"
var age: Int = 25
Kotlin supports standard data types such as Int
, Double
, Char
, String
, Boolean
, etc., and offers type inference, so specifying types is optional.
val isKotlinFun = true // Type inferred as Boolean
Null Safety
Kotlin eliminates the dreaded NullPointerException
by introducing null safety features:
Nullable types (
?
): Allow variables to hold null values.var name: String? = null
Non-null assertion (
!!
): Converts nullable types to non-null, but throws an exception if the value is null.println(name!!.length) // Risky
Elvis operator (
?:
): Provides a default value when the expression is null.val length = name?.length ?: 0
let
Scope Function: Executes code only if the variable is non-null.name?.let { println("Name is $it") }
Collections
Kotlin collections make handling groups of objects easier with features like immutability.
Lists
Immutable List: Cannot be modified after creation.
val fruits = listOf("Apple", "Banana", "Cherry")
Mutable List: Can be modified.
val numbers = mutableListOf(1, 2, 3) numbers.add(4)
Maps
Store key-value pairs.
val map = mapOf("Kotlin" to 1, "Java" to 2)
Sets
Ensure unique elements.
val set = setOf(1, 2, 2, 3) // [1, 2, 3]
Functions
Kotlin functions are versatile and support features like default arguments and named arguments.
Default Arguments
fun greet(name: String = "Guest") {
println("Hello, $name!")
}
Named Arguments
fun displayDetails(name: String, age: Int, city: String) {
println("$name, $age years old, from $city.")
}
displayDetails(age = 30, name = "John", city = "New York")
Object-Oriented Programming (OOP) Concepts
Classes
class Person(val name: String, var age: Int)
Inheritance
open class Animal {
open fun sound() = println("Animal sound")
}
class Dog : Animal() {
override fun sound() = println("Bark")
}
Interfaces
interface Flyable {
fun fly()
}
class Bird : Flyable {
override fun fly() = println("Flying")
}
Abstract Classes
abstract class Shape {
abstract fun area(): Double
}
Lambdas and Extension Functions
Lambdas
Lambdas allow you to write concise anonymous functions.
val square: (Int) -> Int = { number -> number * number }
println(square(4)) // 16
Extension Functions
Add new functionality to existing classes without modifying their code.
fun String.reverse(): String = this.reversed()
println("Kotlin".reverse()) // "niltoK"
Coroutines
Kotlin provides coroutines for asynchronous programming, enabling non-blocking code execution. It’s especially useful for network or database calls.
suspend fun fetchData() {
delay(1000)
println("Data fetched!")
}
Sealed Classes
Sealed classes are used for representing restricted class hierarchies.
sealed class Result {
class Success(val data: String) : Result()
class Error(val message: String) : Result()
}
Conclusion
Kotlin’s rich features and modern syntax make it a powerful language for both Android development and general-purpose programming. By mastering these fundamentals, you lay a strong foundation to explore its advanced capabilities.
Start experimenting with Kotlin today and unlock its potential! 🚀