Вы видите копию треда, сохраненную 30 октября в 01:53.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
>Что имеем:
+Современный синтаксис (реально удобный).
+Совместимость со всей jvm инфраструктурой.
+Возможность писать статический DSL прямо на самом языке.
+Удобные лямбды и наличие простых функции.
+Удобный тулинг в том числе и на бесплатной IDE (комьюнити версии)
+Возможность нативной сборки, сборки в js, андроид и ios.
+Корутины
>Онлайн редактор (показать код или просто что-то потестить)
https://play.kotlinlang.org/
>IDE - среда разработки.
Бесплатная community edition - обычно более чем достаточно (и работает шустро), но можете попробовать триал-версию.
https://www.jetbrains.com/idea/download/
>Официальный сайт и там же чтиво
https://kotlinlang.org/docs/reference/
>Тоже с переводом (на первый взгляд, ру-перевод впервые выглядит не заброшенным):
https://kotlinlang.ru/
>Котлин в примерах
https://play.kotlinlang.org/byExample/overview
>Koans
https://play.kotlinlang.org/koans/overview
>Try Kotlin (пробуй и кодь)
https://try.kotlinlang.org/
>Knowledge map
https://hyperskill.org/knowledge-map/209
>Awesome (либы близкие к kotlin, но не стоит забывать про java решения)
https://kotlin.link/
или
https://github.com/KotlinBy/awesome-kotlin#libraries-frameworks-web
>kotlin для питонистов [eng]
https://github.com/Khan/kotlin-for-python-developers
>+Современный синтаксис (реально удобный).
>+Совместимость со всей jvm инфраструктурой.
>+Возможность писать статический DSL прямо на самом языке.
>+Удобные лямбды и наличие простых функции.
>+Удобный тулинг в том числе и на бесплатной IDE (комьюнити версии)
>+Возможность нативной сборки, сборки в js, андроид и ios.
>+Корутины
+Вендорлок от жыдбрейнс
+Работает поверх джавы, можно легко пересесть с игрушечного языка на нормальный
Почему джавист плачет за маской, но текст вроде как за джаву? Шизофазия профдеформация у джавистов?
Зачем он нужен, когда запретили вижуал студио? Нугет еще не забанен?
>Современный синтаксис (реально удобный).
Groovy.
>Совместимость со всей jvm инфраструктурой.
Groovy.
>DSL прямо на самом языке
Groovy.
>Удобные лямбды
Groovy.
>Удобный тулинг в том числе и на бесплатной IDE
Groovy.
>Возможность нативной сборки
GraalVM.
>сборки в js
ClojureScript.
>андроид и ios
Flutter.
>>105760
>Вендорлок
Это окончательно перечёркивает всё перечисленное автором.
>Но на картинке джавист притворяется котлом
Вот, начинает доходить потихоньку. Вы по сути те же джависты, только синтаксический сахар поверх прикрутили, гордо именуя крутым языком, волосы покрасили и тыквенный раф пить начали, но основная суть не изменилась
>котлин
Как-бы нахуй не нужен. Тем более елизаров и жемеров свалили, а поддержка в IDE не дотягивает и даже до сотой части того, что предлагает джава плагин в IDEA. Был бум котлина где-то 2-3 года назад и даже в сбере (сбербучую, кста) писали что-то на котле, но ныне все переписали на последнюю джэву, т.к. там уже есть все нужные фитчи и не нужно ебаться с корутинами, которые все равно почти никто не умеет правильно готовить
Там у них отладчик проприетарный и прибит гвоздями к обоим visual studio (code). Что как бы намекает на лукавость кроссплатформенной разработки и честного попенсорса
Но плачет джавист? Типа, за эти годы он пытался подрожать котлину, но так и остался позади? Или что?
Кстати, с появлением котлина, джава стала сдавать позиции в tiobe. То есть, забрав рынок мобилок, джава оказалось тырпрайзной, никому не нужной пустышкой? Теперь я стал понимать параллель с коболом.
Честно не понимаю какой смысл писать на джаве, когда есть котлин, это как писать на вижуал бейсеке вместо шарпа. Или на объектив-си вместо свифта.
>Groovy
Динамикодресня.
>Вендорлок
С каких пор удобство стало вендерлоком? Хочешь блокнот - бери блокнот.
Жабаскуф, спок. Тут аргументация даже не нужна, когда от жабы буквально рвотный рефлекс. Не трясись, твой язык морально устарел, гибкие зумеры - синьеры скоро забудут о твоем языке, т.к. все новые проекты пишут на go/c#/kotlin/python/elixir/rust, что угодно, только не джава.
мимо KMP господин
Проиграл, жиза
Не думаю, что c# кому-то нужен, тоже старое перепичканное говно, где дефолто-стантарт это только либы мс, а вне этого мало кто пишет попенсорсное.
Хотел скачать старую комьюнити версию вижлы для старого ноута чтобы в дороге потыкать, но был послан нахер за 7 винду.
Продвигать винду через лок бесплатной ide, верх тупости, такое придумать могли только зумеры.
684x960, 0:08
>go/c#/kotlin/python/elixir/rust
Точнее так: go/python/elixir/rust, что угодно, только не JVM и C#.
Экзотические помои в том числе и раздутый питон.
JVM мир богат и вокруг него много корпораций, в этом мире никогда никто не возьмет верх и не начнет доить юзеров, jvm языки так же свободны и сильны как и С/С++.
Хера у жабадауна бомбит, если котлин делает его jvm сильнее.
Думаешь на котлине полную миску насыпят?
>котлин делает его jvm сильнее
На самом деле нет. Это как со скэйлой, которая померла. Но она хотя бы после себя оставила тормозной спарк и кафку. Спарк еще где-то используют, а кафку переписали на джэву, лол
Двачую тебя, братишка. Вот прям Groovy реально недооценён. В последнее время его даже принято обсирать почём зря. А он хороший. Как дополнение к Java он прекрасен, да и самостоятельно тоже.
Пойди да сделай, потом расскажешь что получилось
>В последнее время его даже принято обсирать почём зря. А он хороший.
Потому что динамо дристня уровня ЖС. Но в ЖС это поняли давно и начали делать статическую типизацию. А вот говноедов которые любят груви понять невозможно.
Ты же не удивляешься, что кто-то на петухоне хуярит? А Groovy вполне можно компилировать статически при желании, в производительности будет на уровне Java при той же лаконичности.
Тем не менее пишут, еще и в промышленных масштабах
>Ты же не удивляешься, что кто-то на петухоне хуярит?
Вопрос не в том, кто и как хуярит, а в best practices. Для фронта сейчас best practices использовать TypeScript, для питона 484.
>А Groovy вполне можно компилировать статически при желании, в производительности будет на уровне Java при той же лаконичности.
И как мне сделать так, чтобы в грейдл скриптах нормально работали подсказки по коду?
Какая написана на java + Scala.
Почему идея говорит Redundant 'asSequence' call
Мне говорили, что для последовательных преобразований надо последовательность использовать, которая как stream в жабе работает.
А, это потому что groupBy мапу возвращает, там же никак не применить всё за один проход
>И как мне сделать так, чтобы в грейдл скриптах нормально работали подсказки по коду?
Явно указывай типы, вот например для тасков и конфигов
Почему люди добровольно соглашаются писать на языках с динамической типизацией? Это же прямой путь к багам.
Только потому что какие-то "персонажи" сделали тот или иной язык популярным и теперь тот же питон стандарт в научной среде. Новичок не выбирает на чем ему писать, долго пишет, привыкает что говнокод это норма, что баги это норма, что проще написать самому, чем разобраться в чужом и он начинает это говно ещё другим предлагать ведь раз он ест значит и другим нужно попробовать.
Груви - это язык со статической типизацией, ты не можешь переменной присвоить значение другого типа.
Это так же язык с неявной типизацией, так же как и Котлин, где можно все на варах сделать, кроме разве что возвращаемого значения функции.
Точнее он "optionally typed", как и джава, как и котлин
Через defы можешь инту присвоить строку, но это все равно что в джаве писать на обджектах, а в котлине на эни.
Этот код рабочий в котлине:
var b: Any = 2;
b = "adwd"
А этот в джаве:
Object a = 2;
a = "adawd";
Но если ты явно задаешь тип переменной, то груви так же выдаст тебе ошибку компиляции
>Жесть, я не думал что такое будет валидно
Нормальный код. Просто подставь туда, более осмысленный тип:
CharSequence name = "Duke";
name= new StringBuilder(name);
System.out.println(name);
Полиморфизм, все наследуются от одного родителя и к нему могут быть приведены.
У котлина есть еще специальный нижний по наследованию тип, там есть кейсы, но без гугла не вспомню.
Ты с обжектом мало что можешь сделать, там хэши и приведение строки и примитивы синхронизации (в котлине выпилили).
Так что причем тут твой петухон, типизация не теряется, не путай полиморфизм с динамикодресней.
Ты можешь привести обжект к нормальному типу через перебор
if (drisnya is Manager) {
drisnya.doNothingAllDay()
}
Так что я вполне могу представить программу всю написанную на обжектах и будет оно выглядеть на питоновский скрипт
Ты проверил на тип и работаешь с ним, динамикодрисни не случилось, а если случиться, то мистер эксепшен тебе объяснит почему ты не развиваешься как программист и путаешь полиморфизм и динамикодресню.
А вот в квази-кроссплатформеном шарпе есть тип дайнемик, видимо кейсы бывают
Даже если спуститься до уровня твоего интеллекта и попробовать использовать как динамикодресню, то лучше когда есть такая возможность в типизированном языке, чем будет симуляция типов в динамикодресне.
Лол, тебе говорили что ты душный?
>Так в питоне ты тоже можешь проверить тип переменной
Но не можешь ограничить тип переменной. Т.е. в джава/котлин ты говоришь, что тип Iterator и компилятор с рантамом тебе это гарантируют. А в питоне, у тебя только хинты.
Там проверка и приведение типа, котлин просто сахарит это место.
Кстати, поймал очень приятных трах на час в питоне, когда по ошибке присвоил в существующую переменную и динамикодрисня вежливо это съела, создав плавающую ошибку.
В старой жабе тебя хотя бы отругали за другой тип, но в современных языках или практиках, переменные делают иммутабельными.
Типизация, даже кривая как в го, будет куда лучше потому, как проверка на этапе компиляции, а не в рантайме, в ветке if'ов, где крашится в лунную ночь, когда цветет сакура.
Языки без статической типизации это самотыкающий велосипед, но ведь пишут на них что удивительно. Питон повсюду
Писал промышленный код, с phpdoc для типизации (давно еще), все равно заставляли тесты писать и получалось, что ты и в функции чекаешь чтобы лишнее гавно не прошло, потом еще тесты пишешь и тоже по кругу одно и тоже проверяешь и это затрахивает.
Так что можно, но нафиг.
Всё правильно делали. Лучше заехать инженера чем потом читать про очередной упавший самолёт
>но ведь пишут на них что удивительно. Питон повсюду
Смысл в том, чтобы нормально писать на динамикодрисне, нужно три раза делать одно и тоже. а не про покрытие тестов
Так хоть какой-то пиар языка и (возможно) придут хорошие разрабы и напишут либы... Надеюсь...
>и вообще, может ли существовать геймдев на котлине
Не только может, но и уже существует
https://github.com/utopia-rise/godot-kotlin-jvm
На Kotlin можно же писать для Java ME? Только платформа похоже совсем мертвая.
На Android можно запускать такие игры через эмулятор.
> Геймдев на котлине
Без шансов. Уже есть C# для Unity и Blueprints/C++ для Unreal Engine. Остальные движки представлены на рынке в виде нескольких процентов.
Да и Unity практически не используется в профессиональном геймдеве. В основном инди разработчиками.
Открой любой сайт с вакансиями и обнаружишь, что 60 % это юнити и 35 % это анриал. Потом открой стим дб и отфильтруй игры с 10 000 отзывами по движку и увидишь аналогичные результаты. Игры с 10 000 отзывами это успешно-коммерческие игры.
А возможно портировать kotlin на .NET? Или это очень сложно?
Да нет, не так уж сложно, но зачем?
Ты можешь написать бэкэнд для К2 компилятора, как он есть для LLVM (https://github.com/JetBrains/kotlin/tree/master/kotlin-native) или JS (https://github.com/JetBrains/kotlin/tree/master/js), что я бы сказал сложно, куда сложнее чем просто писать на 2х языках. Но возможно.
Но если ты спрашиваешь в разрезе геймдева - учти что в юнити неполный С#, насколько я знаю он не поддерживает некоторые фишки как LINQ например.
Но имхо, если ты идёшь в геймдев, то язык очень сильно теряет значение, в том смысле что тебе все языки геймдева так сильно интегрированы с движками, что это по сути свои отдельные диалекты, где есть правила что и как нужно делать конкретно в этом движке. Так что я бы на переиспользование опыта сильно не рассчитывал.
Два чая
Сам /зк сдох, там топовые темы ели живые, я сам отсюда ливнул, ибо моча трет посты и банит просто от фазы луны, (кстати, особенно в жабо треде). Теперь это раздел двача напоминает шизо-загон из 1,5 инвалида пытающиеся вечно вкатиться.
мимо оп первого треда
Шарп там на правах скрипта не боле, есть плагины и на котлин, просто вкатываться, возможно, будет проблемно, а так без разницы чем апи дергать, там вообще древний дотнет и шарп.
Был проект, один раз затух, потом возродили вроде, но кажется что затух снова.
Первая ссылка в гугле
https://discuss.kotlinlang.org/t/kotlin-for-net/12801
Смысла в этом не очень много, но шарп выглядит уже на фоне котлина древним куском говна
Ну я недавно нашел https://github.com/anilbeesetti/nextlib библиотеку. Подключает ffmpeg к андройдовскому media 3. Очень удобно, теперь можно не искать, как бы hevc запускать на андройде
И какой вес у этой зависимости?
Я накачал тонну видосов, а 98% из них в hevc....
Надо сделать свой плеер под это дело т.к. надо еще доп.инфу выводить.
Вес хз, пока не смотрел. Тупо нашел, завтра смотреть буду и тыкаться
Я думал, что они обратно совместимы с h.264. Просто не забывай про размер, а то мы также всякого добавили в ЛИБУ, а потом нервно убирали когда заказчик захо ел размер дистрибутива в 10 раз меньше
К сожалению, нет, не совместимы. А про размер спасибо, совсем забыл про это
Котлин кал, настолько лаконичен, что просто нахуй нечитаем
Пример в студию
Там вроде обертка над нетти, ничего проблемного не ожидается.
По гига-чад тестам не так все быстро, но зато даже сорцы нетти читаемы (оч давно в это долбился, никакого говно-магического бинаря, а если читаемо, то все гибко).
хотел говноигрушку для браузера сделать, дергать DOM как-то напрягает
Таблетки пей
Спасибо, как раз хотел начать пилить свой стартап.
А то, что он не blazing fast пофиг. Лучше стабильность и читаемость, чем выжигать глаза об rust/c++.
Разве что Андроид.
Ну и в целом - вы заебали! На беке Котлин это Джава + вируальные потоки + МНОГО САХАРА. Любой нормальные джава разраб справится.
Всё плохо, котлин только в андроид разработке нужен, а там вкат закрылся ещё в 2023
"Вкат закоылся", типо, для косакеров с курсов от СкиллКокса или для любых, не мидлов?
А банкам, мобильные приложения конечно же не нужны.
1) Получаю, например, от сервера описание 250 товаров в json. У каждого товара все описание в строках, одна из которых URL картинки. Без кэширование пикч бессмысленно работать. Пока единственная идея это хранить скаченые пикчи файлами в отдельной папке, и проверять наличие пикчи перед скаичванием по URL. Вообще я в правильном направлении иду?
2) Как хранить данные json от запроса? Я пока сложил их так (Item одна единица, Items массив данных):
>sealed interface Data {
>data class Item(a: String, b: String, URL: String)
>object class Items () { var elements = MutableListOf<Item>() }
<}
3) Зачем передавать данные для отрисовки через Flow, если я могу просто передать данные в аргументе функции компоуз? Не осилил философию флоу, ибо он показался мне оверхедом.
>@Composable
>fun Draw(arr: Items()) {
>LazyColumn() {}
>}
4) Есть в сети годные гайды как увеличить производительность кода? Сеть хромает, телефоны средние, и работе будут до 300-1000 сложных элементов в списках, так что каждый мегабайт важен. То что надо где можно использовать val вместо var, object вместо class, Imutable и Stable, это я понял. Нужна аналитика по тому насколько одни способы хранения данные эффективнее других, и какие объекты, в частности канвасы, в байткоде быстрее исполняются.
1) Получаю, например, от сервера описание 250 товаров в json. У каждого товара все описание в строках, одна из которых URL картинки. Без кэширование пикч бессмысленно работать. Пока единственная идея это хранить скаченые пикчи файлами в отдельной папке, и проверять наличие пикчи перед скаичванием по URL. Вообще я в правильном направлении иду?
2) Как хранить данные json от запроса? Я пока сложил их так (Item одна единица, Items массив данных):
>sealed interface Data {
>data class Item(a: String, b: String, URL: String)
>object class Items () { var elements = MutableListOf<Item>() }
<}
3) Зачем передавать данные для отрисовки через Flow, если я могу просто передать данные в аргументе функции компоуз? Не осилил философию флоу, ибо он показался мне оверхедом.
>@Composable
>fun Draw(arr: Items()) {
>LazyColumn() {}
>}
4) Есть в сети годные гайды как увеличить производительность кода? Сеть хромает, телефоны средние, и работе будут до 300-1000 сложных элементов в списках, так что каждый мегабайт важен. То что надо где можно использовать val вместо var, object вместо class, Imutable и Stable, это я понял. Нужна аналитика по тому насколько одни способы хранения данные эффективнее других, и какие объекты, в частности канвасы, в байткоде быстрее исполняются.
1. Для кеширования пикч и прочих манипуляций с фото можешь юзать https://coil-kt.github.io/coil/ Coil (он работает с Compose, в доке есть отдельное под это)
2. Если ты говоришь про хранение в UI, то там юзают UiState. Я бы разделил на Item и ItemsList, чтобы не путать, где список и где отдельный объект.
3. Флоу это горячий поток, который позволяет менять данные даже после отрисовки UI. Он автоматом обновит нужный тебе Ui объект (у нас же компоуз, а он как конструктор) и даже юзера уведомлять об "новых данных" не надо, чтобы он обновил Ui. Он уже сразу увидит их.
4. тут не смогу ответить :( Можешь попробовать https://habr.com/ru/articles/796437/ и https://habr.com/ru/companies/ozontech/articles/742854/ . Еще хороший контент на счёт оптимизации есть у Philipp lackner https://www.youtube.com/@PhilippLackner
>Coil
Какая годная штука!
>UIState и Флоу
В виду простоты приложения использую более простой подход. Сделал простой класс для навигации и имею функцию, которая через when вызывает конкретный экран/функцию. Данные у меня не мутабельные, и хранятся вне компоуза, просто в массиве дата классов. Правда пока решил слепить в кучу класс навигации, название экрана, и placeholder для данных. Это чистый анти-паттерн, от которого многие начнут хмурить брови, но я вам скажу что если вы будете писать по 50+ экранов так как доки завещали, то вы быстро устанете
fun Draw(nav :Navigator, data: Models(), screenTitle: String)
Пока у меня все в одном
fun Draw(meta: MetaClass)
И данные в placeholder я не чищу, а просто перезаписываю на новые когда получаю новый json. Это бизнес логика, требующая быстрой расширяемости при максимально примитивной архитектуре, и чтобы за пару минут объяснить коллегам питонистам свои магические пассы в приложении.
Буду смотреть
>Пока единственная идея это хранить скаченые пикчи файлами в отдельной папке, и проверять наличие пикчи перед скаичванием по URL.
Андроид? Там же у каждого приложения своя база есть, в ней и храни.
>4) Есть в сети годные гайды как увеличить производительность кода?
Тебе сначала нужно померить где именно производительность страдает, а не вслепую оптимизировать.
Если сеть хромает - и большие списки, логично асинхронно подгружать данные только для тех элементов списка что юзер видит. Ну и пережать картинки на сервере/сделать отдельные превью картинки, чтобы меньше загружать.
а вот это
>val вместо var, object вместо class, Imutable и Stable
в твоём случае ничего не сделает, я вообще не уверен в каком случае это хоть что-то сделает
иммутаблы - так это точно просадка производительности, но наверное все же не на твоих объемах
Спасибо! Все что сложнее формошлепства на компоузе не без подводных. Неспешно прощупываю кэширование пикч. Бодался с Койлом пока не обнаружил что начиная с 28 (вроде) сдк http уже не работает, и требуются https ссылки. Койл, самая популярная библиотека по кэшированию пикч из сети котлина, тупо игнорирует неприятное и работает не возвращая ошибки при сетевых ошибках. "Нет файла по адресу в сети, да и хуй с ним", решили разрабы. Аж самописный костыль вкрутить захотелось!
>3145970
>Андроид? Там же у каждого приложения своя база есть, в ней и храни.
На этот функционал с БД нужно время и причина. Достаточно скачать пикчу по URL, если она еще не скачивалась в R.drawable. Некоторые пикчи так сурово зашакалены, что запись в БД будет есть в разы больше места чем сама пикча весит. Зачем тогда БД? Чтобы что?
>нужно померить где именно производительность страдает, а не вслепую оптимизировать.
Пока получилось написать как получилось, плохенько, а потом уже стал урезать избыточную мутабельность и наследование. Как ни странно, увеличение количество классов и их инстансов заметно снижает скорость кода. То же самое можно сказать о стейтах. Обвесил функции @Stable и @Immutable где возможно, но не знаю что поменялось лол.
>иммутаблы - так это точно просадка производительности, но наверное все же не на твоих объемах
Есть данные по иммутаблам? Пока что я нахожу в интернете только инфоциганские методички без бенчмарков или отсылок к докам явамашины. То-есть буквально аргументация "траст ми бро".
1. https://android.libhunt.com/coil-alternatives
2. Какой дебил будет грузить картинки в базу данных? Используй кеш приложения (папка data в android) в качестве хранилища и просто храни в бд ссылки на эти самые картинки, лол.
>Есть данные по иммутаблам? Пока что я нахожу в интернете только инфоциганские методички без бенчмарков или отсылок к докам явамашины. То-есть буквально аргументация "траст ми бро".
По пробуй в цикле создавать Integer`ы, а потом int`ы, и сравни разницу. Вот Integer`ы как раз иммутабельны. Тут суть не в иммьютаблах как таковых, а в том что они порождают большой поток аллокаций/мусора (но на болшом объеме данных конечно). А это всегда хуже чем не аллоцировать. Но заметно только на сильной нагрузке.
>На этот функционал с БД нужно время и причина. Достаточно скачать пикчу по URL, если она еще не скачивалась в R.drawable. Некоторые пикчи так сурово зашакалены, что запись в БД будет есть в разы больше места чем сама пикча весит. Зачем тогда БД? Чтобы что?
Я тебя не пойму - делаешь микрооптимизации, которые тебе ничего не дадут, а на самые мощные оптимизации времени нет? Тебе это странным не кажется?
Что значит пикчи зашакалены? Вы архивируете картинки чтоли? Иначе запись в БД не будет больше чем пикча весит. Да даже в этом случае можно писать архивированную.
>Зачем тогда БД? Чтобы что?
Чтобы кэшировать картинки, ты же этого хочешь? Скачал, сохранил в БД. Потом отобразил. И никакой коил не будет тебе глотать ошибки или требовать https.
https://developer.android.com/develop/ui/compose/graphics/images/loading#disk-loading
>>146932
Еще кстати мощная оптимизация, которую ты вероятно с коилом не получишь - упаковать все картинки в 1 файл и скачать разом, обычно это быстрее чем по одной качать (но нужно проверять).
Делаешь архив с превьюшками и архив с нормальными, быстрое качаешь превьюшки, в фоне качаешь нормальные, если долго качается и юзер запрашивает в этом время картинку - подтянуть одну отдельную в фоне. Скорее всего юзер успеет кликнуть максимум на 1-2 картинки пока полный пак не скачается.
>Обвесил функции @Stable и @Immutable где возможно
Ты про это?
https://developer.android.com/reference/kotlin/androidx/compose/runtime/Immutable
>The immutability of the class is not validated and is a promise
Это просто подсказка для разрабов и тулов
Погоди, в котлине же только ссылочные типы, а примитивные только у джавы, не? Или что ты имеешь ввиду под Integer и int?
Мимопроходил
в теории котлин иногда использует примитивные типы под капотом
но это был просто наглядный пример иммутабельности
Понял, спвсибо
Оказалось что Coil это "Glide у нас дома" (в Котлине). В плане синтаксиса 1 в 1 местами. Еще не подключал глайд к проекту. Папка data не была доступна так как я решил скачивать медиа через DownloadManager, который относительно несложно вкручивается в приложение копипастом, живет отдельной жизнью в системе, не настаивает на https, и в ресурсы приложений доступа не имеет. Это очень странный и тупой инструмент, который подписывается на приложение и живет системе отдельно, сбрасывая медиа в Download (легко посмотреть скаченное из приложения загрузки). Все неплохо, только почему-то файлы виснут в очереди на скачку, а не качаются. Очевидно где-то не проверил настройки сети. От коила и глайда не отказываюсь. Надо же с чем-то сравнивать.
>>146932
БД тема непростая. Знаний у меня в этом мало. Поэтому рискую надолго завязнуть в болоте "просчитался, но где?". Орнул с твоего подхода "прост заведи БД, делов-то на пять минут".
>>146937
Бэкенд с данными не у меня, так что мою идею с упаковкой данных встретили без энтузиазма. Пикчи в основном все по http. Json'ы большие как и запросы из трех джоинов, так что рабочую бизнес логику я не могу поменять. Хочу сделать основу приложения относительно шуструю и расширяемую. А потом уже буду скучать делая 50+ экранов по побразцу, наводя всякую красоту для конечных пользователей.
Если ты привык работать с ORM, но тебе чужда Room, то используй Realm.
Выглядит как Exposed, но намного проще и имеются сдк под андройд (exposed еще к проекту подключать минут 10 надо, а тебе так вообще часов 50)
>Орнул с твоего подхода "прост заведи БД, делов-то на пять минут".
Ну вообще на уровне записать/считать из одной таблицы данные БД тема очень простая. И не нужно ничего заводить, она есть в каждом Андроид телефоне.
https://developer.android.com/training/data-storage/room
>Json'ы большие как и запросы из трех джоинов, так что рабочую бизнес логику я не могу поменять.
Это я не понял вообще к чему? Что за джейсоны? Что не можешь изменить алгоритм показа картинок?
Ну смотри сам, экономия на спичках тебе сильно много не даст. В любом приложении основные узкие места - это IO, объем передаваемых по сети данных, работа с базой. Чем больше из этого уберешь, тем быстрее будет.
Судя по твоему описанию, проще всего будет на первом старте показывать лоадинг скрин и грузить все картинки в кэш - уж через фреймворки или нет - это тебе видней.
Но если у тебя на бэкэнде скуфы, которым похуй на оптимизацию - это пиздец, тут только сложнее и сложнее кэширование на твоей стороне делать. Кэшировать входищие данные, асинхронно отправлять запросы на бэк, перепосылки, и т.д.
>>147593
>>147849
Ух я постыню накатал конечно
Ты описываешь архитетуру вк или ватсаппа, записывающих в БД гигабайты мусора, которые потом надо в фоне апдейтить, пытаясь хоть как-то сохранить актуальность данных. Да, когда у тебя 2 диалога вк, и через стенку стоит хороший роутер, то все это работает как часы. Я все понимаю, что ты начитался инфоциган на хабре, поставил им лайк, и даже подписался на их телеграмм канал, но не все разработчики вокруг тебя делают мобильные казино и мессенджеры, где с БД только в путь.
У нас тонкий клиент с простым кэшем, то-есть приложение, которое скачивает данные по товарам JSON (нестабильные и изменяемые) и картинки (условно неизменяемые). Данные актуальны до тех пор пока мы не ушли с экрана. А картинки часто повторяются. Бэкенд лежит на плечах скуфов, и что REST сервер, что его запросы, не особо оптимизированы. Все пикчи в рабочем хранилище расшарены по http (скуфы не хотят учить сертификаты), а резервный сервер с бэкапами пикч отдает их по https (через load balancer для e-shop). В сумме на серверах около полумиллиона картинок, из которых на телефоне используются несколько сотен пикч в день, условно до 2000 за неделю на устройстве.
Пока что я знатно соснул с реализацией кэширования в памяти приложения, и вынужден отложить ее. Возможно дейтвительно придется пересесть на БД, где будет одна таблица с двумя полями: ключ и блоб. Современный апи андроида пытаются превратиться в вендорлочное анально огороженное говно. Каждые несколько релизов апи все меньше директорий доступны, и все больше ограничений, например использование алиасов вместо явных указаний директории. http пока еще разрешают включать отдельной опцией, но это только пока. Библиотеки с пикчами на котлине вообще не в курсе что существует http, например. Загрузка скаченных в памяти/ассетов файлов это чистокровные костыли от гугла. Пока я ебался с этим, у меня аж натуральная тряска с аутичным тиком началясь. А подгрузка ресурсов (вшитых в апк строк/пикч, в режиме ридонли) наоборот работает на изи.
То-есть глобохомо гугл видит идеальное приложение так: на старте в приложении есть только 5 иконок навигации, а остальные 99% процентов приложения скачивается через https в неэффекивную БД написанную индусами, которая по каждому пуку апдейтится чтобы ресурс ссд и внутрення память максимально страдали. В оперативке крутятся только телеметрические зонды, а placeholder для хранения изменяемых данных это в вовсе утерянная технология древних, запрещенная самим гуглом. Так как бд приложения это вечнорастущий файл без бэкапа, то он со временем вероятность словить фейл стремительно растет, и никакой рут не поможет среднему юзеру вытащить свои файлы когда будет краш, так что лох в панике побежит покупать новый телефон, да подписываться на платные облака чтобы больше не терять свои картинки с котиками, еот, или гомониграми (на случай важных переговоров в авточате). Работу с файлами приложенями полностью запретят и назовут опасным антипаттерном.
>>147593
>>147849
Ух я постыню накатал конечно
Ты описываешь архитетуру вк или ватсаппа, записывающих в БД гигабайты мусора, которые потом надо в фоне апдейтить, пытаясь хоть как-то сохранить актуальность данных. Да, когда у тебя 2 диалога вк, и через стенку стоит хороший роутер, то все это работает как часы. Я все понимаю, что ты начитался инфоциган на хабре, поставил им лайк, и даже подписался на их телеграмм канал, но не все разработчики вокруг тебя делают мобильные казино и мессенджеры, где с БД только в путь.
У нас тонкий клиент с простым кэшем, то-есть приложение, которое скачивает данные по товарам JSON (нестабильные и изменяемые) и картинки (условно неизменяемые). Данные актуальны до тех пор пока мы не ушли с экрана. А картинки часто повторяются. Бэкенд лежит на плечах скуфов, и что REST сервер, что его запросы, не особо оптимизированы. Все пикчи в рабочем хранилище расшарены по http (скуфы не хотят учить сертификаты), а резервный сервер с бэкапами пикч отдает их по https (через load balancer для e-shop). В сумме на серверах около полумиллиона картинок, из которых на телефоне используются несколько сотен пикч в день, условно до 2000 за неделю на устройстве.
Пока что я знатно соснул с реализацией кэширования в памяти приложения, и вынужден отложить ее. Возможно дейтвительно придется пересесть на БД, где будет одна таблица с двумя полями: ключ и блоб. Современный апи андроида пытаются превратиться в вендорлочное анально огороженное говно. Каждые несколько релизов апи все меньше директорий доступны, и все больше ограничений, например использование алиасов вместо явных указаний директории. http пока еще разрешают включать отдельной опцией, но это только пока. Библиотеки с пикчами на котлине вообще не в курсе что существует http, например. Загрузка скаченных в памяти/ассетов файлов это чистокровные костыли от гугла. Пока я ебался с этим, у меня аж натуральная тряска с аутичным тиком началясь. А подгрузка ресурсов (вшитых в апк строк/пикч, в режиме ридонли) наоборот работает на изи.
То-есть глобохомо гугл видит идеальное приложение так: на старте в приложении есть только 5 иконок навигации, а остальные 99% процентов приложения скачивается через https в неэффекивную БД написанную индусами, которая по каждому пуку апдейтится чтобы ресурс ссд и внутрення память максимально страдали. В оперативке крутятся только телеметрические зонды, а placeholder для хранения изменяемых данных это в вовсе утерянная технология древних, запрещенная самим гуглом. Так как бд приложения это вечнорастущий файл без бэкапа, то он со временем вероятность словить фейл стремительно растет, и никакой рут не поможет среднему юзеру вытащить свои файлы когда будет краш, так что лох в панике побежит покупать новый телефон, да подписываться на платные облака чтобы больше не терять свои картинки с котиками, еот, или гомониграми (на случай важных переговоров в авточате). Работу с файлами приложенями полностью запретят и назовут опасным антипаттерном.
Ну если ты лучше знаешь как надо делать - то чего здесь спрашиваешь?
И что это за биполярочка - сначала база - это мусор и инфоцыгане, а потом ой никак, придется с базой делать. Там разные люди твой пост что-ли писали.
>>149477
>Загрузка скаченных в памяти/ассетов файлов это чистокровные костыли от гугла.
Опять же знаешь как правильно - делай как правильно, только зачем тогда за советом приходить?
Мимо мобайл дев
В случае игр может иметь смысл. Я не игродел, и больших приложений не делал, но предполагаю что можно делить модули так: логин/юзердата/сессия, оффлайн фичи, онлайн фичи, донат/магазин/оплата. На счет структуры скажу что андроид студио сама тебе сделает дефолтную структуру. В каталоге res (ресурсы) уже есть места куда добавить строковые константы (полезно для локализации), изображения, анимации и шрифты. Еще есть папка ассетов, которая не создается по дефолту в проекте.
Хотел спросить пару вещей у мобайл дева:
1) Как из эмулятора АС стучаться в локалку? Не получаю ответ от сервера хоста 10.0.2.2 (апи 34, таргет 24, все сетевые штуки разрешил).
2) Как внутри приложения запускать http сервер чтобы с него брать данные (для теста пока нет нормального сервера)?
3) Почему при скачивании файла обычно возращается его id, по которому мы обращаемся к нему, а вызов напрямую в доках стараются лишний раз не упоминать даже?
1. https://developer.android.com/studio/run/emulator-networking TL;DR надо не 10.0.2.2, а 10.0.2.2:<port>
2. Хз, не было такой задачи никогда.
3. Не знаю, но наверное опять с безопасностью проблемы
А вообще, я предполагаю, что в андройде сделано для какой-то йоба абстракции и чтобы при смене локации файлов, апи не сломалось.
Ну и как отмечал выше - безопасность тоже.
Андройд слишком сильно завязан на всяких избыточных абстракциях и сильная фрагментация была на ранних этапах
Ну пока идея добавить и сделать слабые связи между ui и service слоем, чтобы можно было быстро фиксить баги, но думаю, что это тупо, не?
Пикча добавлена просто так, не бейте
Посмотри, здесь описывается архитектура что ты ищешь. Активити+Сервис. В схеме много андроидовских абстракций вызывающих друг друга, и эта лапша из взаимных коллбэков отлично работает на андроиде. Как я понял, сервисы придумали для того чтобы даже после закрытия или краша активити апдейт бд и хитровыебанные запросы на сервер не прерывались неожиданно. Не знаю, три в ряд или мобильную дрочильню с анальной слежкой за сессиями китов ты проектируешь. Очень разные проекты.
https://www.pvsm.ru/android-development/8030
О, спасибо, анончик, пойду читать сейчас.
Хочу сделать 2d гача дрочильню с онлайн чатом и боями, вот такие вот дела... Надеюсь продать этот проект кабан-кабанычу и уйти в закат
У меня есть мечта взять старое приложение (chan burauza, для форчана), и скопипастить функционал для ридонли в компоузе. Приложуха старая под старый телефон, и она на новье скорее всего откажется работать.
Странный вопрос - зависит от того чем ты руководствуешься.
Вслепую я бы тоже рекомендовал ктор/джавалин
>>153604
Чет-т взглянул на примеры рест апи в котлине и го. В основном их сетевые фреймворки это какая-то утомительная хуйня как паскале, где синтаксического сахара около нуля, и надо всякую типовую ебалу бойлерплейты и роуты прописывать каждый раз. Ненавижу большие бойлерплейты в типовых задачах. На питоне сетевой стек уже тянет на 21 век, уже освоил нормальные декораторы, да еще и разными фреймворками позволяет обмазаться.
С сетью работа идет через httpok3, и битмап из body сохраняется в кэш. Подводный в том что в случае когда body NULL (нет инета, неверный адрес), запрос крашит приложение. В хеллоуворлдах не пишут как обработать ошибку, но в гите есть нужная строка (достаточно закрыть body в конце запроса). Писатели библиотеки для языка, главная фишка которого это элегантная обработка NULL, насрали себе в шаровары при получении NULL в body.
В общем, приходит JSON со строковыми данными и ссылками, после чего делаются запросы в корутинах чтобы загрузить пикчи в кэш. Затем sleep 300ms чтобы данные точно успели сохраниться. И рисуем пикчи в ленивом списке. Когда файла нет, ставится заглушка. Обрывы связи на 3 секунды (переход между роутерами) бывают часто (из-за чего и началась эпопея с кэшированием). Как делать повторное скачивание, еще не продумал.
Понемногу освоил события физических клавиш (стрелки, сканер, назначаемые ф1-ф4, прочее). Не очень весело дела с обработкой событий клавиш в компоуз: 1 в 1 как в дельфи, будто тщательно списывали. Вешаются только на элементы гуи, и только когда элементы в фокусе. Да еще и зависимости очень фрагментированы. Чтобы обработать события нажатий, надо почти 10 импортов сделать. Не очень круто что стрелки работают по умолчанию, и есть ровно 1 глобальная обработчик, это backspace. Хочется сделать глобальный обработчик по клавишам, и переназначить стрелки, но на компоузе решили не заморачиваться. Придется забыть о планах и ограничиться малым.
Не понял, а в питоне роуты ты прописал 1 раз и на всю жизнь?
>Затем sleep 300ms чтобы данные точно успели сохраниться
Зачем при такой охуенной синхранизации что-то оптимизировать было? Что значит "данные точно успели сохраниться"?
Это какой-то троллинг?
Я порешал вопрос, в убунту добавили, в поп! ос добавили, в линукс минт добавили, единственное где не удалось мне, это чтобы добавили в Ubuntu Kylin (китайская убунта), потому что там перекати поле в гите. Везде где надо в популярных добавили, моя миссия с иконкой котлина закончена. Самое странное почему это должен был делать именно я? Всем котлинистам было настолько пофиг?
Только правда говоря надо ждать пока выйдет минт и поп основанные на 24.04 убунте
https://kotlinlang.org/docs/whatsnew20.html#smart-cast-improvements
Взял много для запаса. Буду понемногу уменьшать во время теста в проде. Надо замерять время обработки запросов при высокой нагрузке, а это еще в будущем
Ну вот ты сам и ввел наибольшую проблему, которую тебе предстоит оптимизировать. Даже две в одной - тут тебе и гонка потоков и тормоза уровня лишнего запроса в базу.
Не тестил скорость, только фичи некоторые.
Is null удобно, но пока не работает в идее т.к. там синтаксис максимум 1.9
Кроссплатформенный код тоже удобно сделан теперь, но компоуз пока что не работает с 2.0.0 котлином, ждем ksp 2 и compose 2
В проде используются такие костыли и антипатерны (по менению гугла), что ты разочаруешься в человечестве. Лучше предложи свое решение
Ну вот аж несколько библиотек советуют
https://stackoverflow.com/questions/59664411/image-caching-in-android
>ColdStorage
Спасибо. Описание заинтриговало. Прям та идея которую я описывал. Впервый раз вообще вижу упоминание проекта, да и в гугле около нуля информации кроме гитхаба. Видимо как обычно шиз одиночка написал, возможно даже гениальный шиз. Последний коммит был в 2020, когда компоуз еще у гугла в яйцах плескался, но надеюсь к современому котлину с компоузом получится подключить.
@Path("/application-info")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
class ApplicationInfoResource(
@Inject private val applicationInfoService: ApplicationInfoService
) {
@GET
fun get(@QueryParam("request-to") requestTo: String?): Response =
Response.ok(applicationInfoService.get(requestTo)).build()
@GET
@Path("/logo")
@Produces("image/png")
fun logo(): Response = Response.ok(applicationInfoService.getLogo()).build()
}
Как в питоне, только питон уже по дефолту в дистрах, и окруженение за минуту делается, пока котлин с градлом надо настраивать, а потом собирать в uber jar. В общем нельзя в натив котлин собрать и запустить в kts, так что смысла в этом фреймворке мало.
Если ты про автоматом установку зависимостей, то многие адекватные фреймворки предоставляют визард (или ультимейт идея)
Кстати, выглядит как будто spring
Так это стандартная штука, даже спринг такой же. По-моему пик больше похож на питон, хотя у меня на питоне опыт небольшой
>В общем нельзя в натив котлин собрать и запустить в kts, так что смысла в этом фреймворке мало
Ничего не понял, что ты пытаешься сделать?
>>165578
>Кстати, выглядит как будто spring
Естественно, они оба так выглядят
Красиво. Так я не понял, жавалин в первую очередь для явы делали или для котлина? Почему в гибабе несколько языков? Я, вот, яву только читать умею, и если подавляющее большинство ответов в мануалах и стаковерфлоу будет на яве, то не осилю.
>>165953
ColdStorage в двух местах очень близок к тому что я пишу, только на других зависимостях (более актуальных по моему мнению, ибо автор писал код в 2020), так что буду оттуда активно взаимствовать, посматривая в исходники. Ну и там автор заболел класической питоньей болезнью - клать класс в класс чтобы вызвать объект из объекта, и складывать в другой объект, при том что кода меньше 1000 строк.
>>165578
Не, я о том что питон почти всегда по дефолту предустаовлен. Достаточно запакетировать сервер с зависимостями, и в таком виде распостранять по локалке. Клиент буквально одной командой поставит не вспотев. На го еще пизже, что даже в голый контейнер можно поставить без рантайми (правда язык ГОвно).
>Красиво. Так я не понял, жавалин в первую очередь для явы делали или для котлина? Почему в гибабе несколько языков? Я, вот, яву только читать умею, и если подавляющее большинство ответов в мануалах и стаковерфлоу будет на яве, то не осилю.
Вообще для Явы , закос под котлиновский ктор. А какое это значение имеет?
>Не, я о том что питон почти всегда по дефолту предустаовлен.
На линуксе разве что, на Винде нет. В любом случае ты и джаву одной командой поставить можешь, через вингет или аптгет
Ну технически я начинаю теряться когда импортирую ява зависимость и понимаю что не могу сходу сразу сказать, нужно ли создавать nullable переменную/объек или нет. Если бы либа была полностью в котлине, так мы сразу а гайдах написали что тут используем ?. там !!. Соотв буду попадать на null pointer exception по невнимательности.
Ничего особенно интересного нет, увы. Просто улучшили то, что есть.
Хотя я хз что нового можно добавить для котлина. Я бы хотел какой-нибудь синтаксис прикольный, который ещё больше позволит сокращать код. Мб функциональщины побольше
Немного новостей про котлин:
Вышел котлин 2.0 и теперь улучшена поддержка Java кода, особенно Null.
Теперь try-catch адекватно редактирует на Null и если раньше внутри try приходилось вызывать var?.let {}, даже если catch(e: NPE), то теперь не надо!
Можно говнокодить теперь так:
var a : String? = null ; try { println(a.lenght) } catch(e: NPE) {}
Котлин 2 улучшил возможность смарткаста объектов Родитель -> Ребёнок1 и Родитель -> Ребёнок2 прямо на лету. (читаем подробнее здесь https://kotlinlang.org/docs/whatsnew20.html#smart-cast-improvements)
Room, Jetpack ViewModel, Jetpack navigation (вроде он тоже) становиться мультиплатформенным решением. Теперь проще переводить с android в kmp свои приложения!
Ktor 2.3.11 стал последним ktor 2 релизом, уже есть первые беты ktor 3.
Вышел KSP 2 для поддержки K2 компилятора и также Jetpack compiler. (полный список тут https://kotlinlang.org/docs/whatsnew20.html#compiler-plugins-support)
ТАКЖЕ Jetbrains представили свою языковую модель для написания кода. Пока-что она работает только с kotlin кодом, но результаты неплохо так удивляют. По их словам, GPT4 может выдавать только 40% работающего kotlin кода, а их модель под 60-70%. Вы можете протестировать её бесплатно, она является open source и находится на huggingface.
navigator = NavHost(start = "Start")
@Navigation(prev = "", next = "Screen_2")
@Composable
fun Start() {
//
onClick { navigator.Next() }
}
@Navigation(prev = "Start", next = "")
@Composable
fun Screen_2() {
//
onClick{ navigator.Prev() }
}
Спасибо за выжимку
Кто посматривает на васм на котлине (можно перевести и озвучить яндекс браузером).
https://www.youtube.com/watch?v=eEjrlctqTF8&list=PLlFc5cFwUnmxt7Pmn3TGELHdVXVMh7JWi&index=10
Да не за что.
Думаю делать такую выжимку, когда выходит несколько интересных обновлений и рассказывать общее. Может по ктору и exposed буду пилить т.к. очень интересный стек.
Вроде навигацию, лайфсайкл и ресурсы доступны на большем числе платформ (меньше платформозависимых костылей). Правда такое чувство на данный момент на мультиплатформе пишут 3,5 энтузиаста в надежде на скорую декостылизацию. Житбрейнс и Гугл делают ставку на то что те апи что есть на андроид будут работать везде, и им похуй на рефакторинг на данный момент. Целятся в вебе и айос взлететь залететь, но это пока только на слайдах. В чате в телеге почти все мультиплатформеры пишут в связке андроид+пк, и то часто обмениваются костылями для пк.
Я не понимаю этот дрочь к мультиплатформе. Это преподносится как киллерфича, но на деле просто группировка кода и все же?
Куда там все силы идут, на что? Полгода назад нужен был десктоп, вспомнил про шум мультикомпоза, думал наверну, а на деле ни доков, ни примеров, понюхал бибу и ушел
Или там финансирование жестко свернули или кто-то жестко стал пилить бабло. Даже вот этот котлин 2.0, стыдно показывать, ноль реальных технологий, сахара и либ.
Ну вы там держитесь))
Там даже сравнение типа есть, мол флаттер против мультиплатформы. Я так понимаю это рабочий кросс флатер против пустого котлин-нейтив? Или что? Может кто объяснит, реально не в теме.
Чтобы для объектов Person(name="John", age="20", citizenship="US") и Person(age="22", citizenship="CA", name="Michael") можно было бы написать функцию которая бы возвращала ["John", "20", "US"] в первом случае и ["22", "CA", "Michael"] во втором, как пример?
Напиши такую функцию, в твоем желаемом порядке (каждый раз разный порядок - не имеет смысла, нужен какой-то твой стандарт).
Вопрос мультиплатформы у Котлина это вопрос жизни и смерти: либо сосать+лежать под сапогом у гугла с явой на андроиде, изредка поглядывая на мертвый сектор дестктопа (расклад на сегодняшний день), либо наобещать золотые горы вебмакакам и нищукам без макбука (айос разработка это обязательно мак), и пустить корни везде.
>>170115
Посмотрел эти дебаты флаттера с котлином. В общем флаттер это огромные всратые портянки кода, благодаря которым можно делать сложнейшие анимации и все что угодно на любой платформе при предсказуемом результате. Котлин локаничен и прост для вката, но красивых анимаций с виджетами и образцовой мультиплатформеностью от него ждать рано. То-есть флаттер это стабильное могучее кровавое легаси, которое могет в любое ебанутое "сделайте так чтобы красиво было", и писать на нем это наверное полный пиздец, а котлин уже сейчас используется для не особо сложных приложений, и только разрастается до размеров флаттера.
В мультиплатформе используется обычный компоуз, но специфичная документация находится здесь. Кстати, не вся т.к. большая часть API строится на swing/awt и тебе требуется писать swing объекты и связывать с компоузом, если не найдешь специфическую фигню под десктоп.
https://github.com/JetBrains/compose-multiplatform/blob/master/tutorials/README.md (вообще не пойму, почему они туда запихали...)
Кстати, а давно foreach разный в котлине и джаве? Сейчас попробовал пройтись foreach по мапе и вышло, что
map.forEach { key, value -> // код } это джавовая версия, а map.forEach { (key, value) -> // код} это котлиновская версия
Я тут использовал некий класс Person, но вообще идея была в том чтобы хранить URL-параметры для API где их порядок важен. Чтобы в одном классе инкапсулировать всю тайпчеки и преобразования и не таскать мапу из функции в функции. Но альтернатив, видимо, нет.
Тебе по факту джаву знать на уровне синтаксиса надо, а это 6 часовой курс на ютубе от условного индуса.
А в целом да, смысл есть, если для себя учишь. Большинство крупных либ по типу gui, ORM, backend web уже есть на чистом котлине (compose/korge, exposed/ktorm/sqldelight, ktor/javalin)
Если язык понравится и захочешь больше углубиться, то джава необходима т.к. слишком много документации написано на чистой джаве, без упоминания котлина. Хотя данный код может запускаться (и тебе придется это делать) и на котлине
Почему говорят что в котлине нет подстановочных знаков? Есть же вариативность. Это потому что это как-то концептуально другое или это надо воспринимать буквально что нет знака "?", поэтому wildcard собственно нет.
Если у тебя вкат с нуля, то стоит, просто потому что там база си-синтаксиса. А так не нужно, большую часть времени там API либ дергается, ровно как и в котлине и в других языках.
Стоит в первую очередь учить котлин. А жабакод достаточно подтянуть до уровня "умею читать". Причины:
- чистая ява вызывает непреодолимую тягу писать абстрактными классами, а так же сеттерами и геттерами
- на яве много годных статей, которые не всегда есть в котлине
- в доступе тонны примеров на яве, который можно копипастить в андроид студио, и он будет сам конвертироваться в котлиновский
- знание жабы сейчас нужно только чтобы пройти интервью, а на работе уже будет переписывание на котлин либо поддержка жабы
- на андроид есть библиотеки на яве, которые не портированы на котлин, но достаточно лишь создать экземпляр класса явы не вдаваясь в детали
>в доступе тонны примеров на яве,
Ох уж эти легаси примеры, вкатывался давно в джаву, по рекомендациям поиска начал вкатываться в стек EE. Оказалось он не нужен, а если юзается то только контейнер сервлетов, да и это уже моветон. Такие открытие ненужны вообще.
Зная котлин ты будешь знать джаву, если прям надо будет читать сорцы, подтянешь походу.
Это начинать с нуля не очень, котлин специфичен по синтаксису, все другое будет непривычно. Как и котлин после джавы.
640x360, 6:35
Если это действительно одно и тоже, то документацию делал какой-то недалекий красноглазик.
KorGE ( https://korge.org/ ) мультиплатформенный 2D / 3D игровой движок написанный на kotlin для kotlin. Есть собственные библиотеки-дополнения для работы с временем/ DI / прочее.
Realm ( https://github.com/realm/realm-kotlin ) новая ORM библиотека для работы с БД от создателей MongoDB. Есть официальные SDK для android / KMP / swift / .NET
Kottage ( https://github.com/irgaly/kottage ) Key-Value хранилище для сохранения данных. Есть поддержка KMP проектов. Нужна для сохранения настроек пользователя.
Coil ( https://github.com/coil-kt/coil ) библиотека для отображения и автокеширования картинок. Пока-что android-only, но уже готовиться версия 3, которая будет поддерживать KMP.
PreCompose ( https://github.com/Tlaster/PreCompose ) KMP библиотека для навигации между экранами. Есть собственная реализация ViewModel прямо как в android и поддержка Koin.
>Ох уж эти легаси примеры
Ты удивишься, но примеры из явы 1.8 до сих пор везде работают, а с тех пор не поменялось примерно нихуя. Буквально копипащу рандомный ответ из стаковерфлоу и жду пока ИДЕ соберет код в котлин. Работает в 90% случаев кроме тех 10% когда надо правильно nullable типы переопределить. Жаба - рай для легаси кодера. Обратка даже пизже чем у дельфи, хотя это тот еще некроязык (там придумали диалекты чтобы ухудшить совместимость кода, чем как обычно навалили себе в штаны в стиле дельфи).
>Coil
Насосался с ним, и больше не хочу его трогать даже палкой. Работает как черная коробка, которую почти невозможно отдебажить или проверить на ошибки без прыжков над головой. Не работает в эмуляторе потому что так захотели разрабы. Даже повторного запроса при неудачном подключении и нормального stack trace нет, какой уж там production-ready. Вечная бета. Я просто делаю запрос okhttp3, сохраняю через context и показываю обычным Image, что полностью исключает обосрамсы и позволяет обрабтать любую внештатную ситуацию. Используй такой же костылек, и вернешься к койлу лет через 5-10 когда его допилят.
>PreCompose
Скоро библиотеки с навигацией будут выходить каждый месяц. Опенпосусники обезумели в соревновании кто больше создаст одинаково кривых навигаторов по примеру гугла. Даже я свой навигатор написал (не либа, а стейт + класс навигатор) для внутренних нужд.
>precompose
Да, есть такое, ведь гуглы педики и сразу после выхода беты compose multiplatform не удосужились сделать хотя бы альфу jetpack navigate. Только спустя 4 года всё же начали пилить. Как и typesafe navigation
При передаче метода, может ли быть вызван метод N раз? Где N - сколько раз был передан вызов метода.
У меня есть приложение, где из API слоя метод передается в репозиторий метод и потом уже в usecase, который передает контрллеру. Получается примерно так:
Api
fun getById(id)
Repository
fun getById(id) { return api.getById(id) }
Usecase
fun invoke(id) { return repository.getById(id) }
Controller
fun getUserInfoById(id) { val info = usecase.getById(id) }
В логах ktor насрал 4-мя вызавами API с разными воркерами. Версия ктора 2.3.11, движок cio
По хорошему так не должно быть и там должен бфть единый запрос, но походу либо неправильно сделал и надо фиксить, либо просто сломан cio как всегда
Я не понимаю просто, это прикол от разрабов? Я провёл мини тест системы и понял, что запросов не чётко 4 или 3, а вариативно от 3 до 8 где-то. Какого... ну не может же быть это из-за того, что я криво объект сериализации написал и он не работает? Хммм
Дебагер запусти и по шагу смотри где у тебя там что много дергается и как.
Я не совсем понял что у тебя за беда.
Посмотрел тут, цифры что-то печалят.
https://programming-language-benchmarks.vercel.app/problem/http-server
Да уже посмотрел. Оказывается, что у меня объект не успевал сериализоваться и тут же шел за "новой" порцией. Зачем? Да хз вообще. Сейчас просто удалил весь код, буду с нуля переписывать. Эх...
Зато возникла другая проблема: kotlinx.serialization умеет в парсинг parent-child нормально? Просто один мудак сделал апи на уровне
{
"status": { "string": "завершено", "code": 2 }
}
И теперь для сериализации приходится создавать доп. Объект или же писать мапу.
Прим. для сериализации этой же параши
data class Test(
val status: Status
)
data class Status(
val string: String
)
Да и бог бы с ним, если бы такие были объекты, так они еще вложены друг в друга... Знаю про ignoreUnknownKeys, но все равно проблему не решает. Помогите, анончики!
А, плохо спросил, я имел в виду "сериализация вложенного объекта без создания parent объекта. Чтоб
{
"list": {
"episode": {}
}
}
Было вот так в коде
@SerialName("list.episode")
data class Episode()
Ну как пример
оправдывайтесь
Ну, есть такое, да. Поделать ничего нельзя, только если gc менять или еще как то шаманить.
JVM/CLR будет делать ровно тоже самое, если бы не было проверок то падало рандомно с сигфолтами. Вроде как jit может выпиливать это.
Откуда тогда VM решает бросить НПЕ когда получает аналл? То есть, там тоже есть проверки. Без проверок сигфолт будет.
Вроде там джвм подписывается на событие разыменования нулевого указателя, типа page fault exception.
У всех остальных указателей этой проверки нет
Так что это далеко не одно и то же
А какая разница? Ну типа так и так есть где-то под капотом действие, которое определяет что "ты" есть на самом деле (нулл или не нулл).
Та же беда с проверкой индексов массива, вроде простая вещь, поставь ты эту проверку и лишишь просто пласта проблем (одни из популярных уязвимостей), но в реале эта хрень миллионами и миллиардами раз может дергаться (как у тебя), что делает раст с нулевой абстракцией просто наябом, если сравнивать с си.
Я не удивлюсь что проверку делает котлин и где-то под копотом еще VM повторяет это.
Хотя может я и не прав, просто это фундаментальная проблема. Я не знаю можно ли это сделать бесплатно на системном уровне и почему тогда котлин не решает эту проблему как решает VM
>А какая разница?
По перформансу как видишь огромная. Что у тебя проц железом обрабатывает, а что джава функция с ветвлением постоянно вызывается
Я хз как там сделано, я к тому, что там под капотом есть оверхед, иначе давно бы стерлась грань между управляемыми и не управляемыми языками, просто ты этот оверхед не видишь в статистике.
А может там правда работает через событие системы, но это может стоит настолько дорого, что решили проще if подергать, чем давать генерировать эту ситуацию.
Не факт даже, что нуллабилити можно сделать проще, даже со своей VM.
Забыл дополнить:
Dataarg - спасение перегрузки.
Добавили новое ключевое слово - dataarg. Применяется к классам/аргументам и синтаксис такой:
> dataarg class MyClass (аргументы)
> fun say(dataarg myArgs: MyClass)
Нужен для работы с повторяющимися аргументами. Как пример, есть функция LazyList. У нее 2 перегрузки, которые отличаются тем, что у первой content: RowScope.() -> Unit, а у другой ColumnScope.() -> Unit.
В kotlin 1 нам надо было либо делать дата класс с кучей аргументов и передавать как аргумент в функции или же копировать/вставить одни и те же аргументы из одной перегрузки в другую. Теперь можно сделать так, как описал выше и использовать такие функции как обычные перегруженные функции.
Private mutable/Public immutable field.
Если кто то программирует под android, то точно сталкивался с таким кодом:
private val _uiState = MutableStateFlow(MyUiState())
val uiState = _uiState.asStateFlow()
Теперь этот бойлерплейт можно удалять! Добавили удобный способ сократить этот код и вот как:
val uiState: StateFlow<MyUiState>
field = MutableStateFlow(MyUiState())
field по умолчанию является приватным полем, а uiState публичным.
Типы ошибок.
Теперь тип ошибки и тип объекта можно кастовать вместе. Пример:
private error object NotFoundError
// тут функция по поиску объекта в списке, но она сама нам не так важна
fun searchObject(): T {
val foundObject: T | NotFoundError = NotFoundError
// идет поиск объекта в списке и если есть, возыращаем, иначе ошибка
if (foundObject is NotFoundObject) { // кидаем ошибку }
else { return foundObject }
}
Сам NotFoundObject является объектом ошибки, но не самой ошибкой. Нельзя прописать throw NotFoundError, но можно кастовать его как второй возможный тип переменной, вместо T?
Мелочь, а приятно
Тройные строки (начинаются и заканчиваются тремя кавычками) улучшили. Теперь они тоже имеют вставку переменных прямо в строку.
Пример:
Kt2
$$"""
Yaml: $version
Web: $domain
"""
K1 (тот же результат)
$Yaml: ${version}\nWeb: $domain"
Забыл дополнить:
Dataarg - спасение перегрузки.
Добавили новое ключевое слово - dataarg. Применяется к классам/аргументам и синтаксис такой:
> dataarg class MyClass (аргументы)
> fun say(dataarg myArgs: MyClass)
Нужен для работы с повторяющимися аргументами. Как пример, есть функция LazyList. У нее 2 перегрузки, которые отличаются тем, что у первой content: RowScope.() -> Unit, а у другой ColumnScope.() -> Unit.
В kotlin 1 нам надо было либо делать дата класс с кучей аргументов и передавать как аргумент в функции или же копировать/вставить одни и те же аргументы из одной перегрузки в другую. Теперь можно сделать так, как описал выше и использовать такие функции как обычные перегруженные функции.
Private mutable/Public immutable field.
Если кто то программирует под android, то точно сталкивался с таким кодом:
private val _uiState = MutableStateFlow(MyUiState())
val uiState = _uiState.asStateFlow()
Теперь этот бойлерплейт можно удалять! Добавили удобный способ сократить этот код и вот как:
val uiState: StateFlow<MyUiState>
field = MutableStateFlow(MyUiState())
field по умолчанию является приватным полем, а uiState публичным.
Типы ошибок.
Теперь тип ошибки и тип объекта можно кастовать вместе. Пример:
private error object NotFoundError
// тут функция по поиску объекта в списке, но она сама нам не так важна
fun searchObject(): T {
val foundObject: T | NotFoundError = NotFoundError
// идет поиск объекта в списке и если есть, возыращаем, иначе ошибка
if (foundObject is NotFoundObject) { // кидаем ошибку }
else { return foundObject }
}
Сам NotFoundObject является объектом ошибки, но не самой ошибкой. Нельзя прописать throw NotFoundError, но можно кастовать его как второй возможный тип переменной, вместо T?
Мелочь, а приятно
Тройные строки (начинаются и заканчиваются тремя кавычками) улучшили. Теперь они тоже имеют вставку переменных прямо в строку.
Пример:
Kt2
$$"""
Yaml: $version
Web: $domain
"""
K1 (тот же результат)
$Yaml: ${version}\nWeb: $domain"
Забавно что альтернатив нету.
Го это вообще просто звездос, вроде норм асинхронный рантайм, но столько подводных камней, даже на элементарных слайсях есть места отстрела ног, как будто студенты язык делали. Там реально есть книга 100 ошибок го.
С шарпами мутная херня, вроде опенсорс и язык неплох, и тут же закрытый отладчик онли под вижлы. Какие-то страдания у линуксоидов. В общем в жопу эти корпаративные языки и игру мягких в EEE.
Раст вроде по началу норм, а потом такая шляпа начинается, что ну его нахер, проще на сях (или новом зиге) писать чем в эти ограничения и лайвтаймы дрочиться. Он просто неудобный, ни какого чуда не случиться просто вката, будет только медленная разработка.
Динамикодресня идет лесом, как только код становится больше 1000 строк, начинается страдания, да всякие jsdoc и хинты могут помочь, но проще взять статик язык, там хоть в производительности выигрышь
Жаба после котлина противна, ну вот я писал и понял что мне бы тут просто не помешал сейчас этот сахар из котлина и везде думаешь как хорошо было бы тут котлин итд, проще котлин взять.
О, мощный коупинг пошёл. Чего же тебе в джаббе не хватает, что ты готов к таким падениям производительности?
Лично мне в джаве не нравится синтаксис (слегка специфичный, скажем так), что лямбды вне функции нельзя вынести, нет нулл сафети, нет лямбд let, apply, also, нет компоуза, нет удобного дсл
Это то, что я за 10 минут вспомнил
Но это не значит, что я вообще не люблю джаву. Я на ней пишу и мне нормально впринципе, просто слегка неудобно. Всё таки котлин сделал своё дело и 98% времени пишу на котлине
Мимо
>>173382
>>173394
Обвешай реквест самописными коллбэками и не выполняй вызов повторно пока не получил нормальный ответ. Ожидай до таймаута, либо обвешай все слипами в when до победного, либо крути while с прерыванием до достижения нужного значения каунта. Первый раз реквесты пишешь что-ли? Твой незаурядный план без костылинга не исполнишь.
Как можно зарекаться о производительности, когда вы пишите на срыге? Взяв джаву и срыг, ты буквально поделил где-то на 10-15. да мой сладких, все уже знают
о techempower
>Го это вообще просто звездос
Для меня главным красным флагом в этом языке является то как на хабре пишут о нем в статьях. В стиле сначало было очень неудобно от горячего баттплага, а потом гомосексуализм стал приносить удовольствие, даже не знаю как описать почему полюбил гомогейский синтаксис, в общем стал ценить говно.
Ну вот я пишу на джавалине, проблемс?
не, я про то, что условный Runnable надо писать так
new Thread(() -> { // code } ), когда как на котлине это
Thread { // code } и никаких скобочек не надо
да я вроде всё сделал, теперь не срабатывает ложных вызовов. Я просто сильно удивился, что ктор шлёт запросы БЕСКОНЕЧНОЕ КОЛИЧЕСТВО, пока не сможет получить/сериализовать объект.
Ну как избавился... я надеюсь, что теперь не будет такого. Всё таки ктор это та еще чёрная магия, надо тестить его работу более подробно. В данный момент лень, потом займусь.
https://stackoverflow.com/questions/78200965/android-ktor-client-making-infinite-calls
Ктор просто сломан. Дело даже не движке CIO, а где-то в обёртке.
Прикрил - как ктор чуть сервак не задосил :)
Забыл дописать:
Он как бы данные получает, но не отдаёт их какого-то фига и дальше продолжает срать запросами.
От джавы да устаешь, хотя немного всего больше года поработал, была бы норм зарпла, но только у с мидлов и синьоров, но не дослужидся еще, у котлиа тоже синтаксис не сильно короткий, чуть лучше джавы, бэк на спринге котловом вроде хорош.
Накатай ишью им, я вообще не пойму о чем ты, но скорее всего ты где-то обосрался.
Я уже ставлю жирный плюс за отсутствие ;
Я 20 лет работал писарем точки с запятой, мне хватило.
Groovy.
Пытался сделать запрос к серверу, он начинает срать запросами к серверу, без ведомых на то причин. Есть вероятность, что это и вправду я, но когда тестил со сломанным сериализатором, он отправлял 5-6 запросов и только потом сериализовывал, хотя вся логика сериализации была в одном запросе:
httpClient.get().body<T>
Какого хрена? Хрен знает.
Или может быть, что где-то корутины неправильно написал и они шлют меня нахер. Короче, ищу баги у себя пока, а потом и ишью напищу (пока занят, нет доступа к пк)
>Хера у жабадауна бомбит, если котлин делает его jvm сильнее.
Котлин делает джвм тормознее миллионами рантайм проверок на нулл и тормознутыми корутинами
Джит выпилит все это говно за раз, но тебе эти проверки надо будет писать ручками
Ты вообще видел какая жаба тормозная без прогрева?
я имею в виду если этот код используется, джит его не удалит
Могу сказать за андройд.
Котлин доминант, если ты не знаешь котлин/корутины - ты никому не нужен.
90% новых либ пишется на котлине,99.9% новых приложений тоже на котлине.
Чем лучше джавы?
Есть корутины, которые поддерживаются где-то с 9 джавы.
Есть крутой синтаксис и сам язык обновляется с поддержкой старых версий JDK.
DSL
null safety
экстеншен функции
Компоуз мультиплатформа (это пи... ну хотя-бы можно делать +- несложные программки)
Ничем. Его продвижение обусловлено взятками от создателей. Разбирательство уже идёт, попухнут скоро.
Это при том, что стандартная библиотека быстрее работает, а не срет миллионом объектов на каждую итерацию как котлиновская
Источник надёжный, но проверенный.
Я тоже много думал, что если бы jetbrains со старта сделали котлин без jvm параши, только native+js, то сейчас котлин был бы основным конкурентом c# и go (и rust и python), ультимативным языком просто. Но увы.
К сожалению, надо было поддерживать кучу андройдовских либ т.к. гугл заплатила за поддержку. Пришлось пилить JVM язык и еще сверху добавили натив, чтоб хоть как то уменьшить бойлерплейт кода (и ускорить/снизить потребление).
JS компиляцию вообще не понимаю, вроде никто из нормальных людей этим не пользуется (или я чего то не знаю?)
>Я тоже много думал, что если бы jetbrains со старта сделали котлин без jvm параши, только native+js, то сейчас котлин был бы
... уже мертв лет 10.
Без JVM Котлин никому нахуй не уперся. А у самих JetBrains не хватило бы ресурсов тащить его в одиночку. А еще нет фреймворков и библиотек.
Фреймворки и либы есть у котлина, да только они супер баганные. Ей богу, тот же экспоузет. Я затрахался пытаться ловить его ошибки. То базу не может создать, то не создаёт таблицы, то транзакцию не обработает.
Молодца
>Фреймворки и либы есть у котлина, да только они супер баганные.
Речь шла о том, что если бы был только Kotlin native+JS, то из библиотек там бы только JS были бы. Все эти DI, ORM, Web фреймворки пришлось бы писать заново. Это та же самая проблема с которой сталкиваются все убийцы С++ - под них нихуя нет, и приходится делать биндинги к С++ библиотекам.
Потому JetBrains абсолютно правильно сделали, что выбрали JVM и сделали интероп с Java. Так они получили хороший рантайм с минимумом усилий, огромное количество библиотек и фреймворков, доступ к самой популярной мобильной ОС.
Да, тут согласен, что иначе бы они не выжили.
У жб бы хватило сил сделать либы под жс, ну с натяжкой лютой для Native (одна из таких - Skiko), но вот их качество и количество оставляло бы желать лучшего
Я бы сказал, что шарпомухе xd
очевидно котлин
Ничего. Come home white man.
микроменеджментил добавление иконок для линукса в ubuntu, pop os, linux mint и попросил на главную двача добавить котлин, впихнул пример для callback в википедии на котлине.
Неплохо неплохо.
Кстати, в почему в телеге котлин/андройд чаты НАСТОЛЬКО токсичные? Даже двач /б/ не настолько плох. Сидят там 2 админа-шиза и всех новичков либо банят, либо обсирают за вопросы. Какого хрена...
А такие есть? Я там не сижу, я сижу на реддите, сабреддиты ты и сам знаешь, конечно там вахтёры сидят на модератарах в андроид сабе, котлин ещё норм.
Да, есть
@KotlinLangRu и @android_ru
Тут сидят одни скуфы-токсики и на твой вопрос (даже достаточно интересный) отвечают с высокой долей ЧСВ и указывания на тебя. как на дебила.
Недавно задавал новичок "как сделать дополнительные кнопки для snackbar", так главные скуфы-гейткиперы сидели и тупо засрали человека, почти прямо сказав, что он дебил.
В чате по котлину другая проблема: туда залетают дебилы и пытаются обсуждать что угодно, кроме котлина. Да и посоздавали кучу тредов и в итоге активность дай бог в треде /coroutines/ и /lang/.
Я всё понимаю, тупой вопрос и такое можно нагуглить, но зачем всё таки оскорблять людей?
/Би/тарды
Думал спрашивать специфичные вопросы про андройд и майнкрафт, но ни разу так и не спросил
А нашел просто в гугле на тему "чат телеграм котлин и андройд"
Кто нибудь может объяснить?
Мб именно дело в импортах? Типо у тебя при конвертации кода импортируется стандартные импорты джава кор, а когда весь файл - он старается импортировать котлин кор апи (kotlin.math, file и т.д,)
Zагадка. Ждём gpt-30 чтобы он ответил.
import java.util.Scanner;
int b = scanner.nextInt();
вот это я вступор впал...
По сути, там разница такая, что ты даже не заметишь, но если интересно, то readln это обёртка над jdk вариантом получения строки от пользователя.
а, не ответил на вопрос то.
Лучше readLine т.к. просто проще читается и более понятней с ходу, чем scanner джавы.
Новых, действительно хороших (а не поделок для compose / android или сделанных самими жб / гугл), библиотек для котлина всего несколько - ktorm, arrow, koin, okio, korge и sqldelight. Можно конечно вспомнить еще различные биндинги, но они не в счёт.
Зачем-то добавляют кучу различных систем/ключ. слов об которые можно споткнуться или сломать случайно систему (пример: dual type: Int | TypeError / set/get с двойным значением а-ля StateFlow и MutableStateFlow), поддержка различных достаточно фиговых направлений по типу kotlin/js или compose multiplatform KMM намного лучше и проще, чем это чудо-юдо
Не следят за своими же библиотеками: баги в exposed, ktor и compose особенно компоуз десктоп по потреблению ОЗУ...., kotlinx.serialization только более менее хорошо сериализовывает json (на счёт остальных - не знаю, я не тестировал)
Васаби сдох из-за ктора, Skija бросили ради "развития идеи kotlin/nativa" или типо того, вот теперь пишут Skiko (зачем?). Куча мусорных либ по типу decompose, ktorfit, precompose, picnic, Result. Ну серьезно, зачем так много всякой бесполезной фигни? Ладно, кторфит еще понять можно, оно нужно для kmp. Но вот вопрос - сколько компаний используют kmp в своих проектах? Не знаю, как на западе/востоке, но в РФ только две насчитал - Movavi и IceRock.
Не знаю, будет ли кто это читать, но всё же интересно ваше мнение. Заранее спасибо!
>Не вижу смысла в котлине
Не вижу смысла во всех языках программирования когда есть язык си. Он не улучшается потому что он и так в совершенстве.
вот кстати да, думаю на нём начать писать т.к. задолбало, что всё ломается из-за педиков, которые даже код писать (что уж тут про программирование говорить) без гугла не умеют
>я не тестил
Только сейчас осознал ошибку: я не тестил сериализацию/десериализацию других типов, кроме json
Когда-то был номерной тред про котлин, оп там накатал пасту на этих шизов и просил избегать этих ТГ загонов. Почему эти каналы еще живы, я хз. Хотя это проблема всех чатов, даже в эпоху irc было окружение ЧСВэшников, которые самоутверждались на залетных, хотя порой там были куда более статусные люди, в отличие от фриков канала.
Избегай чаты. На двачах трудно анонировать на самого себя, поэтому в этом треде гадит только безработный жабист, хотя он скорее вызывает жалость.
Ну, постараюсь избегать чтоль, раз такое дело
Слушая подкасты, у меня сложилось впечатление, что набрали студентов или лоу-скилл, в том числе и организатора, который не мог организовыать и потом вообще выгорел. Как итог, пришлось вместо развития переписывать компилятор, у которого даже внутренней доки не было.
То есть, не имея ресурсов, они поставили немалые такие цели. Но все же, это лучшее решение на jvm. Долбиться об старинные жабо-шарпы мало приятно.
Юношеский максимализм до первого сигфолта, с последующей отладкой на месяцы через дампы памяти. Видали мы таких.
Жалко он не выстрелил в опенсорсе и вот снова мягкие что-то стали там мутить. Как сказали в шарп треде - колос на глиняных ногах
Найди уже работу
У меня сегодня жопа сгорела когда я осознал что String.also{} это говно без задач. Мне надо было строку баркода по чарам проитерировать, путем пересчета проверить валидность и вычислить контрольную сумму. В also нет индекса. Ну и нахуй оно тогда надло если без индекса хватит in String, а для индекса можно взять массив? В общем взял строку и записал массив. Дальше итерировать, обращаясь к index и value внутри цикла проще простого.
Вообще не понимаю чем with, apply, also, run, let лучше традиционных решений.
Let - сделать что то, если объект не null
With - вместе с чем-то сделать что-то, а иначе ничего
Also - также, но вне зависимости от ответа (в отличии от with)
Apply - чтоб get/set у джава объекта не вызывать, сразу типо конструктора вписывать. Как пример - логгер у ретрофита строить
Run - если что-то создано успешно или выполнилось успешно, запустить какую - то операцию
Ну эт мое понимание
Мимо автор поста
Почему мы не можем сделать картинка 2?
То есть потому что котлин нихуя не лаконичный? Это всё пиздежь. То есть каждый раз писать object : это же бред ебаный? Есть какой-то реальный смысл?
Потому что Greeter() попадает под токен вызова функции или создания класса, нужна оверпроверка в таких случаях, а ты потом будешь плакать, что так долго компилиться.
Создаём ли мы класс?
Да, анонимный, аргумент не засчитан.
Вызов функции.
Ну тут да, оверпроверка.
Создания экземпляра, по типу new MyClass(), в общем, это мега тупо докопаться к одному ключ слову, при этом получишь получишь овер-парсинг и проблемы читаемости.
Потому что вкатиться почти нереально, одно из самых сложных для вката. Треды создаются по языкам, а андроид - это более узкий тред с конкретным направлением, и языком, который по сути только там и используютю Плюс /pr сам по себе мертв.
Как же я тебя понимаю...
Я не думаю, что флит не будет баговать как релиз ветка АС, но на минимализацию я ОЧЕНЬ СИЛЬНО НАДЕЮСЬ.
Кстати, попробуй макчимально новую (feature drop) ветку у АС, она вроде меньше багует, но будь осторожен, настройки слетают
Максимально*
Используется jvm != поверх джавы. Нахуя пилить свой байткод и кодогенераторы для всех архитектур когда есть готовые опенсорсные?
Эпл тожп свой свифт на jvm сделал ну и да, оба говно этот синтаксис с вопросами восклицательнями знаками просто вымораживает, какие то говняные комплитеры вместо корутин, вообще весь около-джава мир это такая дрянь редкостная.
Ах да еще помему у хаскеля поддержка jvm есть.
Багуется и на макбуке, был опыт.
Есть такое ключ. Слово - fun, так воооот.... оно не только для функций, лол.
Вы можете писать "функциональные интерфейсы", что то типо интерфейса Runnable, но не создавая объект (или как анон выше хотел сделать >>197448 )
До (функциональных интерфейсов):
interface Runnable { fun execute() }
fun test() : Runnable { return object : Runnable { override fun execute() { код функции } }
После:
fun interface Runnable { fun execute() {} }
fun test(): Runnable { return Runnable { код функции }
Потому что обычные скобки для лямбд сделали. Как компилятору понять когда ты лямбду указываешь, а когда интерфейс реализуешь?
Че, самый умный, блядь? Ну и напиши свой Kotlin.
Продвигать ide через лок языка на платной ide, верх тупости, такое придумать могли только зумеры
Котлин честно кроссплатформенный поверх 100500 опенждк и с бесплатной версией IDE-не прибитой к ос, а шарп колосс на глиняных ногах, как бы ты не маняврировал.
ко ко ко, он попенсорс!, только правда пропретарный отладчик онли для вижлы, хотрелоад работающий на винде, мау на винде, хоть изначально ксамарин был кросс, в общем, даже основной кросс гуи ливнул с открытого фонда, ибо мягкие мутили свою муть.
Жыдбрейнс запретил качать ихнее поделие с российских ip и походу Беларусь тудаже
https://habr.com/ru/news/825756/
1. Там речь про ультимейт версию
2. Один хрен нельзя было оплатить подписку
3. 95+% котлин кода - это андройд/кмп.
4. Тред джавы на 4 треда ниже
>Там речь про ультимейт версию
Я думаю они со временем пофиксят эту проблему
> Один хрен нельзя было оплатить подписку
Картой иностранных банков можно и теперь кто оплатил не может получить обновления, а ТП посылает на хуй
https://youtrack.jetbrains.com/issue/GO-14191
https://youtrack.jetbrains.com/issue/IDEA-313097/Cant-extract-parameter
Примечательно что посылатели на хуй из Питера в большинстве своём
> 95+% котлин кода - это андройд/кмп.
Студию для Андрюши кто разрабатывает?
>Тред джавы на 4 треда ниже
Да? А я вас постоянно путаю, а в чём разница?
>Студию для Андрюши кто разрабатывает?
Гугл + ЖБ. Гугл делает доп. фишки типо эмуля и встроенных плагинов для андройд кода (типо smali, jetpack compose и т.д.), а ЖБ делает комьюнити версию идеи и compose multiplatform (хоть и с помощниками из гугла).
>Да? А я вас постоянно путаю, а в чём разница?
У нас тут своя атмосфера, пьём тыквенный раф и ноем, что жб (гугл) опять что-то сломал из-за своих хотелок.
Жаба девелоперы сидят в своей фауне и ждут, когда же у них обновят версию джавы.
Ой-вей, таки да.
>>210319
С ними давно всё стало понятно. Их бложик на русском не обновляется уже третий год. Хотя никакие ссанкции не запрещают писать по-русски, но они выслуживаются и лижут чей-то сапожок. Ради чего?
Вот к чему привело отсутствие политруков в вузах. Не заложили БАЗУ, теперь они пьют соевое молоко и гадят. Хотя могли бы пользоваться положением и лоббировать русские интересы.
В общем, это очередной шаг к отжатию компашки чехами. Продавливают их и не останавливаются.
>>210327
>нельзя было оплатить подписку
Можно было тихо активировать вечную лицензию россиянам. Но нет, блядь, подлянку строят.
Flutter вытеснит всё. Но под смарты лучше писать на C++, чтобы эффективнее было. А то до чего дожили: кнопка принятия звонка отрисовывается по пять секунд и тупит. Сколько звонков уже пропустил из-за этого.
>>210527
>https://youtrack.jetbrains.com/issue/IDEA-313097/Cant-extract-parameter
Не удивлюсь, если Ефремова занималась вебкамом в прошлом.
А вообще, надо собирать их ебальники, пока не шифруются. Не повредит.
https://всезапомним.рф/company/76-jetbrains.html Кто может выйти на них, сообщите, чтобы добавили информацию о новой подлянке.
Где вообще джетбрейнс сотрудники? Я вроде читал вот типа русские ребята, но что с ними после 2022 они свалили в чехию или куда там?
Или все эти сотрудники буквально сидят где-то в Санкт-Петербурге подключенные к корпоративному vpn?
Даже если посмотреть PKGBUILD, все эти snap, flathub, aur они все исходник то берут с сайта интеллидж. В этом и заключается комедия.
>Вообще не понимаю чем with, apply, also, run, let лучше традиционных решений.
Очень удобно когда тебе нужно зачейнить вызовы методов, которые не возвращают сам объект, типа несколько сеттеров. Без них придётся писать какие-то обертки. Ну а тут универсальный и однородный подход вместо кучи разных оберток
У них удаленка и офисы в некоторых крупных городах Европы. Мне пару лет назад предлагали Мюнхенский офис.
>С ними давно всё стало понятно. Их бложик на русском не обновляется уже третий год. Хотя никакие ссанкции не запрещают писать по-русски, но они выслуживаются и лижут чей-то сапожок. Ради чего?
Потому что не продают в РФ и уже никогда сюда не вернутся санкции хуй кто отменит да и репутацию подмочили знатно, соответственно нет смысла тратить время сотрудников на это, возможно уволили целый отдел, который занимался документацией на русском языке.
>Вот к чему привело отсутствие политруков в вузах.
Лол, дело не в этом, тут чисто бизнес взвесили риски потери рынка РФ и рынка ЕС+США, собственно решили что сесть на западный стул выгоднее. Там у них половина команды что была изначально разошлась кто куда, а часть хомяков релоцировали после закрытия офиса в Питере. Так что у них сложился костяк именно прозападных хомячков. Не надо совок возрождать, дедуль.
>Можно было тихо активировать вечную лицензию россиянам. Но нет, блядь, подлянку строят.
Их там в Чехии выебут за такое, а вообще после окончания лицензия остаётся, только обновляться на новые версии нельзя. Покупать кстати можно через карту другой страны, просто сменив адрес. Сейчас проблема в другом, они закрыли доступ для скачивания даже если у тебя есть купленная лицензия, вот это уже действительно подлянка.
>Flutter вытеснит всё.
Не взлетает почему-то, наверное что-то с ним не так
>Но под смарты лучше писать на C++, чтобы эффективнее было.
Эффективнее когда хуяк-хуяк и в продакшен, пока ты там памятью управляешь и макросы пишешь на других языках уже выкатят релизную версию
>А вообще, надо собирать их ебальники, пока не шифруются. Не повредит.
Займись этим если руки чешутся "site:youtrack.jetbrains.com EU sanctions" тысячи таких ответов и почти у всех есть ебальник в linkedin вижу ты прям в бой рвёшься
>Я вроде читал вот типа русские ребята, но что с ними после 2022 они свалили в чехию или куда там?
Всех вывезли за границу, а кто не поехал уволили
>Эффективнее когда хуяк-хуяк и в продакшен, пока ты там памятью управляешь и макросы пишешь на других языках уже выкатят релизную версию
Это база к сожалению, обычно time to market решает безумно
Поздравляю, если бы ты хотя бы раз открывал документацию, то для тебя это не было бы секретом
Да, удачи тебе этим заниматься.
Почему-то ни в одном проекте это не встречал, так что да, я был удивлён
Нинужон, есть джава 21.
Ну как бы не совсем. Есть разные языки для мобильной разработки, чисто одного нет. Например порно игры делают на ренпае
Preparing...
Checking clion dependencies...
Resolving dependencies...
Checking inter-conflicts...
Cloning clion build files...
Generating clion information...
Building clion...
==> Making package: clion 1:2024.1.4-1 (Fri 05 Jul 2024 10:47:33 MSK)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
-> Found jetbrains-clion.desktop
-> Downloading CLion-2024.1.4.tar.gz...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (22) The requested URL returned error: 451
==> ERROR: Failure while downloading https://download.jetbrains.com/cpp/CLion-2024.1.4.tar.gz
Aborting...
Failed to build clion
Я думал ты про котлин, ide да все оттуда
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=clion#n22
перекатываюсь из Пайтон Бэкенда, по причине того что мобилки больше нравятся
Ну что тебе сказать то...
Вот примерно общий список:
View xml, jetpack compose
Room,
Degger/hilt, koin,
Retrofit2,
Rxjava, coroutines.
Редко, но бывают в вакансиях рус/бел компаний:
Firebase, glide, picasso
Тогда можно создать отдельный тред для конкретного языкосрача. Ходить троллить по языковым тредам не надо.
Нашел нормальную книгу в списках в шапке, Kotlin Coroutines Deep dive
Советую okhttp, coil, compose, ktor, maven, gradle. При найме скорее всего будут мучать явой и спрингом. Вообще не понимаю зачем тебе вкат в андроид. Это очень специфичное направление.
Я перешел на андроид чтобы переписать старое энтерпрайз приложение, написанное на смеси фреймворка питона и костылей, на современный котлин без костылей и легаси. ИТ отдел до этого пол года ковырялся в костылях, и пришел в такое хтоническое состояние, что с благодарностью отдал мне приложение под ключ "один в один, и чтобы можно было фичи добавлять".
Коллеги скуфы буквально утята ИТ: как выучили 1 язык в молодости, влюбились в него, и с тех пор ни одного нового ЯП не учили. В каждом кабинете свой язык в фаворе, как же я проигрываю с сего факта. А мне выучить новый ЯП не сложно, ведь все равно больше трех за год не использую, и это совсем не много.
А почему пост без саги?
Интересно как это скажется на JB
не лезь блять дебил сука ебаный
не лезь блять дебил сука ебаный
Никак почти. Вот представь ты в винде. Есть нативный word, есть веб word. Кто пользуется веб word когда под рукой лежит нативный? Да никто. Веб вордом пользуются лишь те кто на линуксе сидят и им нужна 100% совместимость с word документом.
Я хочу писать гениальный красивый код(и нихуя не понятный), но меня калит, что компилятор не оптимизирует. Надеюсь K2 лучше будет
Какое же говно на скрине с котлином, вместо понятного создания коллекции я как понял какая-то мапа и понятного принта какая-то ебатория из "выразительного кода". Я помню на руби можно было также изящно и выразительно писать, но зато потом хуй кто прочитает и потому от него в перспективе все массово начали отказываться когда стали поддерживать долгоживущие проекты.
equals() = ==
Если в лоб сравнивать синтаусис котлина и джава то это нелогично.
Из какого языка котлин стырил ===?
*синтаксис
Шиз, спок. В джаве неудобное сравнение было, поэтому в котлин сделали удобно, шоб как у людей
Это не мапа, я на рандом хуйнул шизо код, который не имеет смысла.
Насчет читаемости мб ты прав, можно и обычным способом писать.
Это чисто для выебонов, чтоб не писать вот так:
println(Pair(a, setOf(StringBuilder("dsf"))))
Ибо нехуй простым смертным мой код читать
Локальные переменные для слабых
Не, у меня уже нету этого в коде.
Я думал, что у меня до сих пор в коде есть это чудо, но оказывается уже переписано на интерфейсы/абстрактные классы для меньшего связывания кода.
Слишком специфичная вещь
https://youtrack.jetbrains.com/issue/KT-29227/Provide-package-private-visibility-modifier-or-another-scope-reducing-mechanism
>Package private was introduced before Java 1.0, at a time when no one could predict that we would be writing millions of lines of code in Java. It was thought that packages would be akin to modules, so you should put all the related things into one package/module. However, the reality turned out to be much more complicated and people routinely write self-contained modules comprised of multiple packages nowadays.
>There has not been much progress with package-private. This issue is pretty popular, according to our latest language features survey, but we plan to be working on more popular issues first. Moreover, if you drill down into the details of the survey, you find that this particular issue exhibits a peculiar pattern -- the more a person is experienced in Kotlin programming, the less they are likely to want package-private visibility.
Буквально насрал себе в штаны и делает вид что так и задумано.
Обновился с 1.9.24 до 2.0.0 и не ощутил никакого чуда с ускорением в 2 раза, только с градлом поебался. Набросили жирных беливов как Стив Джобс, на том и порешали. Литералли дрочат в присядку, после чего высираются килотоны ответов на реддите в тредах типа "Is Kotlin worth to learn in 2024?". Зато теперь можно проверить что котик может мяу:
class Cat {
fun purr() {
println("Purr purr")
}
}
fun petAnimal(animal: Any) {
val isCat = animal is Cat
if (isCat) {
// In Kotlin 2.0.0, the compiler can access
// information about isCat, so it knows that
// animal was smart-cast to the type Cat.
// Therefore, the purr() function can be called.
// In Kotlin 1.9.20, the compiler doesn't know
// about the smart cast, so calling the purr()
// function triggers an error.
animal.purr()
}
}
fun main() {
val kitty = Cat()
petAnimal(kitty)
// Purr purr
}
https://youtrack.jetbrains.com/issue/KT-29227/Provide-package-private-visibility-modifier-or-another-scope-reducing-mechanism
>Package private was introduced before Java 1.0, at a time when no one could predict that we would be writing millions of lines of code in Java. It was thought that packages would be akin to modules, so you should put all the related things into one package/module. However, the reality turned out to be much more complicated and people routinely write self-contained modules comprised of multiple packages nowadays.
>There has not been much progress with package-private. This issue is pretty popular, according to our latest language features survey, but we plan to be working on more popular issues first. Moreover, if you drill down into the details of the survey, you find that this particular issue exhibits a peculiar pattern -- the more a person is experienced in Kotlin programming, the less they are likely to want package-private visibility.
Буквально насрал себе в штаны и делает вид что так и задумано.
Обновился с 1.9.24 до 2.0.0 и не ощутил никакого чуда с ускорением в 2 раза, только с градлом поебался. Набросили жирных беливов как Стив Джобс, на том и порешали. Литералли дрочат в присядку, после чего высираются килотоны ответов на реддите в тредах типа "Is Kotlin worth to learn in 2024?". Зато теперь можно проверить что котик может мяу:
class Cat {
fun purr() {
println("Purr purr")
}
}
fun petAnimal(animal: Any) {
val isCat = animal is Cat
if (isCat) {
// In Kotlin 2.0.0, the compiler can access
// information about isCat, so it knows that
// animal was smart-cast to the type Cat.
// Therefore, the purr() function can be called.
// In Kotlin 1.9.20, the compiler doesn't know
// about the smart cast, so calling the purr()
// function triggers an error.
animal.purr()
}
}
fun main() {
val kitty = Cat()
petAnimal(kitty)
// Purr purr
}
https://youtrack.jetbrains.com/issue/KT-29227/Provide-package-private-visibility-modifier-or-another-scope-reducing-mechanism
>Package private was introduced before Java 1.0, at a time when no one could predict that we would be writing millions of lines of code in Java. It was thought that packages would be akin to modules, so you should put all the related things into one package/module. However, the reality turned out to be much more complicated and people routinely write self-contained modules comprised of multiple packages nowadays.
>There has not been much progress with package-private. This issue is pretty popular, according to our latest language features survey, but we plan to be working on more popular issues first. Moreover, if you drill down into the details of the survey, you find that this particular issue exhibits a peculiar pattern -- the more a person is experienced in Kotlin programming, the less they are likely to want package-private visibility.
Буквально насрал себе в штаны и делает вид что так и задумано.
Обновился с 1.9.24 до 2.0.0 и не ощутил никакого чуда с ускорением в 2 раза, только с градлом поебался. Набросили жирных беливов как Стив Джобс, на том и порешали. Литералли дрочат в присядку, после чего высираются килотоны ответов на реддите в тредах типа "Is Kotlin worth to learn in 2024?". Зато теперь можно проверить что котик может мяу:
class Cat {
fun purr() {
println("Purr purr")
}
}
fun petAnimal(animal: Any) {
val isCat = animal is Cat
if (isCat) {
// In Kotlin 2.0.0, the compiler can access
// information about isCat, so it knows that
// animal was smart-cast to the type Cat.
// Therefore, the purr() function can be called.
// In Kotlin 1.9.20, the compiler doesn't know
// about the smart cast, so calling the purr()
// function triggers an error.
animal.purr()
}
}
fun main() {
val kitty = Cat()
petAnimal(kitty)
// Purr purr
}>>230314
https://youtrack.jetbrains.com/issue/KT-29227/Provide-package-private-visibility-modifier-or-another-scope-reducing-mechanism
>Package private was introduced before Java 1.0, at a time when no one could predict that we would be writing millions of lines of code in Java. It was thought that packages would be akin to modules, so you should put all the related things into one package/module. However, the reality turned out to be much more complicated and people routinely write self-contained modules comprised of multiple packages nowadays.
>There has not been much progress with package-private. This issue is pretty popular, according to our latest language features survey, but we plan to be working on more popular issues first. Moreover, if you drill down into the details of the survey, you find that this particular issue exhibits a peculiar pattern -- the more a person is experienced in Kotlin programming, the less they are likely to want package-private visibility.
Буквально насрал себе в штаны и делает вид что так и задумано.
Обновился с 1.9.24 до 2.0.0 и не ощутил никакого чуда с ускорением в 2 раза, только с градлом поебался. Набросили жирных беливов как Стив Джобс, на том и порешали. Литералли дрочат в присядку, после чего высираются килотоны ответов на реддите в тредах типа "Is Kotlin worth to learn in 2024?". Зато теперь можно проверить что котик может мяу:
class Cat {
fun purr() {
println("Purr purr")
}
}
fun petAnimal(animal: Any) {
val isCat = animal is Cat
if (isCat) {
// In Kotlin 2.0.0, the compiler can access
// information about isCat, so it knows that
// animal was smart-cast to the type Cat.
// Therefore, the purr() function can be called.
// In Kotlin 1.9.20, the compiler doesn't know
// about the smart cast, so calling the purr()
// function triggers an error.
animal.purr()
}
}
fun main() {
val kitty = Cat()
petAnimal(kitty)
// Purr purr
}>>230314
36:27
Забавно, что с использованием
param
.let(::doSomething)
код наоборот читается снизу вверх, а не сверху вниз
Этот неуч путает comprise и compose. В словарь не смотрит даже.
Groovy. Как всегда. Всё хорошее в петухлине — из Groovy, всё остальное — от дьявола.
>>233292 я на реддите это спросил, а не стал дожидаться ответа двача.
componentN не привязан к дата классу, его можно вызвать и без геттеров. Но зачем нужен код с компанентами без геттеров это уже другой вопрос.
Я попросил claude-3-5-sonnet придумать пример код чтобы компаненты не были привязаны к конструктору.
UPD2:
class Point(private val x: Int, private val y: Int) {
operator fun component1(): Int {
return y - x // Пример: возвращаем разницу y и x
}
operator fun component2(): Int {
return x + y // Пример: возвращаем сумму x и y
}
operator fun component3(): Double {
return Math.sqrt((x x + y y).toDouble()) // Пример: возвращаем расстояние от начала координат
}
override fun toString(): String {
return "Point(x=$x, y=$y)"
}
}
fun main() {
val point = Point(3, 4)
val (diff, sum, distance) = point
println("Original point: $point")
println("Difference (y - x): $diff")
println("Sum (x + y): $sum")
println("Distance from origin: $distance")
}
Какой вывод, то что они имеют похожий функционал это такое совпадение, потому что если смотреть эти особенности по отдельности они разные по функционалу.
Я попросил claude-3-5-sonnet придумать пример код чтобы компаненты не были привязаны к конструктору.
UPD2:
class Point(private val x: Int, private val y: Int) {
operator fun component1(): Int {
return y - x // Пример: возвращаем разницу y и x
}
operator fun component2(): Int {
return x + y // Пример: возвращаем сумму x и y
}
operator fun component3(): Double {
return Math.sqrt((x x + y y).toDouble()) // Пример: возвращаем расстояние от начала координат
}
override fun toString(): String {
return "Point(x=$x, y=$y)"
}
}
fun main() {
val point = Point(3, 4)
val (diff, sum, distance) = point
println("Original point: $point")
println("Difference (y - x): $diff")
println("Sum (x + y): $sum")
println("Distance from origin: $distance")
}
Какой вывод, то что они имеют похожий функционал это такое совпадение, потому что если смотреть эти особенности по отдельности они разные по функционалу.
println("Key: $key, Value: $value")
}
Это вообще как работает? (key, value)
Если глянуть в байт код там не вызывается componentN, там напрямую
String key = (String)var3.getKey();
int value = ((Number)var3.getValue()).intValue();
Как вообще это работает (key, value) , как я могу сделать так чтобы мои методы подсавлялись?
Пхех, вот тебе не насрать?
Компоненты в data классах нужны для деструктуризации, но они не нужны для деструктуризации коллекций, и кортежей.
В данном случае скорее всего берется элемент мапы. Элемент мапы - это Pair из ключа и значения. Как я уже сказал, деструктуризация для кортежей работает без компонентов, так что первое значение Pair подставляется в key, а второе значение Pair подставляется в value.
Как компилятор это определяет я хз, да и пофиг мне
Свои методы ты не подставишь так, потому деструктуризация нужна не для методов, а чтоб определенную структуру распихать по значениям в скобках, это просто сахар для удобства.
Это работает для коллекций (a,b,c) = listOf(1,2,3)
Для кортежей (a, b) = 1 to 2
И для дата классов, т.к. у них есть компоненты.
Понятно, один и тот же вид, а на деле под капотом разные вещи.
Маска это один синтаксис в котлине, остальная часть то что в байткоде.
Я всегда писал на Java. Сейчас стартуем новый проект. Всё стандартно: spring boot, postgres, Kafka и компания. Руководство говорит, ты техлид тебе и карты в руки. Есть возможность начать делать с нуля на котлин. Отговорите от этого, или наоборот, аргументы за приведите. Я не ради холивара спрашиваю, к котлину нормально отношусь, хочу для себя разобраться, стоит оно или нет.
Зависит от того насколько крупный проект.
В идеале чем более однородный тех стак - тем лучше, зоопарки не нужны.
Кста хороший вопрос. Я понимаю котлин jvm тормозной для бэка, но native почему не зашел?
Скорее всего котлин никогда не позиционировался как язык для бэкенда. Его рекламят как прикладной язык, более лучшую джаву, и основной язык для android разработки.
Хз, на котлин приятнее писать, полная совместимость с жабой. Loom вроде доступен из котлина, я хз зачем на джаве писать, если можно то же самое писать на котлине.
Некоторые шизы скажут, что suspend функции и корутины нинужны, и мб для бэка они действительно нинужны, но ты можешь их просто не использовать, да и тенденция сейчас на котлине писать вместо джавы новые проекты.
Серьезно, есть хоть одна причина писать на джаве, а не на котлине, если котлин - более удобная джава, которая может использовать все фишки обоих языков? байткод вроде один и тот же
Котлин дает немного подышать функциональным стилем, но не даёт вдохнуть свободно, чтоб почувствовать тру fp стиль. А это комбинирование парадигм чисто визуально выглядит некрасиво в коде, так что приходится себя ограничивать, и создавать локальные переменные, как узник старого доброго ооп и императивщины.
Фулл ФП языки конечно я не сильно люблю, мне нравится, когда язык мультипарадигменный - это удобно. Но увы, такие языки не дают всю возможную функциональщину.
Мимо под пивом
Да, например:
- Стандартизированный стак, у меня компания стандартизировалась на джаве и спринге
- Техлид не любит котлин, потому что ему 50+ лет
- Вы пишете на джава 5
и т.д.
>а Go взлетел?
0. Гугл
1. Простой как мясорубка, можно посадить пхпшника битриксоида после го тура. И то что ты пишешь можно сделать одним способом, никакого сахара только недавно дженерики завезли
2. Компилируется в бинарник, никакой ебли с виртуальными машинами. Закинул артефакт в докер и оно шуршит.
3. Быстрый почти как си, но не нужно ебаться с памятью есть ГЦ.
4. Рост популярности микросервисной архитектуры на смену копролитам. Не нужны все фреймворки, орм и прочая залупа. В гошке их нет ну почти нет но зато есть пиздатая стандартная библиотека, где без лишних зависимостей в пару строчек поднимается сервис.
5. Все из коробки и компилятор и управление зависимостями и форматирование и дохуя всего. Да и вообще по девопсу с ним все легко и просто.
Собственно мне кажется из-за этого он и взлетел
Ну а кто котлин всем в глотку запихивал? Гугл же, со своим андроидом. Без гугла он бы так и был студенческой поделкой каких-то русских из питера.
Просто значит у котлина лучше нетворкинг.
> Техлид не любит котлин, потому что ему 50+ лет
Просто покажи что есть кнопочка конвертировать с Java на котлин в intellij + можно смотреть байткод который декомпилирован на джава, то есть можно код с джавы гонять и обратно. Так можно изучить котлин по быстрому. И все скрытые автогенерации становятся сразу понятны и предсказуемы.
Ты не понял. Он знает, это никак не меняет то, что код у тебя останется на котлине, а не на джаве
Ну и что? Через сутки привыкнет к котлину.
Это как пиво или кофе, сначала вкус отвратительный, а потом пьют как воду.
Если легаси, то понятно, что не каждый дед станет переписывать джаву на котлин, особенно если там древняя джава. Такую контору лучше дропать.
Я писал про новые проекты.
У меня время компиляции на андроид уменьшилось в лучшем случае на 10% с переходом на К2. По-моему какая-то хуета, а не новшевства. Пусть свою хуйню переписывают. И касты ваши нахуй никто не испльзует.
Сейчас жидбрейнс с горящей сракой пилят мультиплатформу в надежде вырваться из андроид загона как будто что-то плохое. Пик буквально я.
Но улучшилось же. Там прикол не только в скорости компиляции.
Офк котлин в основном для андроида, но что плохого остальные платформы развивать? Лишним не будет, один хуй там щас добавлять особо нечего, всё есть уже.
>Не нужны все фреймворки, орм и прочая залупа. В гошке их нет
https://github.com/uber-go/fx
https://github.com/google/wire
https://github.com/go-gorm/gorm
https://github.com/gofr-dev/gofr
и кто в этот бред еще верит?
Потому что не пользуются этим говном
Не взлетит, на макоси свой котлин (swift) с глубокой интеграцией в систему, на винде дотнет.
Остается только линукс к которому еще придется изобрести фреймворк с с гуем типа qt.
Напиздел на собесе, что знаю Kotlin, через неделю выхожу на работу, как быстро познать весь этот сахарок чтобы не спалиться?
Сейчас прохожу бесплатные вводные уроки на hyperskill, есть что-то полезнее?
синьёр пиздабол джавист
Открываешь доки по котлину, есть кнопочка конвертировать с Java на котлин в intellij + можно смотреть байткод который декомпилирован на джава, то есть можно код с джавы гонять и обратно. Открываешь gpt-4o, copilot в браузере. Осторожнее на теме variance жпт галюционирует, вот это вообще лучше в нейросетях не спрашивать.
просто скажи что ты предпочитаешь писать ясночитаемый код, без сахара
Это херня всё, код максимум разве что рабочий, но видно что человек так писать не будет
Код гонять сюда-туда нужно чтобы понимать
Из джава в котлин
1)Как бы выглядит например наследование (просто пишешь на синтаксисе джава и узнаешь как это делается на котлине, повторяешь)
Из котлина в джава
2)Что генерируется под капотом.
Когда именно автогенерит геттер и сеттар, что он генерит при data классах, как выглядит когда при делегировании при ключевом слове by, что делает spread operator при vararg, когда ты декомпилируешь в джава весь этот сахар становится предсказуемым.
Пиздец попробовал этот кал. Из всех современных языков самый уебищный и писать на нем НЕВОЗМОЖНО. Нахуя эту залупу придумали?
Хуя долбоёб, котлин буквально самый удобный и простой среди прикладных языков.
Ты откуда такой, шиз? Приведи пример удобного языка умоляю не говори джава/c#
Зачем сравнивать объекто-ориентированный язык с процедурным программированием? Я имею в виду про основной стиль программирования, формально эти языки поддерживают другие стили, но это лишь формально.
Meh, щас бы старое лого для шапки использовать
Ты чё-то раскукарекался. На Groovy можно писать (да и все пишут по факту) именно со статической типизацией. Но можно и с динамической. И там это выглядит органично, в отличии от петухона, где эта типизация прикручена через очко и выглядит максимально уёбищно
А правда ли, что Ktor не нужен и подлежит забвению? Пишу на Котлин 4 года и ни разу не видел Ktor в глаза (только Spring). Расскажите хоть, надо ли оно или уже нет?
На мелких проектах тестил (очень лёгкая логика)
Плюсы:
Простая документация
Легко поднять MVP проектов
Легко внедрить другого человека в код (даже если никогда не писал на кторе или джаве/котлине впринципе)
Легковесный
Минусы:
Есть баги, даже бывают жёсткие (а разрабы походу жёстко их игнорируют)
Есть несмешные моменты с затупом в виде "открытых классов", которые на самом деле iternal.
Авторизация может нае#нуться. если захочет. Как фиксить? Даунгейд версий.
Впринципе, сейчас писать смысла нет. Они сейчас "переосмысляют" фреймворк и делают совершенно новую 3-ю версию (короче. как с котлином 2 история). Ждём выхода, потом багфиксы и там уже глянем
Не за что <3
Два чая этому господину
Я поначалу создавал проект на Котлине и копипастил туда код со stackowerflow/perplexity на яве с конвертацией в котлин. Потом читал доку по коду который был перед глазами. Если колеги спросят за твой мув скажи что тебе впадлу бойлерплеты писать, а так ты и сам все это знаешь.
Конкретно в юзеркейсе андроид мне ничего кроме нормальной навигации наверное ее никогда не будет и быстрой компиляции не нужно. Вообще больше нет никаких пожеланий. А то что 3,5 романтика едят кактус маргинальной мультиплатформы это буквально капля в море, и попытка влезть на поле, где все уже поделено. Кстати Елизаров обладает талантом с серъезным, как у Мишустина, ебалом оправдывать любые странные решения команды Котлин.
>>237103
>на макоси свой котлин (swift)
>на винде дотнет
>Остается только линукс к которому еще придется изобрести фреймворк с с гуем
Все так.
Стоит отдать должное, красноглазые дегенераты настолько упиваются своими срачами из-за графических либ, что разрабы серъезного софта просто пилят на электроне чтобы не влезать в говно по колено Так что на линукс проще влезть через электрон или jvm.
>что разрабы серъезного софта просто пилят на электроне
Шиз, спокуху оформи)
>нормальной навигации
Никак не привязано к платформе, нормальные решения существуют
Это ссылка уже не референс
https://kotlinlang.org/docs/reference/
Придумайте новую шапку и проверьте ссылки на актуальность, не копипастите бездумно
*Я говорю опу треда
Они это в 2021 поменяли, это просто оп взял старую иконку, я не знаю зачем.
Я постоянно пользуюсь гуглодоками, ибо 100500 машин, а там лежат нужные записи и все унифицировано. я даже верю что они бэкапы делают, в отличия от меня
Там все понятно, у нас есть определенная натренированность к привычному нам коду,если гибкости мозгов не хватает, то нужно просто попрактиковать котлин и будет норм.
мимо кодер работающий с дюжиной языков.
Динамикодресня. Нельзя делать овермагические языки на динамикодресне, просто лютая магия где даже IDE не поможет.
Попиши на котлине, потом на джаве будет казаться моветоном.
Так что определенно да, но ты ириски там смотри, а не двачеров спрашивай.
С хера он взлетел?
Котлин нейтив больше про разработку на айфоне.
Го очередно узкая ниша бэк-микропенисов, больше там ничего нет. Чудо, если появиться свой прокси язык, аля котлин или ts, поверх этого позора. Там подводных камней больше чем в js, так что не верь что в него можно вкатиться после го-тура, маркетинговый булшит.
Это местный безработный из джава треда, пытается хейтить котлин. Он реально думает, что хейтерством на двачах решает судьбу котлин.
Возможно тяжелая форма нарцисса, увы.
>Они сейчас "переосмысляют" фреймворк и делают совершенно новую 3-ю версию (короче. как с котлином 2 история)
Набрать студентов и пытаться ими делать языки, компиляторы и флагманские проекты. Такая шиза, что даже руководитель выгорел и ударился в психологию.
Давайте уже решим, что языки в которых нету многопоточного программирования - это детские/несерьезные языки. Ну не все пишут круды.
Бизнесу срать на твой юношеский максимализм, главное что теперь реально визуал выглядит везде одинаково, а не как раньше.
Да и новое лого говно, автор не умеет в градиент, тупо несемтричный около красный кончик.
И маскот спиздили у шиза с котом я тот шиз старых тредов
Так и есть, так и есть...
Жаль, что из-за этого помер Wasabi :(
P.s. wasabi это был веб фреймворк для котлина, но потом они решили (заставили) объединиться с командой котлина ради ктора
Неожиданно нормальное интервью, спб.
У китайцев же свой язык вроде нативный будет для этого. Но то, что ts поддерживается - это кал конечно, и кринж
Хз, но пока мы писали, уже создался тред здесь
https://2ch.hk/pr/res/3242329.html (М)
А что будет завтра с таким ростом популярности?
Он взял лого с гугла, не зная что лого обновилось давно потому что весь его кругозор это Немчинский и он кинул трольную картинку про npe, которая, якобы, вертит на одном месте все победы котлина с наллами реально редкая херня и котленист такое бы не кинул даже в знак самоиронии
Типа все еще не отмылся??
Я не знаю истории, но достаточно популярные фреймворки типо wasabi и еще один (я забыл название, но помню, что там было около 3 к звезд) закрыли т.к. пришел ктор и правдой/неправдой заставили пахать над ктором.
Что в итоге? Ктор баганный, ишью не фиксятся будто бы (одно почили, другое сломали и всё в рамках одного проблемного места) и называют себя "прогрессивным веб фреймворком".
Недавно вот искал баг с тем, что не работает post запрос. В тоннах логов и импортов я все же нашел ошибку - ошибка была в том, что идея по умолчанию импортировала iternal апи POST, а не открытую. Как ты понимаешь, анончик, это НИГДЕ (насколько помню) НЕ БЫЛО указано. Там был простой путь импорта, но он отличался от импорта Get. Я скопировал импорт Get и заменил Get на Post. Я минут 40 баг искал, пока не понял.
Еще была проблема с сериализацией через kotlinx.serialization, но это уже другая история...
Кстати, вообще не понимаю, нахрена они пытаются в хттп клиенты. Там уже есть свои фавориты в лице okhttp и прочих
Нарисуй rule34 с ним, я хз
Потому что у жид брейнса на каждого кнопкодава по 10 маркетолухов отсюда и все брендинги, лого и маскоты
>С хера он взлетел?
вижу все больше и больше вакух на го, его уже не остановить
>Котлин нейтив больше про разработку на айфоне.
Это свифт
>Чудо, если появиться свой прокси язык, аля котлин
Это кстати было бы интересно, сделать котлин бэкэнд для го, компилить котлин в го
>Это кстати было бы интересно, сделать котлин бэкэнд для го, компилить котлин в го
Ты ебанутый?
>сделать котлин бэкэнд для го, компилить котлин в го
Ты не поверишь, такие фантазии были, но у го не только кривой дизайн языка, там и рантайм наглухо неповоротливый.
>вижу все больше и больше вакух на го, его уже не остановить
Языку овер 10 лет, а ты все вкатух видишь. То что ты под кроватью там находишь у себя никак на общую статистику не влияет, а микросервисы завтра могут переписываться на что угодно, нулевой капитал кода.
Игрушечный язык это питон
А знаешь на каком языке ещё больше работы? На джаве.
Угадай во что компилируется котлин.
Нахуя его в го компилить, если можно сразу на го писать?
У котлина своя ниша уже занята и это андройд, на рынке жвм бэкенд это спринг. Нахера им переписывать компилятор и писать новый (который будет транслировать в go)? Они сколько лет пытались внедрить код котлина спринг, а теперь из-за соевых дауничей захотят сменить/добавить новый способ написания бэкенда? Ей богу, они даже сейчас иногда тупят люто с компилятором в жвм, им еще натив поддерживать и котлин/жс. Если ты настолько конченный и дрочишь на циферки, ну бери котлин/натив, там вообще прямой доступ к памяти есть и можно связывать код с плюсами и растом.
Еали для тебя синтаксис = уровень "игрушечности" языка, то ты просто маленький идиот, который даже банальную оптимизацию не нюхал.
Кстати, работы на джаве достаточно, просто требуется либо опыт, либо офис онли, либо то и другое. Если тебя не взяли на работу, то это не значит, что работы нет вообще.
>Что не так? На Го больше работы и продуктов чем на этом игрушечном языке
Как раз на питоне работы больше.
И в чём этот мем не прав?
Предыдущий тред: https://2ch.hk/pr/arch/2024-06-26/res/3038653.html (М)
Они даже костюм костыль но мделали
Жду ссылку на норм курс по Котлин 2. На рутуб еще не ступил ногой, но уже в говне
Ставишь сортировку по сидам и смотришь что люди раздают.
Если в ангельский умеешь, то вообще проблем не будет, тонна инфы включая офф мануалы.
Я только рутрекером пользуюсь, когда фильм скачать в супер-дупер 4к вместо 720 в ваших интернетах или adobe от KpoJIuKа самое то. Чем рутрекер плох?
Спасибо, любимый
Не знаю, я больше тапочкам доверяю. Раньше так вообще закрытая регистрация там была. Щас вроде как рутрекер стали
Почему Version Catalogs нет как в андроид студио для котлин проектов в intellij idea?
Долбаёб из андроид треда который утверждает что всё есть сразу нахуй иди.
Просто еще не добавили поддержку этого в идею.
Можешь сам сделать это, просто в папку с градлом сделай файл libs.versions.toml (вроде так) и все будет как в андройде
>Просто еще не добавили поддержку этого в идею.
Они походу это в плагин андроид запихали чтобы он генерил именно в version catalogs.
Возможно. Просто захардкодили, а динамически подключать либы в визарде в файл зависимостей от проекта (ну там спринг проект, ктор проект) еще не научились.
У котлина по умолчанию все классы финальны, может дело в этом?
Гайд на мастракт в котлине https://www.baeldung.com/kotlin/mapstruct-data-classes
val message = "Привет, меня зовут " + name + ", мне " + age + " лет"
val message = "Привет, меня зовут $name, мне $age лет"
Если второй сопосб круче то зачем оставляют первый?
чтобы делать так?
val message = "Привет, меня зовут" +
" $name, мне $age лет"
А почему он просто не может просто так сделать
val message = "Привет, меня зовут
$name, мне $age лет"
Очень странные решения, я не понимаю, дублирование функционала
val message = "Привет, меня зовут " + name + ", мне " + age + " лет"
val message = "Привет, меня зовут $name, мне $age лет"
Если второй сопосб круче то зачем оставляют первый?
чтобы делать так?
val message = "Привет, меня зовут" +
" $name, мне $age лет"
А почему он просто не может просто так сделать
val message = "Привет, меня зовут
$name, мне $age лет"
Очень странные решения, я не понимаю, дублирование функционала
90% смотрели курсы, 5% купили курсы за 50к+ и 5% смотрели документацию
Ну глянь. А вот по андроиду старый не советую. Там постоянно что-то меняют. Вот смотришь видео по старому курсу, а этот метод уже зачеркнут и deprecated помечен. Или в самой ide что-то меняется. Чем свежее тем лучше.
576x1024, 0:05
val message = "Привет, меня зовут " + name + ", мне " + age + " лет"
val message = "Привет, меня зовут $name, мне $age лет"
Если второй сопосб круче то зачем оставляют первый?
чтобы делать так?
val message = "Привет, меня зовут" +
" $name, мне $age лет"
А почему он просто не может просто так сделать
val message = "Привет, меня зовут
$name, мне $age лет"
Очень странные решения, я не понимаю, дублирование функционала
Даже моя туалетная бумага полезнее чем твой ответ. Ой, точнее, оно по жизни полезнее чем ты весь
720x960, 0:14
Коллега, жизненно? Это обычные девушки котлин программиста.
🐓 с андроид треда, ты? Узнал тебя, хорошие у тебя отцы.
Раньше в бйткоде джавы метод через + был такой:
Создать строку "Привет, меня зовут"
Создать новую строку с "Привет, меня зовут name"
Опять создать строку с "Примет, меня зовут name, мне"
И т.д.
Стрингбилдер позволял не пересоздавать, а дополнять уже существующие строки.
В котлине же, для скуфов оставили варианты и через +, и через стпингбилдер, но под капотом все равно будет стрингбилдер.
Вариант через $ вроде как сразу генерирует строку со значениями и там под капотом просто строка.
Если то же самое, то почему ide подсвечивает сложение строк и советует через ${} делать? Они шизы?
Есть некоторые спорные моменты в их философии языка.
Если это значение, которое уже по умолчанию имеет то значение, которое тебе надо, то пишем через $.
Пример:
val age = 10
println("I'm $age years old")
Если это значение. которое имеет какие-то доп. херню для норм значения, то надо писать через ${}.
Пример:
object AgeRest {
const val age = 10
}
println("i'm ${AgeRest.age} years old")
ты путаешь с /b разделом
Не рвись, вкатунец)
я вообще не об этом...
Я про то, что под капотом сложение через + и вставка через $ делается одинаково через string builder, если не ошибаюсь. Но ide подсвечивает, когда ты пытаешься складывать, и просит поправить.
Лично я нищий джун
Хорошо, продолжайте наблюдение. Мы с вами свяжемся.
Были такие ощущения. Допили бы они скрипты, было бы интересною
Кидайте новости и контент, аноны, безработных вкатунов на шарпах не кормите. после того как жаба получили свои шарпы, с синтаксисом на порядок круче, у них какая-то истерика пошла, хотя мы не пересекаемся вообще, хотя я не против юнити на котле
В андроид разработке с 99% вероятностью, ты уже не запустишь скрипт который скачал с гитхаба без правок. Основы можешь по книженциям и курсам и понять, но по факту это мусор. Только документация + свежий отсортированный по времени stackoverflow.
Вы видите копию треда, сохраненную 30 октября в 01:53.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.