Українська
Підсумки
Висновки
Шлях лише описує розташування файла, а відносний шлях залежить від робочої теки процесу, тому вхідні й вихідні шляхи краще передавати аргументами. Текст зберігається як байти в конкретному кодуванні, а use і useLines закривають ресурс після завершення блоку навіть під час винятку. Помилки введення-виведення обробляють точно, а важливий файл оновлюють через повністю записаний тимчасовий файл і перейменування з явною політикою атомарності. CSV має власний контракт формату, тому split підходить лише для свідомо обмеженого варіанта з перевіркою всіх рядків. Плагін kotlinx.serialization генерує серіалізатори для класів з @Serializable, а налаштування Json визначають схему, значення за замовчуванням і реакцію на невідомі поля. Sealed-ієрархія з дискримінатором задає поліморфне кодування, а тип без вбудованої підтримки, як-от LocalDate, потребує власного серіалізатора. Модульний тест є виконуваним контрактом зі структурою Arrange–Act–Assert і незалежно визначеним очікуваним значенням. Звіт Gradle і покриття показують, що виконано, але правильність доводять перевірки поведінки, меж і пошкоджених даних.
Питання для самоперевірки
- Від чого залежить відносний шлях?
- Чому перевірка exists не замінює обробку IOException?
- Чим байти відрізняються від String.length?
- Чому не можна повертати Sequence із useLines?
- Які гарантії дає й не дає ATOMIC_MOVE?
- Чому split не є загальним CSV-парсером?
- Навіщо serialization має і плагін, і runtime?
- Коли ignoreUnknownKeys приховує помилку?
- Який тип визначає поліморфний серіалізатор?
- Навіщо LocalDate потрібне явно визначене подання?
- Які ролі мають kotlin.test, Platform і Jupiter?
- Чому покриття не доводить правильність?