Українська
Підсумки
Висновки
Кожна змінна має статичний тип, навіть коли його виведено компілятором, а val забороняє лише повторне присвоєння посилання. Числові типи мають обмежений діапазон, тому переповнення й неточність Double враховують під час вибору типу та порядку операцій. Kotlin не розширює Int до Long неявно, а правило округлення потрібно обирати явно за контрактом задачі. Nullable-типи роблять можливу відсутність значення частиною контракту: ?., ?: і перевірки з розумним приведенням обробляють її безпечно, а !! лише стверджує, що null немає. == порівнює значення, === – тотожність посилань. if і when є виразами, тому результат має бути визначений на всіх шляхах, а межі гілок перевіряють сусідніми значеннями. Діапазони, цикли, break, continue і мітки задають завершення обходу, яке повинно бути очевидним. Надійну програму перевіряють таблицею граничних випадків та інваріантом циклу, а не одним вдалим запуском.
Питання для самоперевірки
- Чому val не означає, що будь-який об’єкт незмінний?
- Коли потрібно розширити Int до Long?
- Чим null відрізняється від порожнього рядка?
- Чому !! не є перевіркою вводу?
- Які умови потрібні для smart cast?
- Чим == відрізняється від ===?
- Коли права межа діапазону не включається?
- Як сформулювати інваріант накопичувального циклу?