Mail.ru Group corporate blog
Development for Android
Kotlin
Comments 46
+3
Здравствуйте. А при разработке Android приложений на Kotlin есть такая штука как Hot Reload? Или надо постоянно делать полную компиляцию приложения?

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

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

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

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

0

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

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

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

+2

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

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

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

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


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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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