--- applyTo: "**/*.kt" --- # Kotlin Coding Conventions – Bollwerk App Diese Konventionen gelten für alle Kotlin-Dateien im Workspace. ## Sprache & Plattform - **Kotlin** (aktuell), Zielplattform **Android** (aktuelles API-Level) - **Jetpack Compose** für UI - **Gradle (Kotlin DSL)** als Build-System ## State Management - `StateFlow` / `MutableStateFlow` in ViewModels - `collectAsStateWithLifecycle()` in Composables - `remember` / `rememberSaveable` für UI-lokalen State ## Navigation - Jetpack Navigation Compose - Type-safe Navigation mit `@Serializable` Routen ## Concurrency - Kotlin Coroutines (`suspend`, `Flow`, `StateFlow`) - `viewModelScope` für ViewModel-gebundene Coroutines - `withContext(Dispatchers.IO)` für I/O-Operationen - Strukturierte Fehlerbehandlung mit `try/catch` um jeden `suspend`-Aufruf ## Naming - Klassen/Interfaces: `UpperCamelCase` - Funktionen/Variablen: `lowerCamelCase` - Konstanten: `UPPER_SNAKE_CASE` - Composable-Funktionen: `UpperCamelCase` (wie Klassen) - Boolean-Eigenschaften: Präfix `is`, `has`, `can`, `should` ## Zugriffsmodifikatoren - So restriktiv wie möglich: `private` > `internal` > `public` - Kein `public` ohne klaren Grund (Kotlin-Default ist `public`) ## Verbotene Patterns - Keine Force-Casts (`as`) ohne vorherige Typprüfung – `as?` bevorzugen - Keine `println()`-Statements – stattdessen `Timber` oder Projekt-Logger verwenden - Keine ungenutzten Imports - Keine auskommentierten Code-Blöcke - Kein `!!` (not-null assertion) in Produktionscode ## Testing - **JUnit 5** für Unit Tests - **Espresso** / **Compose Testing** für UI Tests - Testmethoden: `test___()` - Gliederung: `// Given`, `// When`, `// Then` - MockK für Mocking ## Persistenz - **Room** (SQLite) für lokale Daten - **kotlinx.serialization** für JSON Import/Export - **DataStore** für Einstellungen/Konfigurationen - **Keychain** für Session-Tokens ## Dokumentation - Alle öffentlichen/internen Typen und Methoden mit `///` dokumentieren - Kommentare beschreiben „was" und „warum", nicht „wie"