72 lines
2.1 KiB
Markdown
72 lines
2.1 KiB
Markdown
---
|
||
applyTo: "**/*.kt"
|
||
---
|
||
|
||
# Kotlin Coding Conventions – Krisenvorrat 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_<Was>_<Vorbedingung>_<Ergebnis>()`
|
||
- 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"
|