В Kotlin функция с хотя бы одним аргументом может быть определена либо как регулярная нечлена-функция, либо как функция расширения с одним аргумент является приемником.
Что касается области охвата, то, похоже, нет никакой разницы: оба могут быть объявлены внутри или вне классов и других функций, и оба могут или не могут иметь модификаторы видимости одинаково.
Ссылка на язык, похоже, не рекомендует использовать обычные функции или функции расширения для разных ситуаций.
Итак, мой вопрос: , когда функции расширения дают преимущество над регулярными нечленными? И когда регулярные над расширениями?
foo.bar(baz, baq)
vs bar(foo, baz, baq)
.
Это просто намек на семантику функции (приемник определенно находится в фокусе), или есть случаи, когда использование функций расширений делает код намного более чистым/открывает возможности?