Comments 46
Здравствуйте. А при разработке Android приложений на Kotlin есть такая штука как Hot Reload? Или надо постоянно делать полную компиляцию приложения?

Я из мира фронтенда, не пинайте сильно, если вопрос очень нубский.

Есть Instant Run — он при некоторых условиях может ограничиться дозагрузкой кода в работающее приложение. Подробностей не могу сказать, так как сам им практически не пользуюсь.

Instant Run до сих пор работает криво. Как и hot reload (поправьте, если ошибся с название) под Flutter.
Задумка классная, но реализация пока ещё сыровата… имхо

Мы у себя в компании начинаем использовать Котлин на бэкенде. Показывает он себя очень хорошо. Котлин настолько хорош, что даже, если вы будете писать на нем Java-style код (а вы будете это делать по-началу), то он будет все равно читабельнее и безопаснее :)

Ну во-первых, у нас есть уже не только Pega :) мы еще разработчики девопс инструментов и улучшенной IDE pegadevops.com, правда там пока пишем на Java. У нас сейчас есть ряд проектов, один из которых внутренний, где мы используем Kotlin. pegadevops также в планах переводить на него.

Пишем у себя в стартапе уже полгода на Ktor. Замечательная вещь, намного лучше Spring

"Kotlin как будущее..."?
По моим ощущениям он уже продолжительное время "настоящее"

А я бы сказал, что он уже, возможно, прошлое. С учётом появления Flutter с Dart, на которую судя по всему рано или поздно придется перейти, когда Андроид будет заменён Фуксией. К сожалению сейчас писать под Flutter нельзя на котлине..

Собственно на мой взгляд это единственный недостаток флаттера. Если бы использовался для него kotlin native — было бы просто отлично. Не скажу что дарт плохой язык, но котлину на мой взгляд он все же уступает.
О_о Что я пропустил? Я вроде за флаттером слежу и такого не заметил. Вы не путаете случайно с фуксией? Под нее да, и на свифте вроде как планируется возможность, и на Java + kotlin, и на rust, и еще на чем то вроде… Другое дело что подозреваю это все равно с флаттером придется интегрировать. Либо рисовать свой UI.
Вы ведь понимаете, да, что когда состоится релиз фуксии(если вообще будет да и будет ли под мобилки), то ни один заказчик в здравом уме не будет переписывать с нуля приложение на flutter, возможно, он будет писать новое приложение на flutter, но тут нужно искать разработчиков, которых толком пока нет, а нет их из-за молодости flutter.
Не забывайте: выпуск фуксии не означает мгновенный закат Android. Вспомните, сколько устройств на Android сейчас существует? И что с ними делать, а сколько ещё будет выпущено и т.д, и т.п.
И фуксия поддерживает Android приложения, а значит ничего не изменится для разработчиков.
Вспомните, сколько устройств на Android сейчас существует?

Вспомните сколько устройств существовало на Symbian, и где этот Symbian сейчас (он кстати тоже поддерживал приложения на Java хоть и ME). Закат очень вероятен, к примеру Фуксия еще не вышла, но китайцы один аппарат уже тестируют.
А потом Гугл выпускает свой телефона на Фуксии и весь мир замирает в напряжении…

Есть масса сценариев, где котлиновская null safety не работает. Например, мы вот только что положили в мапу элемент, примерно так:


val map = mutableMapOf<String, String>()
map["foo"] = "bar"

А потом (мамой клянёмся, что "foo" есть в мапе):


println(map["foo"]!!.length)

если не поставить !!, компилятор ругается. К сожалению, null safety не всесилен. Он помогает устранить часть ошибок с NPE, которые возможны в Java, но ото всех ошибок такого рода избавиться невозможно. Справедливости ради стоит так же сказать, что для Java есть статические анализаторы кода и наборы аннотаций, которые позволяют добиться примерно аналогичного поведения (Checker Framework, инспекции IntelliJ IDEA).

Так правильно ругается, если вы ставите
!!
— то это вы должны гарантировать что значение не null. Вы также можете написать свою реализацию которая будет возвращать не T? а T, либо бросать например эксепшн если уж никак найти значение не может а дефолтное отсутствует.
Ну и в вами описанном варианте котлин поможет хотя бы конструкцией вида
println(map["foo"]?.length ?: 0)

В таком случае NullPointer вы не словите и вернете дефолтное значение. Можно конечно и на java написать
map.get("foo") == null ? 0 : map.get("foo")
но сами понимаете. Плюс в котлине можно написать и
println(map["foo"].length)
если это ваша реализация где вы гарантируете T

Я прекрасно знаю, что значит !!.. Иногда?.. не спасает, т.к. для ключа, которого нет в мапе, всё равно нет валидного значения (можно вернуть что-то бессмысленное, но тогда что-то всё равно упадёт в будущем). Ситуации бывают разные, я написал не один десяток тысяч строк на Котлине, и всякого повидал. Мой комментарий ставил целью опровергнуть заявление, что KNPE был брошен где-то в "интеропе с Java". Отнюдь. Котлин не всесилен, и есть куча способов упасть в чистом котлине. Можно даже NPE словить, если пошаманить со статическими инициализаторами или с lateinit.

Ну в общем да, KNPE действительно не только в интеропе может быть брошен, но лично я !!.. применяю только ну уж в совсем крайних случаях. На мой взгляд слишком опасный оператор.
З.Ы. С форматированием!!! у хабра конечно…
З.Ы. С форматированием!!! у хабра конечно…
А вы в <code></code> заворачивали? (Или в `апострофы`, если Markdown включить)
Нет. Но блин, преобразовывать два восклицательных знака в три — мне вообще не приходит в голову зачем это.
Наверное, потому что в русской пунктуации такое сочетание знаков не допускается.
println(map[«foo»]!!.length)

А чего хочется получить таким кодом?
Почему не?
println(map[«foo»]?.length?:0)


Просто немного странно удивляться, если пишешь
throw NullPointerException()

А почему я должен выводить 0 для случая, если ключа нету в мапе? Как я уже ответил другому комментатору, ситуации разные бывают, я просто привёл простейший пример. Могу специально покопаться и поискать места в самом kotlinc, где используются !!, и это вполне уместно.

А почему нет? Единственно верной стратегии нету; жава, к примеру, вернет нул, с++ — добавит элемент с таким ключом и дефолтным value и вернет его, с# выбросит исключение

Иными словами, не очень понятно, почему отсутствие определенного ключа в мапе — это исключение, ведь ваш мап возвращает значение — нулл, и его надо как-то обработать.
дык, использование обьекта из java кода с оператором!!! — это единственный случай, когда выбрасывается такое исключение, насколько я понимаю.
Во всех остальных будет либо IllegalCastException, либо ничего не будет.
Ух ты как хорошо, какая наглядная картинка!

А почему тогда tiobe index показывает, что Java занимает 1 место среди языков, а Kotlin проигрывает даже таким артефактам как Ada и Lisp, занимая 39 место?
Вот кому кому — а tiobe я не очень верю. Правда кому верить — тоже неясно. Tiobe если не ошибаюсь завязан на гуглеж по теме, а лично я гуглю либо по android sdk, либо по java, по фану еще иногда по разным языкам, а по котлину хорошо если несколько раз искал что то. java, python, js и еще многие языки однозначно популярнее котлина, но если говорить об андроид разработке — то исходя из требований котлин как бы не уже популярнее java.
Статистика. Она зависит от того, что и каким образом собирать. Если у меня есть 9 проектов на Java и один новый на Kotlin. При этом Java проекты правлю только когда ошибки возникают, а Kotlin активно разрабатываю, то по статистике у меня Java занимает 90%, а Kotlin — 10%. А вот если собрать статистику по числу новых строчек кода, всё может оказаться совсем наоборот. При этом в первом и втором случае будут одни и те же проекты.
Интересно, чувствуется прогресс в разработке. А интересно, можно ли писать бэкэнд на котлине и насколько это оправдано, а то весь акцент на Андроиде.
Писать бэкэнд можно, пока с небольшой болью, но можно. Надеюсь в скором времени все устаканится, обрастет поддержкой всех фреймверков, а то терпеть Java уже не хватает сил.

На скале можно и под андроид писать. Единственная проблема — скала 2.12 требует java 8, поэтому приходится 2.11 использовать.

Из пожеланий — было бы отлично, если бы веб-фреймворк ktor вышел из альфы и оброс большим сообществом, чтобы Kotlin стал еще ближе к fullstack-инструменту.

Извините, я может что-то упускаю, но ведь разве ktor уже не в релизе (ссылка на maven)? Или есть еще какой-то другой ktor?

С подключением!
А если серьезно, то мне очень нравятся такие статьи в стиле ретро в 2019. Скажите планируются ли статьи по реализации MVP/MVVM и плюсах Clean Architecture?
Я несерьезно же. Вся статья это по факту копипаста JetBrain презентаций 2х-3хлетней давности. Только без конкретики, опыта, без чего-то нового. Просто вода с целью хоть кого-то сподвигнуть на соответствующие вполне конкретные курсы.
Котлину еще рано для проектов которые проходят множество сертфификаций(мед. проекты)так как еще не законченая спецификация(не документация) языка и она не дает проходить множество этапов проверок. Так же нужны knowledge holders для код ревью, а к сожелению, тех-лиды которые имеют по 10+ лет стажа на Java, не очень сильно ходят переходить на Kotlin и пишут по старинке на Java, так как очень часто они имеют влияние.
Only those users with full accounts are able to leave comments. Log in, please.
Information
Founded

October 15, 1998

Location

Россия

Employees

5001–10000 человек

Registered

9 August 2008