Українська
Підсумки
Висновки
Функція має контракт, який включає типи параметрів і результату, одиниці, допустимі межі та спосіб відмови. Unit позначає дію без корисного результату, Nothing – шлях без звичайного повернення, а require явно відхиляє неправильний аргумент. Параметри за замовчуванням та іменовані аргументи роблять виклик зрозумілим, але їхні значення й імена стають частиною API. vararg приймає змінну кількість аргументів, а рекурсія потребує базового випадку й кроку, який до нього наближає; tailrec перетворює хвостовий виклик на цикл, але не виправляє помилок алгоритму. Функції-розширення викликаються як методи, проте розв’язуються статично й не змінюють клас приймача. Рядок незмінний: операції над ним повертають новий рядок, а String.length на JVM рахує UTF-16-кодові одиниці. Шаблони, зрізи, форматування з явною локаллю та StringBuilder допомагають формувати текст передбачувано. Regex відрізняє перевірку всього рядка через matches від пошуку фрагмента через find, а синтаксично правильний текст ще потрібно перевірити за змістом.
Питання для самоперевірки
- Чим повернення значення відрізняється від друку?
- Коли зручне тіло-вираз?
- Що означають Unit і Nothing?
- Які дані є прихованим входом функції?
- Коли обчислюється аргумент за замовчуванням?
- Навіщо потрібний оператор розгортання vararg?
- Чому факторіал у звичайній формі не хвостовий?
- Які обмеження має infix-функція?
- Чому розширення не додає поле до об’єкта?
- Чим wordCount-властивість відрізняється від збереженого поля?
- Які одиниці рахує String.length на JVM?
- Чим matches відрізняється від find?