Какой тип языка Котлин? Чистый ООП или функциональный

Я изучаю Kotlin . Имея Java-фон, который я знаю, Java – это чисто объектно-ориентированный язык. Все должно быть внутри класса даже главной функцией.

Вот почему мне интересно, является ли Kotlin истинно объектно-ориентированным языком? Потому что можно писать программы functionl с Kotlin.

 package functions fun sayHello(name: String): String { val personName = name return "hello $personName" } fun main(args: Array<String>) { println(sayHello("Netra")) } 

На самом деле большинство аналитиков языка вообще не рассматривают Java как чисто объектно-ориентированный язык. Весь код, который должен быть в классе, не является хорошим тестом, и лучший тест – это все на языке объекта. В Java многие элементы языка, особенно методы и функции (функции долгое время отсутствовали, но затем добавлены недавно через lambdas), не были доступны как объекты.

Котлин исправляет многие из недостатков Java в OO, хотя сама Java также медленно исправляет эти недостатки. Но, как правило, можно сказать, что Котлин можно считать более «OO», чем Java, в основном как преимущество более нового дизайна, способного исправлять ошибки прошлого.

Возможность писать функции, как это теперь возможно в Java с Lambdas, не является «анти-объектно-ориентированной», реальный тест заключается в том, что сами функции могут быть объектами первого класса. Добавляя функции, Java не стал меньше OO, и на самом деле Java постепенно становится больше OO с течением времени. Исследование «Является ли Java OO?»?

Возможность поддерживать функциональное программирование не делает язык «не-оо». Рассмотрите (или исследуйте) scala.

Функциональное программирование может быть таким же старым или даже старше, чем OO, но в последнее время оно стало более популярным, и это отражается в более функциональных возможностях FP на новых языках, а Kotlin также обеспечивает большую поддержку FP. Никакой язык не является «чистым» FP, и даже выражение «print» имеет побочные эффекты.

Kotlin обеспечивает поддержку обоих идиом и может быть больше OO, чем Java, но считается менее FP, чем более специализированные языки FP. С течением времени можно добавлять дополнительные функции FP.

—– добавление ссылки. Для источника на Java в отношении OO я предлагаю Dr Russel Winder в качестве авторитета среди других учетных данных, соавтора разработки программного обеспечения для Java, который достиг 3-х изданий. Для одной ссылки см. Это видео со слайдом в 1:40 с заявлением

Java – это императивный язык 1990-х годов, который не является объектно-ориентированным.

Как признанный эксперт по Java, есть еще одно объяснение этой точки зрения как в этом видео, так и в других докладах Рассела. Это мнение также выражается многими другими экспертами по Java, и я могу добавить ссылки, но это сделало бы эту запись слишком длинной, чтобы добавить как можно больше деталей для каждого примера.