Quick Start
// Variables
val immutable = "constant"
var mutable = "variable"
// Functions
fun greet(name: String): String = "Hello, $name"
// Classes
data class User(val id: Int, val name: String)
// Null safety val user: User? = null user?.name // safe call user?.name ?: "Unknown" // elvis operator
## Key Concepts
### Null Safety
- `?` for nullable types
- `!!` for non-null assertion (avoid)
- `?:` elvis operator for defaults
- `?.let { }` for null-safe blocks
### Extension Functions
```kotlin
fun String.isValidEmail(): Boolean = contains("@")
val valid = "user@example.com".isValidEmail()
Scope Functions
apply: Configure objectlet: Transformrun: Execute with contextwith: Receiver operationsalso: Side effects
Coroutines
viewModelScope.launch {
val data = withContext(Dispatchers.IO) {
fetchData()
}
}
SOLID Principles Summary
- SRP: One responsibility per class
- OCP: Open for extension, closed for modification
- LSP: Substitutable subtypes
- ISP: Specific interfaces
- DIP: Depend on abstractions