×

Kotlin для Java-розробника: варто чи ні?

Усі статті, обговорення, новини про Mobile — в одному місці. Підписуйтеся на телеграм-канал!

Привіт! Мене звати Володимир і зараз я Java/Kotlin розробник у компанії Daxx. До цього я більше 7 років працював як Java BackEnd Developer.

Коли одного разу я почав розглядати для себе нові можливості, мені приглянулась одна цікава позиція — Kotlin BackEnd Developer. Я захотів зрозуміти, які переваги для мене як Java розробника в переході на Kotlin і чи це варто мого часу. Отож, я провів дослідження і хочу поділитися його результатами з вами.



Що таке Kotlin

Kotlin — це ще одна мова JVM. Java з самого початку гучно заявила про себе: Write Once, Run Anywhere (WORA). Сьогодні на Java написано багато всього: від алгоритму у мікрохвильовці до програм у високонавантажених серверах в хмарі. Це стало можливим завдяки уніфікованій віртуальній машині (вона ж JVM). Пізніше з’явилися інші мови JVM, зокрема Kotlin. Деякі з них стали доволі популярними, інші — ні. Але всі вони можуть працювати на JVM, а тому мають ті ж переваги, що і Java, і отримають всі покращення разом із подальшим удосконаленням JVM.


* рік першого релізу

Як я вперше дізнався про Kotlin

Ви раніше щось чули про DTO (Data Transfer Objects)? Саме так я дізнався, що є мова програмування, в якій цей патерн вже реалізовано на рівні синтаксису. Це був Kotlin. Але весь проект був написаний тільки на Java, тому я почав використовувати Lombok. Це виглядало таким чином:

* DTO з Java до версії 14 та Lombok

* DTO з Kotlin

Цікавий факт, що з того часу Java теж додала спеціальний синтаксис для цього і тепер це можна зробити так:

* DTO з Java починаючи з версії 14 та опцією «preview language feature»

Чому Kotlin так легко інтегрувати з Java

Java і Kotlin можуть бути взаємозамінними. Це означає, що деякі частини коду ви можете писати на Java, а деякі — на Kotlin навіть у межах одного проекту (хоча це може бути не найкраща ідея). Ось приклад, як можна визвати Kotlin з Java і навпаки:

* виклик Kotlin data class з Java

* виклик Java DTO з Kotlin

Помітили, що той самий функціонал займає менше коду з Kotlin? Не критично, але у Kotlin точно менше «boilerplate code», порівнюючи з Java.

Також Kotlin може легко використовувати всі Java бібліотеки та фреймворки, такі як Spring чи Apache Camel. Хоча для Kotlin вже існує багато нативних аналогів, таких як Ktor. Доречі деякі інші мови JVM також можуть працювати з бібліотеками Java, але з Kotlin ця інтеграція вигладає найпростішою.

Kotlin vs Python

Щоб побачити інші переваги / недоліки Kotlin, я захотів порівняти його зовсім з іншою не JVM мовою програмування. Існує індекс мов програмування від StackOverflow, що показує, які мови найбільше полюбляють розробники.

На той час Kotlin i Python стояли поруч (можливо, так є й і до сьогодні), тож очевидно, що я захотів порівняти саме їх. Я побудував невелику блок-схему, щоб візуалізувати основні як на мене відмінності між ними:

Висновок

Існує ще дуже багато відмінностей, про які я не розповів в цій статті, але те, що для мене, як Java-розробника, Kotlin підійшов ідеально, думаю, вже стало зрозуміло. Це зовсім не означає, що Java програла в цьому поєдинку. Це більше означає те, що Kotlin — це прекрасний напрямок для розвитку Java розробника. І взагалі для мене Kotlin відчувається як нова, ще не релізнута версія Java 20

На щастя, компанія, в яку я проходив співбесіду, була готова взяти людину зі знаннями Java і бажанням перейти на Kotlin. Перехід, до речі, виявився дуже простим.

Також хочу розвіяти міф, що розробник Kotlin == розробник Android. Так, багато розробників Kotlin працюють зараз на Android проектах і не дивно, адже це рекомендована мова від Google для написання додатків Android, але вже з’являються проекти, де Kotlin — це мова для BackEnd-у, і мій проект — тому доказ.

Що далі

Якщо ти Java-розробник, якого зацікавив Kotlin, але не знаєш з чого почати, рекомендую почати з UnitTesting on Kotlin. Ось стаття, яка мені допомогла в цьому.

Ну, а якщо тобі сподобалося або думаєш, що це цікава тема — підтримай мене і залишай комент. Це важливо для того, щоб цю статтю побачили інші, ну а я буду вдячний за будь-який твій відгук!

👍ПодобаєтьсяСподобалось12
До обраногоВ обраному3
LinkedIn

Найкращі коментарі пропустити

В 2021 точно не варто. Через 4 міс виходить 17 джава. І у котліна перед джаваю лишається тільки одна суттєва перевага — елвіс оператор. Ну і основне завдання котліна — продавати більше ІДЕшок джет брейнс. Як тільки продажі почнуть скорочуватиись — прощавай котлін.

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Интересно, один я заметил две ветки «No» в диаграмме? Там где «are you going to build an enterprise’s app»)
Это наводит на определенные мысли))

Надо одно No поменять на WAT?

На wtf, и добавить yes/no на уровень ниже)

Дорисовать на каждом критерии грабли, и каждый YES менять на WTF

Эта статья была бы более своевременна лет 5-6 назад, не?

Чому Котлін це труп: twitter.com/...​/1416210891377315841?s=09

Майбутнє за мультиплатформою (тобто за Flutter), Kotliln Multiplatform має 2%/2% (2020/2021) осяг аудиторії згідно з опитування від JetBrains. Я думаю, це уже ставить хрест на всій цій оказії. Не мучтесь, відкривайте flutter.dev і вперед.

Ще походу можете зацінити мої скрінкасти по розробці гри на флатер: www.youtube.com/...​wa-vx3UtBo4FAsoBlXgQl_Wse (англ) та українською: www.youtube.com/...​wa-uo8aE8GXDVqDBN1gpkzt5i

А ничего, что котлин мультиплатформ еще полноценно не зарелизился?

так а кому треба ДАОшки катать між платформами? Взяв флатер і вперед. Там взагалі не помічаєш для чого пишеш і логіку і вьюшку і все що хочеш.

Флаттер — это только мобилки. С# - это и мобилки, и бекенд, и десктоп, а с веб-ассембли будет еще и веб

Всегда было интересно, как Xamarin себя чувствует на мобилках? Какова разница в производительности по сравнению с нативом?
Какие плюсы и минусы? Я думаю если всё так было хорошо, он бы занимал побольше на рынке

відкриваєш апку, а вона убога. ЦЕ означає, що відкрив або АЙОНІК або ХАМАРІН. Якщо є пару кривих анімацій — то реакт нейтів.

Якщо апка атас — то флатер.

У Xamarin есть два подхода: Xamarin.Native и Xamarin.Forms. Xamarin.Native не отличается по перфомансу от натива вообще, так как Xamarin при таком подходе просто оборачивает в С# вызовы системных апи. Xamarin.Forms доьавляет нектороый оверхед к запуску приложений, но позволяет создавать UI однократно для всех поддерживаемых платформ. Это определяет свои плюсы и минусы при каждом из подходов — большая скорость разработки или нативный перфоманс аппликухи. Я предпочитаю Xamarin.Native

Из общих плюсов конечно отличная интеграция с другими подсистемами на С# - десктоп мобайл и бек пишется на одном языке.

Ну а из общих минусов раньше была платность, но сейчас это уже решено.
Ну а касательно популярности, то мне это все напоминает вот эту ситуацию

Флатер цей фреймворк, C# - мова.

Dart — це і мобілки, і бекенд, і десктоп, і веб і васм. І все це УЖЕ.

Ваш C# відстає на 5 років мінімум (тобто уже програв).

Приведите примеры реальных проэктов на дарте с большой пользовательской базой для десктопа, веба и бекнэенда. Также желательно знать общее количество таких проэктов

locadeserta.com

Ubuntu Store :)

flutter.dev/showcase

Оцініть якість і наскільки вони всі гарно виглядають.

Просити вас показати хамарін апки я не буду, так я тільки щоно поїв.

Апка на замарін жодним чином не відрізняється від нативної, оскільки юзає нативні контроли, на відміну від флатера, що малює на канві. Лук енд філ не получиться

я апки на хамарін чи іншому недофреймворку відрізняю сходу.

По-перше, не знаю що таке «хамарін», по-друге відрізнити теоретично неможливо, оскільки фреймворк не рендерить контроли, а юзає системні, по-третє, дарт ніде себе не проявив, окрім анімашок для любителів смузі

Бекенд (ASP.NET Core), геймдев (Unity), десктоп (WPF, WinForms, UWP), мобільний та веб фронт (Blazor, Xamarin, MAUI), машинне навчання (ML.NET), IoT (.NET nano framework). Складно знайти де він себе не проявив, в якості засобу для розробки драйверів хіба. А от дарт, не зважаючи на те, що йому вже 10 років, поза флатером нікому взагалі не впав.

АСП — убожество для корп порталів, які вантажаться по 30 секунд
Юніті — жирок
UWP, WPF — все трупи з народження
Блазор — не сміши взагалі,
MAUI — ору
ML/IOT вперший раз чую (і в останній). що свідчить про крутість технології!

А флатер з дартом — № 1 гітхаб репка, самий швидкоростучий мобільний хплатформ рішення.

Пруфи будуть? Цифри, бенчмарки? Бо я бачу що Ви не розумієте про що беретеся судити. Більше схоже на наброс гімна на вентилятор упоротим євангелістом, жертвою хайп драйвен девелопмент, ніж інженерна позиція.

Ось до прикладу «повільний» ASP.NET Core www.techempower.com/benchmarks, 12 місце із 436, дарта взагалі немає

АСП — убожество для корп порталів, які вантажаться по 30 секунд

У тебя знание о .NET устарели лет на 20.
Все что ты пишешь как раз 20 лет назад было правдой)
.NET 5 быстрее Java и С++ и по скорости уступает только Rust.

.NET 5 быстрее Java и С++

Ты тоже читаешь результаты тестов, которые пишут люди не умеющие писать бенчмарки?

Ты тоже читаешь результаты тестов, которые пишут люди не умеющие писать бенчмарки?

Все их читают, т.к. пропаганда «менеджед» языков «от нубов и для нубов» — прёт из любого утюга.

Но нe каждый на эти безмозглые агитки ведётся и ссылается. :)

.NET 5 быстрее Java и С++

укро-синьор-архитект детектед :)

Это даже не L3...

укро-синьор-архитект детектед :)

Это даже не L3...

Я только хотел сказать что «его L7 за сегодня и вчера — постригли до L6», но как настоящий погромизд — я сильно ошибся с этой оценкой

Что-то мой тайтел всем покоя тут не дает.
Бегают за мной по всем тредам, пытаются ошибку в моих словах найти.

Кто первый про тайтл архитекта начал писать и хвастаться в уже 2й (а может и 3й) по счету теме? ) Я, видимо? ))

они отличаются в первую очередь тем, что пишут их в общей массе не по гайдлайнам. Я и сам сколько видел на ксамарине апки — их сразу отличишь.

Ну, и что мы тут видим:

-Ubuntu Store (ну ок, хотя я не смог найти пруфов что он разработа на дарте)
-Одна поделка собственного производства
-Список мобильных (подчеркиваю, МОБИЛЬНЫХ) апок

ни декстопа, ни веба, ни бека, ни пруфов по количеству проэктов для этих платформ на дарте вообще

Не убедительно как-то

так ви покажіть якісь мобільні апки на хамаріні :)))) жодного разу не бачив, лише на сайті дотнетних мількає аж цілий ліст вью з жсоном рендереним

Caesars Slots, Slotomania достаточно серьезные для вас проэкты?

ору.

а one tap games теж на хамарін зроблені?

Что конкретно есть в твоем Флатере, Котлине и Дарте чего нет в C#?

я компілюю один проект під:

— web
— Android
— iOS
— macOS
— Windows
— Linux

Всі апки виглядають ідентично і працюють також.

Я навіть не питаю, чи це може котлін, шарп чи ще якесь сміття з 2000х

І перестань плутати фреймворк з мовами програмування.

І перестань плутати фреймворк з мовами програмування.

І не починав, всі перелічені фреймворки написані на шарпі та 100% із ним сумісні, тому і наведені в якості прикладу.
А компіляція під різні платформи це звичайно щось новеньке, кіллер фіча

Ремарка: Або на суміші шарпа з плюсами

І перестань плутати фреймворк з мовами програмування

А гугл вот что-то запутался. Флаттер окей, но они взяли и нахреначили новый язык. Зачем? А потому что могут
Какая-то хреновая стратегия для входа на рынок

Так .NET это как раз один из немногих фреймворков где это возможно.
Но никто так не делает на реальных проектах.
.NET изначально позиционировали как фреймворк для всех платформ.

покажи мені хоч одну людину, яка пише мобілки на.НЕТ або лінукс. (крім корп гімна з софтсерва)

Все сервера на .NET деплояться на линуксе, для мобилок есть Xmarin и на нем тоже пишут, вот один даже топик на Доу создал, что его галера заставила Xmarin учить.
Если ты про десктоп приложения, то они сдохли давно, сейчас одни сайты, а десктоп тоже пишут на JS если надо.

десктоп приложения, то они сдохли давно
десктоп тоже пишут

лол
самозаебошился
не смог в консистентность аргументов даже внутри одного предложения

Playtika пишет давно и довольно успешно — сам приложил руку к разработке игр на Xamarin и С# в этой копмании

слот машини чи «три в рядок». дійсно, для помийних ігор може С шарп і підходить

Найбільш поширений ігровий рушій в світі це Unity. А на флатері не знаю жодної, навіть найбільш помийної гри.

фреймворки и документация (если говорить, например, про андроид)

Так C# это единственный язык где все работает из коробки, и можно писать вообще без стороних библиотек.
В Java например без Spring, Hibernate, и какой-то либы для DI никто не будет даже сайт визитку писать в .NET это все из коробки.
В плане документации тоже 1-е место.

(если говорить, например, про андроид)

Про телефоны не скажу, есть Хmarin, но слышал про него разное.

только почему-то шарп как-то дохнет потихоньку, а все колеса, которые крутят мир, вертятся на джаве.

Наоборот, замечал что на Доу много архитектов советовали .NET даже если пишут не на нем, и много джавистов признавали что Java дохнет.

Перенастрой currentTime() в своей машине времени, а то ты походу где-то из 2007-го пишешь.

Это у тебя видимо понимания .NET осталось на уровне 2007-го.

Ух как классно молодежь меряется размером языка и толщены фреймворка :)

а где можно попрактиковаться во флаттере за небольшую денежку?

фриланс? Или денежку отдать? Тогда где угодно

пиши в лінкдін хрюшам, або на джіні. дуже багато вакашек для початківців є.

Майбутнє за мультиплатформою (тобто за Flutter)

Загляни сюда: killedbygoogle.com
Тут найдётся место и для Flutter, когда гуглу надоест в него забавляться.

И что после этого, от Flutter’а останется?

Гмейлом користуєшся, ютюбом? Пошуком? Гугл клаудом? Тенсор флоу? Гугл фотос? Андроїдом? Драйвом? Гугл докс? Чи ні?

я в андроид разработке. На котлин перешел уже больше 2 лет назад. Изначально не хотел с джавы уходить, но когда разобрался с котлином, то уже назад на джаву точно не перейду.

Видимо Java будет потихоньку инкорпорировать Kotlin.

Котлин хорош, нельзя так сильно накрутить кружевов как в скале, но сахара хватает плюс гугл на него сделал ставку, намного приятнее джавы даже с ломбоком

После котлина с джавой работать просто не хочется, а хочется все сконвертировать побыстрее, если попадается такой класс. Удовольствия больше при программировании на нем

Все ниже написанное не относится напрямую к автору статьи, а скорее в целом к явлению.

Честно говоря, уже давно подзадолбали аргументы вида «возьмите новый язык, в нем на 3 буквы и 1 скобку меньше бойлерплейта». Почему у большой части населения такая прям адская бойлерплейтофобия? Ну написал ты на 1 кейворд больше и что? Нет, пишутся новые языки, расклеиваются на все сайтах плашки про новую конфу на которой очередной гуру расскажет как всеголишь перейдя на новый язык и навтягивав кучу новых зависимостей вы избавитесь от ужасного бойлерплейта.

Секта свидетелей бойлерплейта чемто напоминает смесь антипрививочников с финансовой пирамидой. Маловесомые на самом деле аргументы, раздутые до уровня панацеи пропагандируются с энтузиазмом рекламщиков пирамид.

Я не перестаю удивляться, почему мне вполне комфортно писать на pure java, а все вокруг носяться как ужаленые и стенают о том что их жизнь полна страданий от ужасного бойлерплейта?

Вокруг достаточно говнокода, и я на самом деле мало встречал людей, которые действительно заботятся о чистоте и правильности решений, зачастую просто пользуясь каким-то формальным чеком типа сонара чтобы прикрыть, как ширмой, то говно, которое на самом деле валят пальцами.

И все придыхания в сторону котлина/груви/скалы это что? Попытка самоуспокоения? Мечты о волшебной пилюле от собственной рукожопости?

Я не перестаю удивляться, почему мне вполне комфортно писать на pure java

кому и 1С норм

все вокруг носяться как ужаленые и стенают о том что их жизнь полна страданий от ужасного бойлерплейта?

Ну это как поездить на новеньком хорошем бмв некоторое время, а потом вернуцца обратно к своей 10-летней малолитражечке. Малолитражечка вроде хфункцию свою выполняет и норм, но вот чтото нето на душе...

Ну это как поездить на новеньком хорошем бмв некоторое время, а потом вернуцца обратно к своей 10-летней малолитражечке.

если человек всю жизнь ездил на бричке с хромой кобылой, и ему норм, то врядли вы его соблазните малолитражкой с бмв

Не, это обновлять игровой комп не по критериям производительности, а по количеству RGB-подсветки — чем больше красивых новых рюшечек — тем лучше

+++++
тим більше, що майже весь бойлерплейт ніхто ніколи не пише руками, а генерять кейвордами в ідеї.

Чем меньше в языке бойлерплейта — тем больше код на этом языке похож на регулярку

Честно говоря, уже давно подзадолбали аргументы вида «возьмите новый язык, в нем на 3 буквы и 1 скобку меньше бойлерплейта». Почему у большой части населения такая прям адская бойлерплейтофобия? Ну написал ты на 1 кейворд больше и что?

За счёт того, что делает Kotlin, текст типового простого класса буквально ужимается раз в 2-5.

Да, можно было бы такое сделать и в Java — повесить плашки-аннотации «включи автогенерации XX, YY, ZZ на это объявление класса». Но не сделали.

Секта свидетелей бойлерплейта чемто напоминает смесь антипрививочников с финансовой пирамидой. Маловесомые на самом деле аргументы, раздутые до уровня панацеи пропагандируются с энтузиазмом рекламщиков пирамид.

Аргументы очень весомые, и если вы их отрицаете, то или у вас опыта сопровождения толстого сложного кода 0 целых фиг десятых, или вы тупо врёте ради флейма. Каждый случай, когда надо что-то повторять идентично руками по много раз — 1) приводит к ошибкам, когда где-то кто-то просто опечатался или не заметил разницу, 2) утомляет автора кода, 3) утомляет читателя.

Даже в простом for(i=0; i < foo.size(); ++i) можно путаться в том, почему тут везде идентичное i и его надо писать одинаково три раза, и можно не заметить, что где-то дрогнула рука и вместо i оказалось j или ii. Начинающие и в этом путаются. Те, кто уже хоть как-то выучился, привыкли ловить такие случаи, но за пределы 1-2 экранов кода практически у всех отключается контроль, и получается что-то вроде int getLeft() { return right; } и «глаз замыливается» не только у автора кода, но и у ревьюеров.

Kotlin фактически и начался с того, что авторов задолбало писать идентичные по сути, но разные в деталях куски кода в 100500 местах. Дальше если не выживет — то как минимум была достойная попытка и указание базовому Java, куда развиваться.

Про сравнение с антипрививочниками — плохая аналогия, как известно, подобна котёнку с дверцей. Вы уже убили двух котят своими дурными неуместными аналогиями. Пожалуйста, не продолжайте.

Я не перестаю удивляться, почему мне вполне комфортно писать на pure java, а все вокруг носяться как ужаленые и стенают о том что их жизнь полна страданий от ужасного бойлерплейта?

Возможно, у вас другие задачи, и вам не надо писать тонны бойлерплейта. Верю.
Но у фирмы, которая пишет IDE, кругозор в разы больше за счёт своих клиентов.

И все придыхания в сторону котлина/груви/скалы это что? Попытка самоуспокоения? Мечты о волшебной пилюле от собственной рукожопости?

Всего лишь понимание и желание реализовать, что всё, что может сделать компьютер, должно быть переложено на него.

И все придыхания в сторону котлина/груви/скалы это что? Попытка самоуспокоения? Мечты о волшебной пилюле от собственной рукожопости?

«Придыхания» по скале и гурви понятно:
* scala поддерживает полноценную функциональную парадигму, с продвинутой системой типов (особенно в третей скале). Самый простой пример — скала позволяет создать DI, проверяемый на уровне компиляции, в отличии от spring’а, для которого приходится писать тучу тестов для проверки работы в рантайме
* groovy динамический язык со всеми вытекающими плюсами и минусами (по мне так хорош в тестах для spring’а)

А вот в котлине сложно что-то выделить, разве что синтаксис (на любителя) и null safety.

В 2021 точно не варто. Через 4 міс виходить 17 джава. І у котліна перед джаваю лишається тільки одна суттєва перевага — елвіс оператор. Ну і основне завдання котліна — продавати більше ІДЕшок джет брейнс. Як тільки продажі почнуть скорочуватиись — прощавай котлін.

Ще в котліна корутіни є. Але це таке. Джава зараз норм розвивається, сенсу в котліні небагато

Ще в котліна корутіни є.

Аналоги в джаві існують вже років 10 у вигляді додаткових бібліотек (хоча я згоден, що синтаксично воно не дуже). + в самій джаві вже є окремий бранч з їх реалізацією — project loom.

А есть статистика сколько проектов в мире хотя бы 11 джаву имеют?

А есть статистика сколько проектов в мире хотя бы 11 джаву имеют?

По опитуванню тієї ж джет брейнс близько половини використовують 11.
В минулому році бачив цифру 30% на 11.

Зачем Котлин если есть Скала? :)

Правильно, не нужны ни котлин, ни скала.

Зачем Скала если есть героин? Шутка, Скалой можно вынести мозг гораздо быстрее.

Та ну, Скала норм штука.
Юзаю зараз для перфоманс тестів. Можливо, це невелика область і немає де розгулятись, щоб побачити всю красу або не красу (як в бекенді), але поки за кілька місяців я не помітив нічого суперпоганого в ній.
Хоча, може не стикався просто

Суперпогане в ній все. Це мова не для людей. Читати неможливо, виносить мозок. Порівняно з Java — просто китайська з діалектами.

Для того щоб читати scala код, треба знати scala

Та не знати нічого іншого, бажано ніколи. Бо тільки так буде не очевидна її маразматичність, з якою посперечається хіба що матан.

PS. Щоб читати китайською з діалектами, треба знати китайську та її діалекти.
© КЕП

Точнее «поломать мозг», пока не изучите/поймете FP, а после этого все станет на свои места, даже будет нравиться :)

Если остаться существовать в её параллельном мире — может быть (нет конечно же, даже тогда нет). А пока мозгу нужно и со всеми остальными задачами справляться, включая код на других языках, и натуральные языки тоже в теме — уж извини.

Кроме того, на Скалу работает прекраснейший сборщик мусора, а современная техника готова отдать под её мусор весьма некислые ресурсы как памяти, так и кешей. У мозга всего этого нет. В особенности — сборщика мусора. А переведя его в режим с короткой памятью, с отстальными задачами справляться уже не сможешь совсем. Если движение ещё хоть как-то адаптировано под короткую память, то что-то с планированием — уже требует огромных карт. Попробуй при этом заняться ещё и Скалой — и обнаружишь в своей памяти столько дыр, сколько не бывает даже у алкаша после двухнедельного запоя.

НЕ НАДО проверять в действии механизм деградации памяти. Вам его последствия ОЧЕНЬ не понравятся. А бэкапов у вас нет. А данные собирались и систематизировались десятилетиями. И всё это просто ради языка программирования? Спасибо, ни за какие деньги мира.

Если кратко: Скала — плохой язык для человека. А железяке пофигу, на чём писать будешь.

Если остаться существовать в её параллельном мире — может быть (нет конечно же, даже тогда нет). А пока мозгу нужно и со всеми остальными задачами справляться, включая код на других языках, и натуральные языки тоже в теме — уж извини.

С таким же успехом можно говорить про парааллельный мир ООП и джавы в частности. Как только метастазы ООП захватят весь мозг и наступит ООП головного мозга, вот тогда можно смело считать себя профессионалом в джаве. Правда потом сложности возникают пир изучении другой парадигмы, но если позволишь ФП тоже пустить метастазы, то все становится на свои места и ООП, и ФП и скала. Проверено не своем опыте :)

Кроме того, на Скалу работает прекраснейший сборщик мусора, а современная техника готова отдать под её мусор весьма некислые ресурсы как памяти, так и кешей.

Ну так это такой замечательный дизайн java/jvm! Делаем новую фичу, что бы была совместимость со всем совместимым и несовместимым, и плевать что фича на половину реализована. Например, дженерики не поддерживают все типы jvm. Или другая специфика дизайна jvm — делаем фичу десятилетиями, например, модули начали пилить в далеком 2005, а допилили уже не совсем далеком в 2014. Value Types начали пилить 2014 году — уже 7 лет пилят. Ну еще пяток лет — и и мы наконец получим полноценные долгожданные Value Type и полноценные дженерики, хотя не факт — по дизайну все делается на половину :) И пять копеек по сборщику мусора — это же скала виновата в прожорливости сборщика мусора на jvm и плевать, что даже на джаве он жрет неимоверно :)

Кстати, на каком типе сборщика мусора сделаны такие, почти ненавистные, выводы?

НЕ НАДО проверять в действии механизм деградации памяти.

Все зависит от целей. Если нравится то, на чем работаешь и оно удовлетворяет 99% твоих запросов — не стоит учить что-то новое — смысл же жизни не в программировании :)

Просто то что он НЕ удовлетворяет — внезапно, не удовлетворяет и Скала. А уровень человеческой непереносимости у неё такой, что БрейнФак нервно курит в сторонке. Да я скорее китайский язык выучу, от него польза есть.

что БрейнФак нервно курит в сторонке.

Довольно громкое заявление. Можешь для сравнения показать хотя бы пару тысяч символов кода на брейнфаке и на скале? :)

Дорожко вон сагитируй, на мне тестить не надо

По-моему, критерий выбора достаточно прост: если пишешь под Ведро, то бери Котлин и посматривай на Флаттер. Если пишешь веб-сервисы, смысла особого нет в Котлине.

Що таке «Ведро»?

А чому взагалі винайшли Котлін? Які його фундаментальні переваги? Я бачу що Котлін, як і Джава, дві об’єктно орієнтовані мови, то який сенс?

В JetBrains в Пітері один з розробників Intelij Idea зробив власну мову із ML подібним синтаксисом. На початку це ніби навіть був пет проект. Потім компанія почала його просувати на ринку, як виявилось що мови програмування розкручуються за тим же принципом що і будь які іньші програмні продукти, головне зробити щось модним і відомим. Писати статті у видання, робити конференції і виступати там із докладами про продукт і іньщі маркетингові заходи. Скажімо D з багатьох питань дуже цікава мова програмування і разом с тим її не дуже є кому просувати на ринку. Щодо Kotlin принципових відмінностей від Java нема. Все що можна зробити на Kotlin так само можна зробити і на Java і навпаки. Деякикий код на Spring справді виглядає коротшим за Java. Не впевнений що Kotlin загрожує якось Java, скоріше це ще одна альтернатива Groovy і Scala. Як на мене дещо краща за Groovy.

«один раз в Питере...» это все что нада знать что бы не связываться с котлин.

Следуя вашей логике, если посмотреть на кладбище Google то не связываться с технологиями Google.

основатель

Google

выходец с россии — значит спонсирует путина, значит пользоваццо незя.

Не следует связываться с Гуглом, если вы имеете цель сделать нетленку, а не просто заработать капусты. А если заработать — то стоит, а после того как продали то уже их дело что они и куда будут хоронить, пока вы готовите новую вундервафлю на продажу богатеньким буратинам.

вот замечаю, что против котлина выступают только те, кто никогда с ним не работал.

По перше дуже дякую Олександр за такі глибинні запитання!

1) А чому взагалі винайшли Котлін?
Котлін, це нова мова, яка використовує нові підходи в програмуванні і робить багато патернів з Java частиною синтаксису мови. Якщо копнути глибше, таке вже траплялося і раніше. Наприклад спочатку була "тьма«потім все спростили і написали Assembler, потім все спростили і використали Assembler для написання С, потім все спростили і використали С для написання Java, потім все спростили і використали Java для написання Kotlin і я думаю це ще далеко не кінець
... -> Assembler -> C -> Java -> Kotlin -> ...

2) Які його фундаментальні переваги?
Як на мене їх декілька:
null safety
more concise (less boilerplate code)
variable and collection immutability
functional and procedure lang programming style

3) Я бачу що Котлін, як і Джава, дві об’єктно орієнтовані мови, то який сенс?
Так це правда що Java — це об’єктно-орієнтована мова з примітивами. А от Kotlin — це мікс об’єктно-орієнтованої (без примітивів), процедурною і навіть функціональної мови в деякому сенсі (High-Order, Lambdas and Closures). Якщо проблем з Java нема і все подобається — сенсу немає. Якщо хочеться попрацювати з новими технологіями, вивчити нові підходи до програмування, можливо навіть писати менше «boilerplate code» — Kotlin дуже хороший кандидат

Дякую за розгорнуту відповідь.

2) Які його фундаментальні переваги?
Як на мене їх декілька:
null safety
more concise (less boilerplate code)
variable and collection immutability
functional and procedure lang programming style

Я бы это сократил до
* null safety
* more concise (less boilerplate code)
Правда, мне кажется, null safety немного недоделанный, в отличии от Scala 3, но лучше, чем ничего, если вы реально хотите это использовать (не без подводных камней в Котлине). Разе что можно добавить делегаты и инлайн функции/классы для производительности, плюс можно просто реализовывать DSL для Котлина, но то такое.

3) Я бачу що Котлін, як і Джава, дві об’єктно орієнтовані мови, то який сенс?
Так це правда що Java — це об’єктно-орієнтована мова з примітивами. А от Kotlin — це мікс об’єктно-орієнтованої (без примітивів), процедурною і навіть функціональної мови в деякому сенсі (High-Order, Lambdas and Closures)...

High-Order, Lambdas and Closures есть в джаве, хоть и коряво реализовано. Так что кроме синтаксиса + null safety + less boilerplate code я не вижу ни каких преимуществ. И новые фичи там долго разрабатываются, например, Type Classes думают/обсуждают/реализовывают около 7 лет:
* Type Classes in Kotlin?
* «Extension types» for Kotlin
* Compile-time Extension Interfaces

Так что я вижу смысл использовать Котлин только для более чистого синтаксиса и написания DSL для экосистемы/проектов на Котлине. Может быть еще в мобильной разработке (я не эксперт в этой сфере).

Котлин разрабатывали во времена до 8-й джавы, когда в самой джаве никуошеньки с точки зрения синтаксиса небыло.

Удивительно, но и во времена 17й джавы, с точки зрения синтаксиса, так ничего так и не появилось

есть лямбды, есть вары, есть рекорды, есть всякие List.of() итд итп. При пральном подходе тот самый бойлерплейт можно прилично сократить.

есть лямбды, есть вары, есть рекорды, есть всякие List.of() итд итп.
        var l = List.of(1);
        // ...
        try {
            l.clear();
        } catch (Exception ex) {
            System.out.println("котлин ненужон!");
        }

Вау!

-

Теперь var ры ставим вместо объявления типа, а то сонар ругается. И рекорды можно писать чтобы lombok @Data не пользоваться. А так что kotlin-ом Sping Boot подкастомазить (ну или Rx, Play и т.п.), что Java особо не велика разница, только синтаксис другой малость.

а в джаве уже и экстеншины завезли?

вроде нет, хотя хз что там в распоследней джаве, и какие планы на следующие.

Ну главный аргумент мол под андроид до сих пор массово юзают джава 6, а там нету плюшек из современного мира. Вот котлин и создан дать плюшек престарелому куску... Но это всё теория... Джетбреинс создали котлин, потому что могут. А гугл признала его под андроид, как запасной аэродром, вдруг оракл решит прикрыть лавочку для гугла.

Kotlin не нужен, бери Clojure

языки с ГЦ для папуасов, крутые парни пишут сервисы на расте

Clojure не нужен, бери Scala
Scala не нужна, бери Haskell
Haskell не нужен, бери Lisp
Lisp не нужен, бери Assembler
Assembler не нужен, кодируй прямо в машинный код :)

Как бы без аргументации не понятно, чем лучше Clojure — динамической типизацией и полноценной поддержкой ФП, в отличии от Kotlin, который ООП, с небольшой «поддержкой функциональщены», заточенный на «бесшовное» использование его в джаве :)

Підписатись на коментарі