Kotlin to nowoczesny język programowania stworzony przez JetBrains (twórców IntelliJ IDEA). Od 2019 roku jest oficjalnym językiem Androida rekomendowanym przez Google. Kotlin jest w pełni interoperacyjny z Javą — możesz używać obu języków w jednym projekcie.
Kotlin oferuje null safety, coroutines (współbieżność), data classes, extension functions i wiele innych feature'ów, które czynią go bezpieczniejszym i bardziej produktywnym niż Java.
data class User(
val id: String,
val name: String,
val email: String,
val age: Int,
) {
val isAdult: Boolean get() = age >= 18
val displayName: String get() = "$name ($age)"
}
// Null safety
fun greet(user: User?): String {
return user?.let {
"Cześć, ${it.name}!"
} ?: "Cześć, nieznajomy!"
}
// Sealed class — exhaustive when
sealed class Result<out T> {
data class Success<T>(val data: T) : Result<T>()
data class Error(val message: String) : Result<Nothing>()
data object Loading : Result<Nothing>()
}
@Composable
fun ProfileCard(user: User) {
var expanded by remember { mutableStateOf(false) }
Card(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
.clickable { expanded = !expanded }
) {
Column(modifier = Modifier.padding(16.dp)) {
Text(
text = user.displayName,
style = MaterialTheme.typography.headlineSmall,
)
Text(
text = user.email,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
AnimatedVisibility(visible = expanded) {
Text("Wiek: ${user.age}")
}
}
}
}
class UserRepository(
private val api: UserApi,
private val db: UserDao,
) {
suspend fun getUsers(): Result<List<User>> {
return try {
val users = api.fetchUsers() // suspend call
db.insertAll(users) // cache locally
Result.Success(users)
} catch (e: Exception) {
val cached = db.getAllUsers()
if (cached.isNotEmpty()) Result.Success(cached)
else Result.Error(e.message ?: "Unknown error")
}
}
}
Oficjalny język Androida. Jetpack Compose, Material 3, Navigation, Room, Hilt.
Deklaratywny UI. Animacje, theming, accessibility. Odpowiednik SwiftUI dla Androida.
Lekki framework do API. Coroutines, WebSockets, serialization. JVM performance.
Shared business logic między Android, iOS, Web, Desktop. Eksperymentalne, ale obiecujące.
Structured concurrency. Flow (reactive streams), StateFlow, SharedFlow. Lekkie wątki.
100% kompatybilność z Javą. Używaj dowolnej biblioteki Java w Kotlin i odwrotnie.
Idealny gdy: budujesz natywną aplikację Android, potrzebujesz pełnego dostępu do Android API, masz zespół Java/Kotlin, budujesz z Jetpack Compose.
Nie najlepszy gdy: potrzebujesz też iOS (lepiej Flutter), budujesz web app (lepiej TypeScript), potrzebujesz szybkiego MVP na obie platformy (lepiej Flutter).