Comments 106
Справедливости ради, стоит заметить, что в Java сеттеры и геттеры не обязательны. А в этом конкретном случае с ResponseItem от них не так уж много пользы.
Если потребуется описать только геттеры, то код модельки на Kotlin из кареты превратится в тыкву, сопоставимую с кодом на Java.
Если потребуется описать только геттеры, то код модельки на Kotlin из кареты превратится в тыкву, сопоставимую с кодом на Java.
Завит от того, зачем нужны только лишь геттеры. Если для создания неизменяемой модели, то у Kotlin есть val:
class ImmutableModel(val foo: String, val bar: String = "Опциональные аргументы, Java!")
Если же нужно поместить какую-то логику в геттер, то можно так:
val foo: String
get() = TODO("Implement getter")
Все написанное ниже является сугубо моим мнением.
В последнее время я наблюдаю в нашей области просто катастрофическое число статей и заметок, которые, на мой взгляд, обладают серьезными ошибками в самой их структуре и логике. В частности:
Нельзя доказывать общие утверждения частными примерами.
Если вы берете некоторую систему или совокупность систем и их зависимостей и утверждаете, что для них выполняется правило X, то без рассмотрения всех вариантов, которые вы затрагиваете формулировкой вашего правила, вы не можете это доказать.
Вы можете доказать примерами неверность тезиса, пример:
Тезис: Java лучше Kotlin.
*Ваш пример с моделью, и тем, что она короче и читается лучше.*
Таким образом мы доказали, что тезис Java лучше Kotlin неверен, поскольку Kotlin лучше Java в конкретном случае, представленном выше.
Если же мы говорим:
Почему же Котлин оказался лучше Джавы?
То, чтобы доказать верность этого утверждения, нужно перебрать все варианты возможного использования Котлина и Джавы, ибо если хоть в одном случае окажется, что Java лучше Kotlin, то утверждение неверно.
Эту формулировку можно спокойно заменить на:
«Мне понравился Kotlin, потому что:»
«Использование Kotlin дает преимущество в ряде случаев, в том числе следующих:»
В общем, сузить область применимости вашего тезиса, до тех случаев где он действительно верен.
P.S.
Я вот думаю, статью на эту тему написать, что ли.
Давайте затронем другую животрепещущую тему: что лучше мак ос или винда. Мак быстрее, с малым количеством вирусов и уязвимостей, более стабилен. Но из недостатков то что нужно купить дорогое железо от apple, в то время винда есть и на более дешевых вариантах. Если цена для нас не критична мы выберем мак, но если у нас небольшой бюджет выбор очевиден.
Я могу взять и написать научный трактат на тему: «Преимущества Котлина по сравнению с Джавой». Выложить там кучу сухой и скучной формулировки, но это будет мало кому интересно
А вот тут вы не правы. Для развлекательного чтива под чай с булочкой возможно. А когда стоит выбор в какой язык упарываться рогом тратить сотни часов на обучение, то максимально субъективное чтиво, пусть и кратко-тезисное в самый раз.
«Не все так однозначно»(С) Ибо вам придется платить за лицензию винды, бюджетным вариантом будет компьютер с Линуксом
Прям любопытно будет прочитать и сравнить.
Я не просил вас писать сухой текст. Я просил вас выбирать формулировки, не противоречащие логике вашего повествования.
Смотрите, у вас есть некий опыт работы с Kotlin и Java. Вы, основываясь на нем, поняли, что есть много случаев, когда Kotlin предпочтительнее Java и хотите поделиться этой мыслью с другими людьми, чтобы обратить их внимание на этот язык и, возможно, мотивировать на его изучение.
Это то, что я увидел в Вашем тексте, исходя из вывода, тезисов, вступления.
Если коротко:
Вы обращаете внимание читателя на возросшую популярность языка.
Делитесь личным опытом, таким, чтобы читатели, которые являются основной вашей аудиторией(т.е. те, кто не писал на Kotlin) почувствовали, что они находятся в положении близком к Вашему.
Перечисляете характеристики языка, которые наиболее вам понравились и приводите примеры.
Делаете заключение.
И, все бы было хорошо, если бы не маленькая ошибка:
В какой-то момент вы увлекаетесь и переходите на категоричные заявления, вместо того, чтобы продолжить делиться своим личным опытом.
И более того, допускаете логическую ошибку в своих суждениях, о чем я написал выше.
А так же вводите в заблуждение тех, кто не пишет ни на Kotlin ни на Java, т.к. подразумеваете, что знание Kotlin более полезно (возможно мне показалось, что эта мысль есть в тексте, если что — поправьте), а вот к этому возникают серьезные вопросы, ибо огромная часть нашего кода все еще написана на Java и ее знание для разработки под Android (даже если она не профессиональная, вдруг у вас баг в библиотеке, которую вы используете) — очень важно.
ибо если хоть в одном случае окажется, что Java лучше Kotlin
я вот честно не могу придумать хоть одного кейса где java лучше kotlin. Ситуаций где они окажутся равны друг другу — это да. А вот что бы java была лучше и удобнее… Хотя возможно я чего-то не знаю. Если вы сможете предложить подобный кейс — будет интересно.
то утверждение неверно.
не стоит мыслить абсолютами. Если в 9 из 10-ти ситуаций kotlin лучше — то он лучше java. Это работает по сравнению плюсов и минусов. Так же у разных кейсов есть разный приоритет. К примеру null-safety — жирный плюс, с которым сложно считаться. Если какую-то редкую задачу проще решить на java (что сомнительно), то приоритет этого явно ниже. Ну думаю вы поняли идею.
Checked exceptions
Primitive types that are not classes
Static members
Non-private fields
Wildcard-types
Важно ли это — не думаю
По приведенной вами ссылке можно перейти по каждому пункту и выяснить почему это отсутствует. Там и мотивация почему так, и какая альтернатива… возможностей у вас меньше не стало, да и не забывайте что у Kotlin должна быть совместимость c Java так что в целом отсутствие чего-то не означает что вы не можете чего-то сделать.
В целом я считаю что отсутствие перечисленного это плюс. Ну и сравнивать таким образом языки слишком примитивно.
И кто знает, не поспешил ли котлин в погоне за модой и не ждет ли его та же печальная судьба?
очень неспешно меняется и зачастую не в том направлении, в котором хотелось бы.
тут на самом деле все очень просто. Для того что бы эволюционировать — нужны эксперименты. Kotlin, Scala и некоторые другие JVM языки являются своего рода экспериментами. Определенные идеи могут спокойно перетечь в java, подтолкнуть его развитие.
Экспериментировать же с самой java весьма дорого, так как язык должен иметь обратную совместимость и неудачную фичу, которую вроде и продумали но не предугадали последствий, выпилить уже не выйдет.
Да вы что, это же не buzzword-oriented подход!
*Java, эти аргументы неубедительны
*перейду на Kotlin прям сегодня
*я уже давно на Котлине
*Возможно начну кодить на Котлине через месяц другой
Жизни за МКАДом не существует? =)
У нас в городе ровно одна вакансия по Kotlin, и 162 вакансии о Java.
Так что я сейчас собираюсь учить именно Java. Потому что, увы, практически исчезли чистые вакансии по PL/SQL, и в основном требуют PL/SQL + Java.
PS посмотрел Москву: 77 вакансий по Kotlin, против 1770 по Java и 1116 по C#.
Раньше такого было намного меньше, а сейчас таких вакансий все больше с каждым днем. Становится очевидным что Котлин набирает популярность. Это как Свифт на ios. Был Objective C вроде нормальный язык, но появился новый Swift, и через какие-то пару лет он уже отъел половину рынка. Не исключено что скоро это повторится и с андроидом.
hh — не показывает вакансии "чисто по Котлин", он показывает ВСЕ вакансии в которых это слово упоминается, а их в Москве 77 вакансий.
Swift полностью поддерживается Apple, включая документацию, обучающие материалы и примеры. А насколько Google поддерживает Kotlin, кроме возможности создания на нём проектов в Android Studio?
На текущий момент комьюнити Котлина по численности сильно уступает комьюнити Jav
Документации на Котлин действительно немного
Документация по Котлину исчерпывающая, на сайте производителя. В слак каналах поддержка осуществляется самими разработчиками. На текущий момент 13447 пользователей, комьюнити очень дружелюбное и помощь поступает незамедлительно.
Не просто по Kotlin надо, а по Android SDK. И официальную документацию, а не Hello World-ы на коленке.
Честно говоря когда я делал трекер мне требовалась документация на уровне синтаксиса, а части которые относились к Android SDK я писал по аналогии с Java, и при этом не возникало никаких проблем
Один из первых результатов его работы — Kotlin code style
А это кто?
я вот честно не могу придумать хоть одного кейса где java лучше kotlin. Ситуаций где они окажутся равны друг другу — это да. А вот что бы java была лучше и удобнее… Хотя возможно я чего-то не знаю. Если вы сможете предложить подобный кейс — будет интересно.
секвенсес не могут в параллелизм
стримапи может в параллелизм
но это с точки зрения сахара
Нету Getter'ов и Setter'ов
Вы серьёзно?
Во-первых, они есть. Во-вторых, в котлине геттеры и сеттеры вовсю используются неявно и выглядят как обращение к переменной.
Единственный стоящий аргумент — про более короткий код, но пример к нему ужасен.
Почему бы не рассказать про автовывод типов, extension методы и прочие приятные штуки?
Почему бы не рассказать про автовывод типов, extension методы и прочие приятные штуки?
Про это уже только ленивый не писал)
NPE — это легенда в мире программирования. И в Котлине его просто нету еще до компиляции возможные места возникновения NullPointerException считаются синтаксической ошибкой. Вас просто заставляют сделать проверку на null.
Вот тут Вы слукавили, замечательно прилетает с джавы.
Другой вопрос, хорошо ли это (т.к. почти во всех статьях восхваляют данную фишку). Возможно, пусть прога лучше со свистом грохнется и покажет стектрейс, с исправлением ошибки за минуту, чем прога будет работать, но работать неправильно и хрен ты эту логическую ошибку найдешь.
Таких статей бесчетное количество. Например https://academy.realm.io/posts/oredev-jake-wharton-kotlin-advancing-android-dev/
4. Код на порядок короче
Слышали про Lombok? С ним ваш пример на Java приблизится к Котлину
3. Отсутсвие NPE
Лукавство. Есть механизмы по его предотвращению, но сам по себе NPE есть и никуда не делася
1. Отсутсвие точек с запятыми
Тут я сдаюсь и перехожу на Котлин )
Если серьезно, то почему бы не написать про действительно интересные вещи типа корутин, extension, легкости написания dsl и т.д.?
Честно говоря еще неделю назад я тоже думал что в нем нету ничего такого. Но виной был страх что-то менять и было немного лень напрягаться.
Да ни в чём.
Синтаксис простой (на мой взгляд проще, чем в котлин).
- В котлине есть специальный синтаксис для определния геттеров-сеттеров, в скале это просто методы типа
def x =...
,def x_=(...)
- В котлине инлайн-функции втащены на уровень языка. Всё бы ничего, но в некоторых случаях это влияет на возможность использовать слово return.
- В котлине есть более сложные типы (например, IntArray.() -> Unit). Впрочем., в скале есть path-dependent types, которые используются очень редко и отсутствуют в котлине. Синтаксис:
objectName.TypeName
- В котлине есть nullable типы. В скале это решено с помощью класса Option из стандартной библиотеки.
- В котлине, чтобы определить оператор +, надо написать operator fun plus(...), в скале достаточно def +(...) и это самый обычный метод.
- В котлин можно переопределить только несколько операторов, в скале — почти всё, что захочется, хоть ||, хоть !!!
- В котлине методы в одну строчку принято определять как fun a() = ..., в несколько строчек
fun a(){...}
В скале принят только первый вариант. - Обращение к элементу массива и вызов функции — в котлин разные сущности, в скале и то и другое — круглые скобочки, массив являетя функцией Int=>T.
- В котлин есть extension методы. В скале вместо это используются implicit преобразования, которые дают на порядки больше возможностей (С точки зрения скалы преобразование типа Int -> Long является неявным)
Получается, что в скале идут по пути обобщения и упрощения синтаксиса, а в котлине добавляют маленькие удобные костылики. С костыликами хорошо, пока не захочется сделать что-то необычное.
Стандартная библиотека у скалы своя. Более мощная, чем в джаве и огранично вписывается в язык. Впрочем, написать свою коллекцию будет сложнее. Можно использовать джавовские коллекции.
Фреймворки — там могут очень много навертеть, используя систему типов на полную катушку. Вряд ли это недостаток языка.
Про тулзы — не знаю что сказать.
На каждом втором русскоязычном бложеке по триста статей уровня «почему котлин в триллион раз лучше жавы, начинайте писать уже сейчас!!1», кликбейты про «новый основной язык разработки под ведроид» и просто откровенная реклама.
Когда тебе так настойчиво запихивают в рот какую-то «вкусняшку», непроизвольно возникает тошнота.
С другой стороны только так что-то может получить популярность, увы. Скил фильтрации информации подразумевает ее анализ а не игнорирование.
Реклама может содержать описание качеств продукта и оставлять пользователю выбор использовать его или нет — если продукт хороший пользователь сам придет к «продавцу». Если бы во всех этих статьях было бы только описание особенностей языка и то какие проблемы он решает — я бы наверняка попробовал на нем писать. Это была бы хорошая реклама которая уважает пользователя.
Есть другая реклама — полные императивных посылов крики «покупай, пользуйся, делай!!11» без единых описаний почему я должен пользоваться чем-то. Это реклама стиральных порошков, бытовых товаров и прочьего ширпотрепа — попытка перекричать голос разума яркими метафорами и безудержным восхвалением. Вот такая реклама у котлина и такая реклама вызывает только тошноту, потому что авторы считают идиотом неспособным к критическому мышлению которого нужно подтолкнуть в сторону «правильного» продукта.
Котлин работает поверх JavaKotlin, как и Scala, как и Java компилятся в JavaByteCode под JVM потом интерпретируется ведроид компилятором под DVM. Не очень понял что вы имеете ввиду?
тащить весь язык со всеми его библиотекамиБоюсь спрашивать, но куда и за какое место вы хотите тащить языки?
работает поверх Джавы
Что вы все заладили, что в вашем понимании это означает? Я то думал это предусмотренная компилятором обратная совместимость с Java, в Scala тоже самое, потому что котлин это попытка JetBrains написать свою скалу, и что то мне подсказывает что писали они ее не с 0.
байт-код javascriptЧто простите? (facepalm) В какой из множества вариаций javascript — bytecode, или они заставили все браузеры перейти на оди и тот же компилятор?
Складывается впечатление что у людей напрочь отсутствует понимание, того как работают языки вне красивых кнопочек и подсветок в их IDE…
Kotlin, как и Scala, как и Java компилятся в JavaByteCode под JVM
Котлин написан поверх Java и в стандартной библиотеке, к примеру, не имеет своих коллекций, потому что он использует стандартные коллекции из Java. Если посмотреть к примеру ImmutableList — в байткоде это будет стандартный ArrayList из Java. И большая часть библиотеки Kotlin — это extension-функции над существующими классами Java. Поэтому рантайм и библиотека Котлин занимают в разы меньше места, чем аналогичный от Скалы.
Боюсь спрашивать, но куда и за какое место вы хотите тащить языки?Юморок на троечку. Посмотрите структуру apk — основную часть занимает dex-файл(ы). А еще поищите про dex-limit, почитайте вопли юзеров в Play Market, недовольных лишним мегабайтом размера приложения, и вы поймете, что Скала существенно увеличит размер установочного файла.
А чем Groovy плох???
Ну что, вам листать не надоело?
Чтобы избежать бойлерплейта, можно использовать lombok: projectlombok.org/features/all
1 Java
2 писать код на Java
3 проверки на null в Java
4 геттеры и сеттеры в Java
5 смотреть как работает написанный код в Java
…
этот список могу продолжать бесконечно.
Меня умиляют высказывания вида «мы сможем меньше писать, язык сделает за нас <указать что сделает>». Мне не нравится, когда кто-то за меня что-то делает, да и выглядит все это, будто «пчелы против меда», ну как мы, разработчики, не будем писать код?
Меньше писать, выведение типов, прочие плюшки, очередной JS получается, не так ли?..
Обленились? Деградируем?
P.S. есть вопрос, который мучает меня последние пару лет, почему никто не пытается переписать C? а если пытается, то почему не кричит о том, что «мы сделали лучше чем C, айда все на нем писать»?
почему никто не пытается переписать C? а если пытается, то почему не кричит о том, что «мы сделали лучше чем C, айда все на нем писать»?
В 1983 году именно по этой причине был создан C++.
И попытки продолжаются, только теперь пытаются "переписать" и сам С++. (:
Наверное потому что Джава — лучше, проще, быстрее, и что-то делает за вас. Упрощение != деградация. Если вы считаете что проще — это хуже, тогда пойдите пешком в Барселону, да это сложнее чем полететь на самолете и через часиков 5 приземлится, но вы же считаете что проще это хуже.
Наверное потому что Джава — лучше, проще, быстрее, и что-то делает за вас. Упрощение != деградация. Если вы считаете что проще — это хуже, тогда пойдите пешком в Барселону, да это сложнее чем полететь на самолете и через часиков 5 приземлится, но вы же считаете что проще это хуже.
Не утрируйте, я с удовольствием пишу на асме там, где это удобно. Я с удовольствием пойду в Барсу пешком, мир посмотрю.
Упрощение != деградация
Если речь идет о смене Java на язык, предполагающий смену платформы, я согласен, в остальном, вы не получаете ощутимого преимущества при миграции на котлин.
будто «пчелы против меда», ну как мы, разработчики, не будем писать код?
А вам платят за код? Ну тогда ладно...
Вы все еще кодите на Java? Пора измениться