Розширення (extensions) в Kotlin дозволяють вам додати додаткову функціональність уже існуючим класам або інтерфейсам без механізму успадкування або патерну проєктування Decorator. Цей механізм корисний при роботі із сторонніми бібліотеками і вам, наприклад, треба додати функцію до якогось класу, а успадкування закрите. Раз створивши її, ви зможете викликати її в будь який момент так ніби вона початково була членом класу чи інтерфейсу.

Найбільш пошириними форматами розширення є розширювальні функції (extension functions) та розширювальні властивості (extension properties).

Розширювальні функції Наприклад ми маємо клас Person і ми хочемо додати до нього функцію поліндром reverseName(), що пише ім'я особи задом наперед. Насправді в середині ми викличимо вже існуючу функцію класу String reversed(), що це робить. Нову функцію reverseName() ми створюємо лише для ілюстрації створення розширювальної функції. class Person (var name:String){} // клас Person з одною властивістю name

fun Person.reverseName():String{ //додаєм розширювальну функцію для Person return this.name.reversed() // this - це посилання на об'єкт класу Person }

fun main(){ var person=Person("Василь Давидюк") println(person.reverseName()) // кюдиваД ьлисаВ } Як бачимо клас ми не змінювали, але використовуючи об'єкт цього класу ми викликаємо нашу нову функцію.

Можна розширити і базові типи як то Int, String і т.п.: fun String.reverseString():String{ //додаєм розширювальну функцію return this.reversed() }

fun main(){ println ("Це буде обернено".reverseString()) // оненребо едуб еЦ }

Прикладами функцій розширення в kotlin є функції колекцій .map(), .filter(), reduce() тощо.

Детальніше Extensions. Офіційна документація (англ)