Comments 46
Я из мира фронтенда, не пинайте сильно, если вопрос очень нубский.
Есть Instant Run — он при некоторых условиях может ограничиться дозагрузкой кода в работающее приложение. Подробностей не могу сказать, так как сам им практически не пользуюсь.
Мы у себя в компании начинаем использовать Котлин на бэкенде. Показывает он себя очень хорошо. Котлин настолько хорош, что даже, если вы будете писать на нем Java-style код (а вы будете это делать по-началу), то он будет все равно читабельнее и безопаснее :)
Вы пегу как то подкручиваете котлином?
"Kotlin как будущее..."?
По моим ощущениям он уже продолжительное время "настоящее"
А я бы сказал, что он уже, возможно, прошлое. С учётом появления Flutter с Dart, на которую судя по всему рано или поздно придется перейти, когда Андроид будет заменён Фуксией. К сожалению сейчас писать под Flutter нельзя на котлине..
Зато под Flutter можно писать на Swift
Не забывайте: выпуск фуксии не означает мгновенный закат 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.
З.Ы. С форматированием!!! у хабра конечно…
println(map[«foo»]!!.length)
А чего хочется получить таким кодом?
Почему не?
println(map[«foo»]?.length?:0)
Просто немного странно удивляться, если пишешь
throw NullPointerException()
А почему я должен выводить 0 для случая, если ключа нету в мапе? Как я уже ответил другому комментатору, ситуации разные бывают, я просто привёл простейший пример. Могу специально покопаться и поискать места в самом kotlinc, где используются !!, и это вполне уместно.
Иными словами, не очень понятно, почему отсутствие определенного ключа в мапе — это исключение, ведь ваш мап возвращает значение — нулл, и его надо как-то обработать.
Во всех остальных будет либо IllegalCastException, либо ничего не будет.
А почему тогда tiobe index показывает, что Java занимает 1 место среди языков, а Kotlin проигрывает даже таким артефактам как Ada и Lisp, занимая 39 место?
Из пожеланий — было бы отлично, если бы веб-фреймворк ktor вышел из альфы и оброс большим сообществом, чтобы Kotlin стал еще ближе к fullstack-инструменту.
Извините, я может что-то упускаю, но ведь разве ktor уже не в релизе (ссылка на maven)? Или есть еще какой-то другой ktor?
А если серьезно, то мне очень нравятся такие статьи в стиле ретро в 2019. Скажите планируются ли статьи по реализации MVP/MVVM и плюсах Clean Architecture?
и снято, там есть видео от автора.
Kotlin как будущее разработки приложений на Android