Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 225 33 66
Kotlin #2 Аноним 29/03/24 Птн 15:44:45 3105288 1
1000008084.png 68Кб, 1500x720
1500x720
1000008083.jpg 198Кб, 960x914
960x914
Вся разработка на котлин, кроме андроид и ios.

>Что имеем:
+Современный синтаксис (реально удобный).
+Совместимость со всей 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
Аноним 29/03/24 Птн 20:17:25 3105760 2
изображение.png 397Кб, 900x900
900x900
>>3105288 (OP)
>+Современный синтаксис (реально удобный).
>+Совместимость со всей jvm инфраструктурой.
>+Возможность писать статический DSL прямо на самом языке.
>+Удобные лямбды и наличие простых функции.
>+Удобный тулинг в том числе и на бесплатной IDE (комьюнити версии)
>+Возможность нативной сборки, сборки в js, андроид и ios.
>+Корутины
+Вендорлок от жыдбрейнс
+Работает поверх джавы, можно легко пересесть с игрушечного языка на нормальный
Аноним 29/03/24 Птн 21:05:52 3105868 3
>>3105760
Почему джавист плачет за маской, но текст вроде как за джаву? Шизофазия профдеформация у джавистов?
Аноним 29/03/24 Птн 21:49:50 3105911 4
Шарп.
Аноним 29/03/24 Птн 22:56:47 3106029 5
16578132809960.jpg 266Кб, 720x1096
720x1096
>>3105911
Зачем он нужен, когда запретили вижуал студио? Нугет еще не забанен?
Аноним 29/03/24 Птн 23:08:53 3106042 6
>>3106029
Так и идею точно также запретили
Аноним 29/03/24 Птн 23:09:43 3106044 7
>>3105868
>Почему джавист плачет за маской
Это котлинодебил нацепил маску своего сахара поверх джавы
Аноним 30/03/24 Суб 00:15:05 3106072 8
>>3106044
Но на картинке джавист притворяется котлом, переделывай картинку, а то засмеют
30/03/24 Суб 00:22:58 3106076 9
>>3105288 (OP)
>Современный синтаксис (реально удобный).
Groovy.
>Совместимость со всей jvm инфраструктурой.
Groovy.
>DSL прямо на самом языке
Groovy.
>Удобные лямбды
Groovy.
>Удобный тулинг в том числе и на бесплатной IDE
Groovy.
>Возможность нативной сборки
GraalVM.
>сборки в js
ClojureScript.
>андроид и ios
Flutter.
>>3105760
>Вендорлок
Это окончательно перечёркивает всё перечисленное автором.
Аноним 30/03/24 Суб 00:28:01 3106077 10
image.png 668Кб, 640x582
640x582
>>3106076
>Groovy
>Groovy
>Groovy
>Groovy
>Groovy
Аноним 30/03/24 Суб 02:22:54 3106132 11
>>3106072
>Но на картинке джавист притворяется котлом
Вот, начинает доходить потихоньку. Вы по сути те же джависты, только синтаксический сахар поверх прикрутили, гордо именуя крутым языком, волосы покрасили и тыквенный раф пить начали, но основная суть не изменилась
Аноним 30/03/24 Суб 08:38:57 3106196 12
>>3105288 (OP)
>котлин
Как-бы нахуй не нужен. Тем более елизаров и жемеров свалили, а поддержка в IDE не дотягивает и даже до сотой части того, что предлагает джава плагин в IDEA. Был бум котлина где-то 2-3 года назад и даже в сбере (сбербучую, кста) писали что-то на котле, но ныне все переписали на последнюю джэву, т.к. там уже есть все нужные фитчи и не нужно ебаться с корутинами, которые все равно почти никто не умеет правильно готовить
Аноним 30/03/24 Суб 09:49:03 3106236 13
>>3106076
>>3105760
> вендорлок
На их оф. сайте написано, что это опен-соурс под лицензией Apache 2.0 , разве это не означает, что я могу взять котлин и сделать с ним что захочу? При чем тут жедбрейнс?
Аноним 30/03/24 Суб 09:57:22 3106242 14
show.png 2Кб, 256x50
256x50
>>3106042
Там у них отладчик проприетарный и прибит гвоздями к обоим visual studio (code). Что как бы намекает на лукавость кроссплатформенной разработки и честного попенсорса
Аноним 30/03/24 Суб 10:03:18 3106247 15
>>3106044
Но плачет джавист? Типа, за эти годы он пытался подрожать котлину, но так и остался позади? Или что?

Кстати, с появлением котлина, джава стала сдавать позиции в tiobe. То есть, забрав рынок мобилок, джава оказалось тырпрайзной, никому не нужной пустышкой? Теперь я стал понимать параллель с коболом.

Честно не понимаю какой смысл писать на джаве, когда есть котлин, это как писать на вижуал бейсеке вместо шарпа. Или на объектив-си вместо свифта.
Аноним 30/03/24 Суб 10:05:17 3106250 16
>>3106076
>Groovy
Динамикодресня.

>Вендорлок
С каких пор удобство стало вендерлоком? Хочешь блокнот - бери блокнот.
Аноним 30/03/24 Суб 10:07:15 3106252 17
>>3106196
>все переписали на последнюю джэву
Тоже перешли наконец-то с 7 джавы на 8.
Аноним 30/03/24 Суб 10:52:53 3106295 18
>>3106132
Жабаскуф, спок. Тут аргументация даже не нужна, когда от жабы буквально рвотный рефлекс. Не трясись, твой язык морально устарел, гибкие зумеры - синьеры скоро забудут о твоем языке, т.к. все новые проекты пишут на go/c#/kotlin/python/elixir/rust, что угодно, только не джава.
мимо KMP господин
Аноним 30/03/24 Суб 10:54:41 3106296 19
Аноним 30/03/24 Суб 13:53:45 3106453 20
>>3106295
Не думаю, что c# кому-то нужен, тоже старое перепичканное говно, где дефолто-стантарт это только либы мс, а вне этого мало кто пишет попенсорсное.

Хотел скачать старую комьюнити версию вижлы для старого ноута чтобы в дороге потыкать, но был послан нахер за 7 винду.
Аноним 30/03/24 Суб 13:56:10 3106457 21
>>3106453
> был послан нахер за 7 винду
Ну и правильно, хоть в чем-то шарпомухи базовички
Аноним 30/03/24 Суб 14:25:45 3106496 22
>>3106457
Продвигать винду через лок бесплатной ide, верх тупости, такое придумать могли только зумеры.
Аноним 30/03/24 Суб 14:41:17 3106508 23
17117103945910.mp4 1595Кб, 684x960, 00:00:08
684x960
Устроился джава разработчиком, сегодня давали первую зп, что-то мне у вас в джавовом интерпрайзе не очень понравилось, может на котлин перекатиться?
Аноним 30/03/24 Суб 15:45:34 3106584 24
>>3106295
>go/c#/kotlin/python/elixir/rust
Точнее так: go/python/elixir/rust, что угодно, только не JVM и C#.
Аноним 30/03/24 Суб 18:24:34 3106805 25
show.png 1Кб, 256x50
256x50
>>3106584
Экзотические помои в том числе и раздутый питон.

JVM мир богат и вокруг него много корпораций, в этом мире никогда никто не возьмет верх и не начнет доить юзеров, jvm языки так же свободны и сильны как и С/С++.

Хера у жабадауна бомбит, если котлин делает его jvm сильнее.
Аноним 31/03/24 Вск 02:00:03 3107389 26
>>3106508
Думаешь на котлине полную миску насыпят?
Аноним 31/03/24 Вск 08:55:02 3107453 27
>>3106805
>котлин делает его jvm сильнее
На самом деле нет. Это как со скэйлой, которая померла. Но она хотя бы после себя оставила тормозной спарк и кафку. Спарк еще где-то используют, а кафку переписали на джэву, лол
31/03/24 Вск 15:49:27 3107767 28
>>3105288 (OP)
>>Что имеем:
>+Современный синтаксис (реально удобный).
Обмазываться сокращениями, неявностями и лишними вскукареками аля def это удобно?
>+Совместимость со всей jvm инфраструктурой.
Ну нихуя удивили, впервые в мире такое сделали. Скалы не существует.
>+Возможность писать статический DSL прямо на самом языке.
Ну нихуя удивили, впервые в мире такое сделали. Груви не существует.
>+Удобные лямбды и наличие простых функции.
Ну нихуя удивили, впервые в мире такое сделали. Джавы 8 не существует.
>+Удобный тулинг в том числе и на бесплатной IDE (комьюнити версии)
Ну нихуя удивили, впервые в мире такое сделали. Интеллиж идея ведь с самой джавой-то не работает.
>+Возможность нативной сборки, сборки в js, андроид и ios.
Ну нихуя удивили, впервые в мире такое сделали. Грааль вм (натив, жс) и jvm (кроссплатформенность)-то не существует.
>+Корутины
Это та хуйня что в 10 раз код замедляет? Какая от неё польза, если на редком процессоре больше 10 ядер?
Аноним 31/03/24 Вск 16:09:10 3107784 29
>>3107767
А по делу есть что сказать?
31/03/24 Вск 16:41:12 3107809 30
>>3107784
То есть по делу ничего кроме смехуёчков не ответишь?
Аноним 31/03/24 Вск 17:44:17 3107861 31
>>3107767

> Обмазываться сокращениями, неявностями и лишними вскукареками аля def это удобно?

хуй его знает, где ты нашёл лишние вскукареки и неявности, болезный, хоть показал бы, а то может они только у тебя в кукушке есть

> Ну нихуя удивили, впервые в мире такое сделали. Скалы не существует.
>Ну нихуя удивили, впервые в мире такое сделали. Груви не существует.
>Ну нихуя удивили, впервые в мире такое сделали. Джавы 8 не существует.
>Ну нихуя удивили, впервые в мире такое сделали. Грааль вм (натив, жс) и jvm (кроссплатформенность)-то не существует.

И правда, хуйня какая-то: юзать один язык вместо целого вороха языков и технологий. Во-дурачки-то

>Это та хуйня что в 10 раз код замедляет? Какая от неё польза, если на редком процессоре больше 10 ядер?

Ну если ты васян из подзалупинского ПТУ и тычешь их повсюду, то да, они код замедляют, но вангую, что у тебя всё код замедляет, кроме твоих кривых ручёнок. Так-то их не везде пихать надо, мань.

Ну и вообще, ты бы каждый свой вскукарек подтверждал хоть какими-то пруфами. Ну или пиздовал бы к себе в курятник.
31/03/24 Вск 17:49:27 3107866 32
>>3107861
> хуй его знает, где ты нашёл лишние вскукареки и неявности, болезный, хоть показал бы, а то может они только у тебя в кукушке есть
> def
Совсем слепой?

> И правда, хуйня какая-то: юзать один язык вместо целого вороха языков и технологий. Во-дурачки-то
В прошлом треде уже обоссали. Всё это есть в самой джаве, за исключением разве что дсл, отсутствие которого на джаве не мешает использовать для этих целей груви вместе с джавой или боже упаси даже петухлин.

> Ну если ты васян из подзалупинского ПТУ и тычешь их повсюду, то да, они код замедляют, но вангую, что у тебя всё код замедляет, кроме твоих кривых ручёнок. Так-то их не везде пихать надо, мань.
То есть ты на полном серьёзе рекомендуешь меньше пользоваться фичей чтобы меньше была заметна деградация перформанса, что является смыслом многопоточности? Лул.

> Ну и вообще, ты бы каждый свой вскукарек подтверждал хоть какими-то пруфами. Ну или пиздовал бы к себе в курятник.
Да миллион раз уже было. https://www.youtube.com/watch?v=kwS3OeoVCno&t=1607s
Аноним 31/03/24 Вск 17:57:39 3107870 33
>>3107866
> совсем слепой?
Где ты def нашел в котлине? Скидывай ссылку на документацию, а не на лекцию про виртуальные потоки.
> всё это есть в жабе
Ну, так иди и программируя на жабе. Сюда то ты зачем пришел?
31/03/24 Вск 17:59:42 3107871 34
>>3107870
> Где ты def нашел в котлине? Скидывай ссылку на документацию, а не на лекцию про виртуальные потоки.
Упс, fun.

> Ну, так иди и программируя на жабе. Сюда то ты зачем пришел?
Не я пришёл, а тред с пиздежом в шапке на нулевой. Приходится опровергать пиздёж.
Аноним 31/03/24 Вск 18:18:00 3107887 35
>>3107871
То есть
fun foo(): Int
хуже чем,
int foo();
?

Наверное соглашусь, то что это метод можно понять и без ключевого слова, просто по сигнатуре (): Int. В целом хороший вопрос зачем это добавили.
Аноним 31/03/24 Вск 21:22:05 3108062 36
>>3106076
Двачую тебя, братишка. Вот прям Groovy реально недооценён. В последнее время его даже принято обсирать почём зря. А он хороший. Как дополнение к Java он прекрасен, да и самостоятельно тоже.
Аноним 01/04/24 Пнд 00:50:38 3108204 37
>>3106236
Пойди да сделай, потом расскажешь что получилось
Аноним 01/04/24 Пнд 08:29:32 3108312 38
>>3107809
Ахахах, опять этот долбоеб пришел, ору.
Спасибо за поднятое настроение
Аноним 01/04/24 Пнд 21:21:32 3109193 39
>>3108062
>В последнее время его даже принято обсирать почём зря. А он хороший.
Потому что динамо дристня уровня ЖС. Но в ЖС это поняли давно и начали делать статическую типизацию. А вот говноедов которые любят груви понять невозможно.
02/04/24 Втр 00:54:25 3109349 40
>>3109193
Ты же не удивляешься, что кто-то на петухоне хуярит? А Groovy вполне можно компилировать статически при желании, в производительности будет на уровне Java при той же лаконичности.
Аноним 02/04/24 Втр 09:23:36 3109512 41
>>3109349
На петухоне писать без типов уже давно дурным тоном считается
Аноним 02/04/24 Втр 09:39:02 3109533 42
>>3109512
Тем не менее пишут, еще и в промышленных масштабах
Аноним 02/04/24 Втр 11:44:36 3109644 43
>>3109349
>Ты же не удивляешься, что кто-то на петухоне хуярит?
Вопрос не в том, кто и как хуярит, а в best practices. Для фронта сейчас best practices использовать TypeScript, для питона 484.

>А Groovy вполне можно компилировать статически при желании, в производительности будет на уровне Java при той же лаконичности.
И как мне сделать так, чтобы в грейдл скриптах нормально работали подсказки по коду?
Аноним 03/04/24 Срд 15:13:21 3110769 44
>>3107453
Какая написана на java + Scala.
Аноним 04/04/24 Чтв 22:02:01 3112106 45
image.png 13Кб, 402x138
402x138
Так, я чет не понимаю?
Почему идея говорит Redundant 'asSequence' call
Мне говорили, что для последовательных преобразований надо последовательность использовать, которая как stream в жабе работает.
Аноним 04/04/24 Чтв 22:14:04 3112116 46
>>3112106
А, это потому что groupBy мапу возвращает, там же никак не применить всё за один проход
Аноним 05/04/24 Птн 00:39:35 3112267 47
gradle.PNG 6Кб, 379x136
379x136
gradle2.PNG 25Кб, 608x204
608x204
gradle3.PNG 6Кб, 284x114
284x114
gradle4.PNG 19Кб, 577x150
577x150
>>3109644
>И как мне сделать так, чтобы в грейдл скриптах нормально работали подсказки по коду?
Явно указывай типы, вот например для тасков и конфигов
Аноним 05/04/24 Птн 09:11:43 3112471 48
>>3112267
Почему люди добровольно соглашаются писать на языках с динамической типизацией? Это же прямой путь к багам.
Аноним 05/04/24 Птн 09:22:36 3112482 49
Аноним 05/04/24 Птн 09:26:47 3112493 50
>>3112482
Только потому что какие-то "персонажи" сделали тот или иной язык популярным и теперь тот же питон стандарт в научной среде. Новичок не выбирает на чем ему писать, долго пишет, привыкает что говнокод это норма, что баги это норма, что проще написать самому, чем разобраться в чужом и он начинает это говно ещё другим предлагать ведь раз он ест значит и другим нужно попробовать.
Аноним 05/04/24 Птн 18:23:41 3113035 51
>>3112471
Груви - это язык со статической типизацией, ты не можешь переменной присвоить значение другого типа.
Это так же язык с неявной типизацией, так же как и Котлин, где можно все на варах сделать, кроме разве что возвращаемого значения функции.
Аноним 05/04/24 Птн 18:35:03 3113052 52
>>3113035
Точнее он "optionally typed", как и джава, как и котлин
Через defы можешь инту присвоить строку, но это все равно что в джаве писать на обджектах, а в котлине на эни.

Этот код рабочий в котлине:
var b: Any = 2;
b = "adwd"
А этот в джаве:
Object a = 2;
a = "adawd";

Но если ты явно задаешь тип переменной, то груви так же выдаст тебе ошибку компиляции
Аноним 05/04/24 Птн 19:06:01 3113086 53
>>3113052
> пример кода
Жесть, я не думал что такое будет валидно
Аноним 08/04/24 Пнд 12:41:35 3116275 54
>>3113086
>Жесть, я не думал что такое будет валидно
Нормальный код. Просто подставь туда, более осмысленный тип:

CharSequence name = "Duke";
name= new StringBuilder(name);
System.out.println(name);
Аноним 08/04/24 Пнд 14:42:35 3116359 55
>>3113086
Полиморфизм, все наследуются от одного родителя и к нему могут быть приведены.
У котлина есть еще специальный нижний по наследованию тип, там есть кейсы, но без гугла не вспомню.
Аноним 08/04/24 Пнд 15:50:10 3116414 56
>>3116359
Да, но выглядит прям не очень. Как будто пайтон.
Аноним 08/04/24 Пнд 17:12:49 3116449 57
>>3116414
Ты с обжектом мало что можешь сделать, там хэши и приведение строки и примитивы синхронизации (в котлине выпилили).

Так что причем тут твой петухон, типизация не теряется, не путай полиморфизм с динамикодресней.
Аноним 08/04/24 Пнд 17:46:55 3116461 58
>>3116449
Ты можешь привести обжект к нормальному типу через перебор

if (drisnya is Manager) {
drisnya.doNothingAllDay()
}

Так что я вполне могу представить программу всю написанную на обжектах и будет оно выглядеть на питоновский скрипт
Аноним 08/04/24 Пнд 21:04:32 3116578 59
>>3116461
Ты проверил на тип и работаешь с ним, динамикодрисни не случилось, а если случиться, то мистер эксепшен тебе объяснит почему ты не развиваешься как программист и путаешь полиморфизм и динамикодресню.

А вот в квази-кроссплатформеном шарпе есть тип дайнемик, видимо кейсы бывают

Даже если спуститься до уровня твоего интеллекта и попробовать использовать как динамикодресню, то лучше когда есть такая возможность в типизированном языке, чем будет симуляция типов в динамикодресне.
Аноним 08/04/24 Пнд 21:34:41 3116614 60
>>3116578
Лол, тебе говорили что ты душный?
Аноним 08/04/24 Пнд 21:39:02 3116622 61
>>3116461
>>3116578
Так в питоне ты тоже можешь проверить тип переменной
type(i) is float
type(i) is int
Аноним 08/04/24 Пнд 23:00:59 3116681 62
>>3116622
>Так в питоне ты тоже можешь проверить тип переменной
Но не можешь ограничить тип переменной. Т.е. в джава/котлин ты говоришь, что тип Iterator и компилятор с рантамом тебе это гарантируют. А в питоне, у тебя только хинты.
Аноним 09/04/24 Втр 00:08:54 3116710 63
>>3116622
Там проверка и приведение типа, котлин просто сахарит это место.
Кстати, поймал очень приятных трах на час в питоне, когда по ошибке присвоил в существующую переменную и динамикодрисня вежливо это съела, создав плавающую ошибку.

В старой жабе тебя хотя бы отругали за другой тип, но в современных языках или практиках, переменные делают иммутабельными.

Типизация, даже кривая как в го, будет куда лучше потому, как проверка на этапе компиляции, а не в рантайме, в ветке if'ов, где крашится в лунную ночь, когда цветет сакура.
Аноним 09/04/24 Втр 08:07:08 3116806 64
>>3116710
Языки без статической типизации это самотыкающий велосипед, но ведь пишут на них что удивительно. Питон повсюду
Аноним 09/04/24 Втр 15:51:22 3117357 65
>>3116806
Писал промышленный код, с phpdoc для типизации (давно еще), все равно заставляли тесты писать и получалось, что ты и в функции чекаешь чтобы лишнее гавно не прошло, потом еще тесты пишешь и тоже по кругу одно и тоже проверяешь и это затрахивает.
Так что можно, но нафиг.
Аноним 09/04/24 Втр 16:25:17 3117374 66
>>3117357
Всё правильно делали. Лучше заехать инженера чем потом читать про очередной упавший самолёт
Аноним 09/04/24 Втр 21:17:32 3117584 67
>>3117374
>но ведь пишут на них что удивительно. Питон повсюду
Смысл в том, чтобы нормально писать на динамикодрисне, нужно три раза делать одно и тоже. а не про покрытие тестов
Аноним 20/04/24 Суб 21:27:26 3129989 68
Чет тред падает, как только джавадебил срыгнул. Давайте хоть обсудим korge и вообще, может ли существовать геймдев на котлине
Аноним 20/04/24 Суб 21:52:10 3130003 69
так и до обсуждения граальвм можно докатиться
Аноним 20/04/24 Суб 22:07:39 3130012 70
>>3130003
Так хоть какой-то пиар языка и (возможно) придут хорошие разрабы и напишут либы... Надеюсь...
Аноним 21/04/24 Вск 01:01:29 3130153 71
>>3130012
>придут хорошие разрабы и напишут либы
пишите сами
Аноним 21/04/24 Вск 01:04:29 3130156 72
Аноним 21/04/24 Вск 07:59:24 3130234 73
>>3129989
На Kotlin можно же писать для Java ME? Только платформа похоже совсем мертвая.
На Android можно запускать такие игры через эмулятор.
Аноним 21/04/24 Вск 08:17:42 3130239 74
>>3129989
> Геймдев на котлине
Без шансов. Уже есть C# для Unity и Blueprints/C++ для Unreal Engine. Остальные движки представлены на рынке в виде нескольких процентов.
Аноним 21/04/24 Вск 08:34:59 3130244 75
>>3130239
Да и Unity практически не используется в профессиональном геймдеве. В основном инди разработчиками.
Аноним 21/04/24 Вск 08:54:27 3130258 76
>>3130244
Открой любой сайт с вакансиями и обнаружишь, что 60 % это юнити и 35 % это анриал. Потом открой стим дб и отфильтруй игры с 10 000 отзывами по движку и увидишь аналогичные результаты. Игры с 10 000 отзывами это успешно-коммерческие игры.
Аноним 21/04/24 Вск 10:39:14 3130341 77
>>3130239
А возможно портировать kotlin на .NET? Или это очень сложно?
Аноним 21/04/24 Вск 10:43:22 3130348 78
image.png 1075Кб, 1024x715
1024x715
Аноним 21/04/24 Вск 12:18:04 3130407 79
>>3130341
Да нет, не так уж сложно, но зачем?
Аноним 21/04/24 Вск 13:20:16 3130483 80
Аноним 21/04/24 Вск 13:24:44 3130487 81
>>3130341
Но если ты спрашиваешь в разрезе геймдева - учти что в юнити неполный С#, насколько я знаю он не поддерживает некоторые фишки как LINQ например.
Но имхо, если ты идёшь в геймдев, то язык очень сильно теряет значение, в том смысле что тебе все языки геймдева так сильно интегрированы с движками, что это по сути свои отдельные диалекты, где есть правила что и как нужно делать конкретно в этом движке. Так что я бы на переиспользование опыта сильно не рассчитывал.
Аноним 21/04/24 Вск 18:39:05 3130841 82
Аноним 22/04/24 Пнд 13:45:49 3131630 83
show.png 1Кб, 256x50
256x50
>>3129989
Сам /зк сдох, там топовые темы ели живые, я сам отсюда ливнул, ибо моча трет посты и банит просто от фазы луны, (кстати, особенно в жабо треде). Теперь это раздел двача напоминает шизо-загон из 1,5 инвалида пытающиеся вечно вкатиться.

мимо оп первого треда
Аноним 22/04/24 Пнд 13:47:59 3131635 84
>>3130239
Шарп там на правах скрипта не боле, есть плагины и на котлин, просто вкатываться, возможно, будет проблемно, а так без разницы чем апи дергать, там вообще древний дотнет и шарп.
Аноним 22/04/24 Пнд 13:51:38 3131638 85
>>3130341
Был проект, один раз затух, потом возродили вроде, но кажется что затух снова.
Первая ссылка в гугле
https://discuss.kotlinlang.org/t/kotlin-for-net/12801

Смысла в этом не очень много, но шарп выглядит уже на фоне котлина древним куском говна
Аноним 22/04/24 Пнд 14:55:17 3131744 86
Ну постите сюда либы интересные типа Arrow, я хз.
Аноним 22/04/24 Пнд 21:12:34 3132251 87
>>3131744
Ну я недавно нашел https://github.com/anilbeesetti/nextlib библиотеку. Подключает ffmpeg к андройдовскому media 3. Очень удобно, теперь можно не искать, как бы hevc запускать на андройде
Аноним 22/04/24 Пнд 23:43:39 3132344 88
>>3132251
И какой вес у этой зависимости?
Аноним 22/04/24 Пнд 23:44:50 3132346 89
>>3132251
Also, зачем тебе h.265? Чем не устраивает h.264?
Аноним 23/04/24 Втр 00:25:08 3132365 90
>>3132346
Я накачал тонну видосов, а 98% из них в hevc....
Надо сделать свой плеер под это дело т.к. надо еще доп.инфу выводить.
Вес хз, пока не смотрел. Тупо нашел, завтра смотреть буду и тыкаться
Аноним 23/04/24 Втр 08:37:02 3132486 91
>>3132365
Я думал, что они обратно совместимы с h.264. Просто не забывай про размер, а то мы также всякого добавили в ЛИБУ, а потом нервно убирали когда заказчик захо ел размер дистрибутива в 10 раз меньше
Аноним 23/04/24 Втр 10:01:12 3132550 92
>>3132486
К сожалению, нет, не совместимы. А про размер спасибо, совсем забыл про это
Аноним 23/04/24 Втр 22:04:38 3133348 93
Доброй ночи, коллеги-красноглазики. Какой опыт работы с Ktor-server у вас? Хотелось бы послушать байки, да с какими багами вы столкнулись во время перехода со spring
Аноним 23/04/24 Втр 22:25:57 3133391 94
>>3105288 (OP)
Котлин кал, настолько лаконичен, что просто нахуй нечитаем
Аноним 24/04/24 Срд 00:54:15 3133515 95
Аноним 24/04/24 Срд 13:50:16 3133884 96
>>3133348
Там вроде обертка над нетти, ничего проблемного не ожидается.
По гига-чад тестам не так все быстро, но зато даже сорцы нетти читаемы (оч давно в это долбился, никакого говно-магического бинаря, а если читаемо, то все гибко).
Аноним 24/04/24 Срд 13:53:13 3133889 97
show.png 0Кб, 256x50
256x50
Кто-нибудь игрался с вебассембле на котле? Что там на нем есть, какие впечатления?
хотел говноигрушку для браузера сделать, дергать DOM как-то напрягает
Аноним 25/04/24 Чтв 15:25:50 3135027 98
Аноним 26/04/24 Птн 14:31:41 3136012 99
Как на Котлине обстоят дела с фрилансом?
Аноним 26/04/24 Птн 22:08:46 3136559 100
>>3136012
Ты куда звонишь, сынок ебаный?
Какой нахуй фриланс, чел
Аноним 26/04/24 Птн 22:10:31 3136567 101
>>3133884
Спасибо, как раз хотел начать пилить свой стартап.
А то, что он не blazing fast пофиг. Лучше стабильность и читаемость, чем выжигать глаза об rust/c++.
Аноним 26/04/24 Птн 23:20:05 3136620 102
>>3136012
Разве что Андроид.


Ну и в целом - вы заебали! На беке Котлин это Джава + вируальные потоки + МНОГО САХАРА. Любой нормальные джава разраб справится.
Аноним 27/04/24 Суб 01:52:14 3136685 103
>>3136012
Ты лучше проси как дела в целом с работой
Аноним 27/04/24 Суб 08:45:22 3136763 104
>>3136685
Ну и как дела с работой в целом?
Аноним 27/04/24 Суб 18:27:07 3137261 105
>>3136763
Всё плохо, котлин только в андроид разработке нужен, а там вкат закрылся ещё в 2023
Аноним 28/04/24 Вск 09:54:08 3137607 106
>>3137261
"Вкат закоылся", типо, для косакеров с курсов от СкиллКокса или для любых, не мидлов?
Аноним 30/04/24 Втр 10:05:16 3139462 107
>>3137607
Что мидлам и сенькам делать в мобильной разработке? Они гребут сотыги в банках.
Аноним 30/04/24 Втр 10:32:58 3139487 108
>>3139462
А банкам, мобильные приложения конечно же не нужны.
Аноним 04/05/24 Суб 19:32:55 3144895 109
image.png 150Кб, 800x467
800x467
Не сдох еще этот ваш Котлин? Не понимаю, зачем он нужен.
Аноним 04/05/24 Суб 20:28:25 3145015 110
Делаю приложение для телефонов на складе. Старая приложуха написана коллегами на киви(из питухона в апк). Производительность хромает, ну и обновление многочисленных зависимостей сборочницы это особый адок. Переезжаем на котлин+компоуз. Сразу появились подводные камни:
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, это я понял. Нужна аналитика по тому насколько одни способы хранения данные эффективнее других, и какие объекты, в частности канвасы, в байткоде быстрее исполняются.
Аноним 04/05/24 Суб 20:28:49 3145016 111
16741239950070.jpg 186Кб, 604x604
604x604
Делаю приложение для телефонов на складе. Старая приложуха написана коллегами на киви(из питухона в апк). Производительность хромает, ну и обновление многочисленных зависимостей сборочницы это особый адок. Переезжаем на котлин+компоуз. Сразу появились подводные камни:
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, это я понял. Нужна аналитика по тому насколько одни способы хранения данные эффективнее других, и какие объекты, в частности канвасы, в байткоде быстрее исполняются.
Аноним 04/05/24 Суб 21:28:03 3145067 112
>>3145015
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
Аноним 05/05/24 Вск 07:01:03 3145226 113
>>3145067
>Coil
Какая годная штука!
>UIState и Флоу
В виду простоты приложения использую более простой подход. Сделал простой класс для навигации и имею функцию, которая через when вызывает конкретный экран/функцию. Данные у меня не мутабельные, и хранятся вне компоуза, просто в массиве дата классов. Правда пока решил слепить в кучу класс навигации, название экрана, и placeholder для данных. Это чистый анти-паттерн, от которого многие начнут хмурить брови, но я вам скажу что если вы будете писать по 50+ экранов так как доки завещали, то вы быстро устанете
fun Draw(nav :Navigator, data: Models(), screenTitle: String)
Пока у меня все в одном
fun Draw(meta: MetaClass)
И данные в placeholder я не чищу, а просто перезаписываю на новые когда получаю новый json. Это бизнес логика, требующая быстрой расширяемости при максимально примитивной архитектуре, и чтобы за пару минут объяснить коллегам питонистам свои магические пассы в приложении.
>https://www.youtube.com/@PhilippLackner
Буду смотреть
Аноним 05/05/24 Вск 11:48:45 3145330 114
>>3145226
Понятно. Удачи тебе
Аноним 05/05/24 Вск 23:19:37 3145970 115
>>3145015
>Пока единственная идея это хранить скаченые пикчи файлами в отдельной папке, и проверять наличие пикчи перед скаичванием по URL.
Андроид? Там же у каждого приложения своя база есть, в ней и храни.
>4) Есть в сети годные гайды как увеличить производительность кода?
Тебе сначала нужно померить где именно производительность страдает, а не вслепую оптимизировать.
Если сеть хромает - и большие списки, логично асинхронно подгружать данные только для тех элементов списка что юзер видит. Ну и пережать картинки на сервере/сделать отдельные превью картинки, чтобы меньше загружать.
а вот это
>val вместо var, object вместо class, Imutable и Stable
в твоём случае ничего не сделает, я вообще не уверен в каком случае это хоть что-то сделает
иммутаблы - так это точно просадка производительности, но наверное все же не на твоих объемах
Аноним 06/05/24 Пнд 18:31:37 3146678 116
17118912982720.jpg 366Кб, 811x1068
811x1068
>>3145330
Спасибо! Все что сложнее формошлепства на компоузе не без подводных. Неспешно прощупываю кэширование пикч. Бодался с Койлом пока не обнаружил что начиная с 28 (вроде) сдк http уже не работает, и требуются https ссылки. Койл, самая популярная библиотека по кэшированию пикч из сети котлина, тупо игнорирует неприятное и работает не возвращая ошибки при сетевых ошибках. "Нет файла по адресу в сети, да и хуй с ним", решили разрабы. Аж самописный костыль вкрутить захотелось!

>3145970
>Андроид? Там же у каждого приложения своя база есть, в ней и храни.
На этот функционал с БД нужно время и причина. Достаточно скачать пикчу по URL, если она еще не скачивалась в R.drawable. Некоторые пикчи так сурово зашакалены, что запись в БД будет есть в разы больше места чем сама пикча весит. Зачем тогда БД? Чтобы что?
>нужно померить где именно производительность страдает, а не вслепую оптимизировать.
Пока получилось написать как получилось, плохенько, а потом уже стал урезать избыточную мутабельность и наследование. Как ни странно, увеличение количество классов и их инстансов заметно снижает скорость кода. То же самое можно сказать о стейтах. Обвесил функции @Stable и @Immutable где возможно, но не знаю что поменялось лол.
>иммутаблы - так это точно просадка производительности, но наверное все же не на твоих объемах
Есть данные по иммутаблам? Пока что я нахожу в интернете только инфоциганские методички без бенчмарков или отсылок к докам явамашины. То-есть буквально аргументация "траст ми бро".
Аноним 06/05/24 Пнд 19:17:16 3146721 117
>>3146678
1. https://android.libhunt.com/coil-alternatives
2. Какой дебил будет грузить картинки в базу данных? Используй кеш приложения (папка data в android) в качестве хранилища и просто храни в бд ссылки на эти самые картинки, лол.
Аноним 06/05/24 Пнд 23:41:53 3146932 118
>>3146678
>Есть данные по иммутаблам? Пока что я нахожу в интернете только инфоциганские методички без бенчмарков или отсылок к докам явамашины. То-есть буквально аргументация "траст ми бро".
По пробуй в цикле создавать Integer`ы, а потом int`ы, и сравни разницу. Вот Integer`ы как раз иммутабельны. Тут суть не в иммьютаблах как таковых, а в том что они порождают большой поток аллокаций/мусора (но на болшом объеме данных конечно). А это всегда хуже чем не аллоцировать. Но заметно только на сильной нагрузке.

>На этот функционал с БД нужно время и причина. Достаточно скачать пикчу по URL, если она еще не скачивалась в R.drawable. Некоторые пикчи так сурово зашакалены, что запись в БД будет есть в разы больше места чем сама пикча весит. Зачем тогда БД? Чтобы что?
Я тебя не пойму - делаешь микрооптимизации, которые тебе ничего не дадут, а на самые мощные оптимизации времени нет? Тебе это странным не кажется?
Что значит пикчи зашакалены? Вы архивируете картинки чтоли? Иначе запись в БД не будет больше чем пикча весит. Да даже в этом случае можно писать архивированную.

>Зачем тогда БД? Чтобы что?
Чтобы кэшировать картинки, ты же этого хочешь? Скачал, сохранил в БД. Потом отобразил. И никакой коил не будет тебе глотать ошибки или требовать https.
https://developer.android.com/develop/ui/compose/graphics/images/loading#disk-loading
Аноним 06/05/24 Пнд 23:49:56 3146937 119
>>3146678
>>3146932
Еще кстати мощная оптимизация, которую ты вероятно с коилом не получишь - упаковать все картинки в 1 файл и скачать разом, обычно это быстрее чем по одной качать (но нужно проверять).
Делаешь архив с превьюшками и архив с нормальными, быстрое качаешь превьюшки, в фоне качаешь нормальные, если долго качается и юзер запрашивает в этом время картинку - подтянуть одну отдельную в фоне. Скорее всего юзер успеет кликнуть максимум на 1-2 картинки пока полный пак не скачается.
Аноним 06/05/24 Пнд 23:57:12 3146942 120
Аноним 07/05/24 Втр 02:03:32 3146977 121
>>3146932
Погоди, в котлине же только ссылочные типы, а примитивные только у джавы, не? Или что ты имеешь ввиду под Integer и int?

Мимопроходил
Аноним 07/05/24 Втр 10:49:13 3147167 122
>>3146977
в теории котлин иногда использует примитивные типы под капотом
но это был просто наглядный пример иммутабельности
Аноним 07/05/24 Втр 14:21:17 3147399 123
Аноним 07/05/24 Втр 16:42:57 3147541 124
>>3146721
Оказалось что Coil это "Glide у нас дома" (в Котлине). В плане синтаксиса 1 в 1 местами. Еще не подключал глайд к проекту. Папка data не была доступна так как я решил скачивать медиа через DownloadManager, который относительно несложно вкручивается в приложение копипастом, живет отдельной жизнью в системе, не настаивает на https, и в ресурсы приложений доступа не имеет. Это очень странный и тупой инструмент, который подписывается на приложение и живет системе отдельно, сбрасывая медиа в Download (легко посмотреть скаченное из приложения загрузки). Все неплохо, только почему-то файлы виснут в очереди на скачку, а не качаются. Очевидно где-то не проверил настройки сети. От коила и глайда не отказываюсь. Надо же с чем-то сравнивать.
>>3146932
БД тема непростая. Знаний у меня в этом мало. Поэтому рискую надолго завязнуть в болоте "просчитался, но где?". Орнул с твоего подхода "прост заведи БД, делов-то на пять минут".
>>3146937
Бэкенд с данными не у меня, так что мою идею с упаковкой данных встретили без энтузиазма. Пикчи в основном все по http. Json'ы большие как и запросы из трех джоинов, так что рабочую бизнес логику я не могу поменять. Хочу сделать основу приложения относительно шуструю и расширяемую. А потом уже буду скучать делая 50+ экранов по побразцу, наводя всякую красоту для конечных пользователей.
Аноним 07/05/24 Втр 17:34:08 3147589 125
>>3147541
Если ты привык работать с ORM, но тебе чужда Room, то используй Realm.
Выглядит как Exposed, но намного проще и имеются сдк под андройд (exposed еще к проекту подключать минут 10 надо, а тебе так вообще часов 50)
Аноним 07/05/24 Втр 17:35:36 3147593 126
Аноним 07/05/24 Втр 21:22:08 3147849 127
>>3147541
>Орнул с твоего подхода "прост заведи БД, делов-то на пять минут".
Ну вообще на уровне записать/считать из одной таблицы данные БД тема очень простая. И не нужно ничего заводить, она есть в каждом Андроид телефоне.
https://developer.android.com/training/data-storage/room

>Json'ы большие как и запросы из трех джоинов, так что рабочую бизнес логику я не могу поменять.
Это я не понял вообще к чему? Что за джейсоны? Что не можешь изменить алгоритм показа картинок?
Ну смотри сам, экономия на спичках тебе сильно много не даст. В любом приложении основные узкие места - это IO, объем передаваемых по сети данных, работа с базой. Чем больше из этого уберешь, тем быстрее будет.
Судя по твоему описанию, проще всего будет на первом старте показывать лоадинг скрин и грузить все картинки в кэш - уж через фреймворки или нет - это тебе видней.
Но если у тебя на бэкэнде скуфы, которым похуй на оптимизацию - это пиздец, тут только сложнее и сложнее кэширование на твоей стороне делать. Кэшировать входищие данные, асинхронно отправлять запросы на бэк, перепосылки, и т.д.
Аноним 09/05/24 Чтв 12:58:33 3149477 128
1682553148.jpg 296Кб, 964x768
964x768
>>3147589
>>3147593
>>3147849
Ух я постыню накатал конечно
Ты описываешь архитетуру вк или ватсаппа, записывающих в БД гигабайты мусора, которые потом надо в фоне апдейтить, пытаясь хоть как-то сохранить актуальность данных. Да, когда у тебя 2 диалога вк, и через стенку стоит хороший роутер, то все это работает как часы. Я все понимаю, что ты начитался инфоциган на хабре, поставил им лайк, и даже подписался на их телеграмм канал, но не все разработчики вокруг тебя делают мобильные казино и мессенджеры, где с БД только в путь.

У нас тонкий клиент с простым кэшем, то-есть приложение, которое скачивает данные по товарам JSON (нестабильные и изменяемые) и картинки (условно неизменяемые). Данные актуальны до тех пор пока мы не ушли с экрана. А картинки часто повторяются. Бэкенд лежит на плечах скуфов, и что REST сервер, что его запросы, не особо оптимизированы. Все пикчи в рабочем хранилище расшарены по http (скуфы не хотят учить сертификаты), а резервный сервер с бэкапами пикч отдает их по https (через load balancer для e-shop). В сумме на серверах около полумиллиона картинок, из которых на телефоне используются несколько сотен пикч в день, условно до 2000 за неделю на устройстве.

Пока что я знатно соснул с реализацией кэширования в памяти приложения, и вынужден отложить ее. Возможно дейтвительно придется пересесть на БД, где будет одна таблица с двумя полями: ключ и блоб. Современный апи андроида пытаются превратиться в вендорлочное анально огороженное говно. Каждые несколько релизов апи все меньше директорий доступны, и все больше ограничений, например использование алиасов вместо явных указаний директории. http пока еще разрешают включать отдельной опцией, но это только пока. Библиотеки с пикчами на котлине вообще не в курсе что существует http, например. Загрузка скаченных в памяти/ассетов файлов это чистокровные костыли от гугла. Пока я ебался с этим, у меня аж натуральная тряска с аутичным тиком началясь. А подгрузка ресурсов (вшитых в апк строк/пикч, в режиме ридонли) наоборот работает на изи.

То-есть глобохомо гугл видит идеальное приложение так: на старте в приложении есть только 5 иконок навигации, а остальные 99% процентов приложения скачивается через https в неэффекивную БД написанную индусами, которая по каждому пуку апдейтится чтобы ресурс ссд и внутрення память максимально страдали. В оперативке крутятся только телеметрические зонды, а placeholder для хранения изменяемых данных это в вовсе утерянная технология древних, запрещенная самим гуглом. Так как бд приложения это вечнорастущий файл без бэкапа, то он со временем вероятность словить фейл стремительно растет, и никакой рут не поможет среднему юзеру вытащить свои файлы когда будет краш, так что лох в панике побежит покупать новый телефон, да подписываться на платные облака чтобы больше не терять свои картинки с котиками, еот, или гомониграми (на случай важных переговоров в авточате). Работу с файлами приложенями полностью запретят и назовут опасным антипаттерном.
Аноним 09/05/24 Чтв 14:52:31 3149586 129
>>3149477
Ну если ты лучше знаешь как надо делать - то чего здесь спрашиваешь?

И что это за биполярочка - сначала база - это мусор и инфоцыгане, а потом ой никак, придется с базой делать. Там разные люди твой пост что-ли писали.

>>3149477
>Загрузка скаченных в памяти/ассетов файлов это чистокровные костыли от гугла.
Опять же знаешь как правильно - делай как правильно, только зачем тогда за советом приходить?
Аноним 12/05/24 Вск 05:20:00 3152494 130
Возник вопрос про DI. А стоит ли оно того? Думаю игру сделать и вот встрял "нужен ли DI в принципе?". Помимо di реквестирую какую архитектуру/структуру файлов строить (может что новомодное есть)
Мимо мобайл дев
Аноним 12/05/24 Вск 07:57:57 3152508 131
>>3152494
В случае игр может иметь смысл. Я не игродел, и больших приложений не делал, но предполагаю что можно делить модули так: логин/юзердата/сессия, оффлайн фичи, онлайн фичи, донат/магазин/оплата. На счет структуры скажу что андроид студио сама тебе сделает дефолтную структуру. В каталоге res (ресурсы) уже есть места куда добавить строковые константы (полезно для локализации), изображения, анимации и шрифты. Еще есть папка ассетов, которая не создается по дефолту в проекте.
Аноним 12/05/24 Вск 08:10:44 3152511 132
>>3152494
Хотел спросить пару вещей у мобайл дева:
1) Как из эмулятора АС стучаться в локалку? Не получаю ответ от сервера хоста 10.0.2.2 (апи 34, таргет 24, все сетевые штуки разрешил).
2) Как внутри приложения запускать http сервер чтобы с него брать данные (для теста пока нет нормального сервера)?
3) Почему при скачивании файла обычно возращается его id, по которому мы обращаемся к нему, а вызов напрямую в доках стараются лишний раз не упоминать даже?
Аноним 12/05/24 Вск 09:29:05 3152544 133
Аноним 12/05/24 Вск 09:49:12 3152559 134
>>3152544
А вообще, я предполагаю, что в андройде сделано для какой-то йоба абстракции и чтобы при смене локации файлов, апи не сломалось.
Ну и как отмечал выше - безопасность тоже.

Андройд слишком сильно завязан на всяких избыточных абстракциях и сильная фрагментация была на ранних этапах
Аноним 12/05/24 Вск 09:53:10 3152564 135
17146380777853.jpg 426Кб, 1920x1080
1920x1080
>>3152508
Ну пока идея добавить и сделать слабые связи между ui и service слоем, чтобы можно было быстро фиксить баги, но думаю, что это тупо, не?

Пикча добавлена просто так, не бейте
Аноним 12/05/24 Вск 18:28:16 3153115 136
image.png 84Кб, 800x565
800x565
>>3152564
Посмотри, здесь описывается архитектура что ты ищешь. Активити+Сервис. В схеме много андроидовских абстракций вызывающих друг друга, и эта лапша из взаимных коллбэков отлично работает на андроиде. Как я понял, сервисы придумали для того чтобы даже после закрытия или краша активити апдейт бд и хитровыебанные запросы на сервер не прерывались неожиданно. Не знаю, три в ряд или мобильную дрочильню с анальной слежкой за сессиями китов ты проектируешь. Очень разные проекты.
https://www.pvsm.ru/android-development/8030
Аноним 12/05/24 Вск 18:36:18 3153129 137
>>3153115
О, спасибо, анончик, пойду читать сейчас.
Хочу сделать 2d гача дрочильню с онлайн чатом и боями, вот такие вот дела... Надеюсь продать этот проект кабан-кабанычу и уйти в закат
Аноним 12/05/24 Вск 19:06:42 3153183 138
Есть ли смысл переписать REST сервер 200 строк с питона на котлин? Еще есть вариант на счет го, но синтаксис выглядит как говно.
Аноним 12/05/24 Вск 19:45:52 3153271 139
photo2023-06-16[...].jpg 119Кб, 538x800
538x800
>>3153129
У меня есть мечта взять старое приложение (chan burauza, для форчана), и скопипастить функционал для ридонли в компоузе. Приложуха старая под старый телефон, и она на новье скорее всего откажется работать.
Аноним 12/05/24 Вск 20:53:27 3153392 140
>>3153271
Если хочешь помощи, то конечно помогу
Связь через почту/дискорд?
Аноним 12/05/24 Вск 20:57:04 3153410 141
>>3153183
Если хочешь в будущем увеличить сервер, то да.
Ktor/javalin идеально подойдут
Аноним 12/05/24 Вск 23:53:17 3153604 142
>>3153183
Странный вопрос - зависит от того чем ты руководствуешься.
Вслепую я бы тоже рекомендовал ктор/джавалин
Аноним 21/05/24 Втр 16:04:14 3164234 143
>>3153410
>>3153604
Чет-т взглянул на примеры рест апи в котлине и го. В основном их сетевые фреймворки это какая-то утомительная хуйня как паскале, где синтаксического сахара около нуля, и надо всякую типовую ебалу бойлерплейты и роуты прописывать каждый раз. Ненавижу большие бойлерплейты в типовых задачах. На питоне сетевой стек уже тянет на 21 век, уже освоил нормальные декораторы, да еще и разными фреймворками позволяет обмазаться.
Аноним 21/05/24 Втр 17:29:31 3164343 144
1598818341705.jpg 347Кб, 1024x626
1024x626
В общем, опять выхожу на связь. Еще на той неделе заборол кэширование по http на помпоуз. Так как на работе никто настраивать https не будет, и новомодный coil работает как-то изотерично и без http, решил вопрос максимально примитивно. Инет легко взлетел когда я заменил помойный эмулятор android studio на физическое устройство и сделал проброс на локалхост компа.

С сетью работа идет через httpok3, и битмап из body сохраняется в кэш. Подводный в том что в случае когда body NULL (нет инета, неверный адрес), запрос крашит приложение. В хеллоуворлдах не пишут как обработать ошибку, но в гите есть нужная строка (достаточно закрыть body в конце запроса). Писатели библиотеки для языка, главная фишка которого это элегантная обработка NULL, насрали себе в шаровары при получении NULL в body.

В общем, приходит JSON со строковыми данными и ссылками, после чего делаются запросы в корутинах чтобы загрузить пикчи в кэш. Затем sleep 300ms чтобы данные точно успели сохраниться. И рисуем пикчи в ленивом списке. Когда файла нет, ставится заглушка. Обрывы связи на 3 секунды (переход между роутерами) бывают часто (из-за чего и началась эпопея с кэшированием). Как делать повторное скачивание, еще не продумал.

Понемногу освоил события физических клавиш (стрелки, сканер, назначаемые ф1-ф4, прочее). Не очень весело дела с обработкой событий клавиш в компоуз: 1 в 1 как в дельфи, будто тщательно списывали. Вешаются только на элементы гуи, и только когда элементы в фокусе. Да еще и зависимости очень фрагментированы. Чтобы обработать события нажатий, надо почти 10 импортов сделать. Не очень круто что стрелки работают по умолчанию, и есть ровно 1 глобальная обработчик, это backspace. Хочется сделать глобальный обработчик по клавишам, и переназначить стрелки, но на компоузе решили не заморачиваться. Придется забыть о планах и ограничиться малым.
Аноним 21/05/24 Втр 20:22:54 3164534 145
>>3164234
Не понял, а в питоне роуты ты прописал 1 раз и на всю жизнь?
Аноним 21/05/24 Втр 20:29:41 3164554 146
>>3164343
>Затем sleep 300ms чтобы данные точно успели сохраниться
Зачем при такой охуенной синхранизации что-то оптимизировать было? Что значит "данные точно успели сохраниться"?
Аноним 21/05/24 Втр 20:44:42 3164592 147
>>3144895
Это какой-то троллинг?
Сделать котлин презентабельнее Аноним 21/05/24 Втр 20:50:34 3164599 148
186165540-289af[...].png 11Кб, 396x295
396x295
Была проблема парни что в линуксе не было иконки котлина для .kt, а у джавы была, то есть котлин отображался как текстовый документ, не солидно!!!
Я порешал вопрос, в убунту добавили, в поп! ос добавили, в линукс минт добавили, единственное где не удалось мне, это чтобы добавили в Ubuntu Kylin (китайская убунта), потому что там перекати поле в гите. Везде где надо в популярных добавили, моя миссия с иконкой котлина закончена. Самое странное почему это должен был делать именно я? Всем котлинистам было настолько пофиг?
Аноним 21/05/24 Втр 20:58:01 3164607 149
>>3164599
Только правда говоря надо ждать пока выйдет минт и поп основанные на 24.04 убунте
Аноним 21/05/24 Втр 21:34:25 3164638 150
Kotlin in Action, Second Edition есть у кого?
KOTLIN 2.0.0 RELEASE Аноним 21/05/24 Втр 23:05:39 3164775 151
Аноним 22/05/24 Срд 03:39:27 3164905 152
>>3164554
Взял много для запаса. Буду понемногу уменьшать во время теста в проде. Надо замерять время обработки запросов при высокой нагрузке, а это еще в будущем
Аноним 22/05/24 Срд 12:20:04 3165195 153
>>3164905
Ну вот ты сам и ввел наибольшую проблему, которую тебе предстоит оптимизировать. Даже две в одной - тут тебе и гонка потоков и тормоза уровня лишнего запроса в базу.
Аноним 22/05/24 Срд 12:26:10 3165207 154
>>3164775
Как новый компилятор компилировать стал? Шустрее?
Аноним 22/05/24 Срд 12:58:02 3165241 155
>>3149477
>At first I was like
>инфоцыгане, гугол, антипаттерны, мусор, архитектура, тонкий клиент, неэффективно!
>>3164343
>but then
>коллеги, жду в слипе 300 мс, авось данные придут
чет прямо с подливой кекнул с этого архитектора
Аноним 22/05/24 Срд 13:39:13 3165282 156
>>3165207
Не тестил скорость, только фичи некоторые.

Is null удобно, но пока не работает в идее т.к. там синтаксис максимум 1.9

Кроссплатформенный код тоже удобно сделан теперь, но компоуз пока что не работает с 2.0.0 котлином, ждем ksp 2 и compose 2
Аноним 22/05/24 Срд 14:18:39 3165350 157
>>3165241
В проде используются такие костыли и антипатерны (по менению гугла), что ты разочаруешься в человечестве. Лучше предложи свое решение
Аноним 22/05/24 Срд 14:22:26 3165357 158
Аноним 22/05/24 Срд 14:36:12 3165375 159
>>3165357
>ColdStorage
Спасибо. Описание заинтриговало. Прям та идея которую я описывал. Впервый раз вообще вижу упоминание проекта, да и в гугле около нуля информации кроме гитхаба. Видимо как обычно шиз одиночка написал, возможно даже гениальный шиз. Последний коммит был в 2020, когда компоуз еще у гугла в яйцах плескался, но надеюсь к современому котлину с компоузом получится подключить.
Аноним 22/05/24 Срд 14:58:25 3165413 160
Нашел фреймворк рест котлин похожий на типичный рест фреймворк на питоне. Quarkus. Вид похож на человеческий:

@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, так что смысла в этом фреймворке мало.
Аноним 22/05/24 Срд 16:52:47 3165578 161
>>3165413
Если ты про автоматом установку зависимостей, то многие адекватные фреймворки предоставляют визард (или ультимейт идея)

Кстати, выглядит как будто spring
Аноним 22/05/24 Срд 22:49:29 3165949 162
javalin.PNG 24Кб, 572x238
572x238
>>3165413
Так это стандартная штука, даже спринг такой же. По-моему пик больше похож на питон, хотя у меня на питоне опыт небольшой

>В общем нельзя в натив котлин собрать и запустить в kts, так что смысла в этом фреймворке мало
Ничего не понял, что ты пытаешься сделать?

>>3165578
>Кстати, выглядит как будто spring
Естественно, они оба так выглядят
Аноним 22/05/24 Срд 22:52:04 3165953 163
>>3165375
Всегда пожалуйста!
Аноним 23/05/24 Чтв 16:39:31 3166819 164
17006650954430.png 216Кб, 604x604
604x604
>>3165949
Красиво. Так я не понял, жавалин в первую очередь для явы делали или для котлина? Почему в гибабе несколько языков? Я, вот, яву только читать умею, и если подавляющее большинство ответов в мануалах и стаковерфлоу будет на яве, то не осилю.

>>3165953
ColdStorage в двух местах очень близок к тому что я пишу, только на других зависимостях (более актуальных по моему мнению, ибо автор писал код в 2020), так что буду оттуда активно взаимствовать, посматривая в исходники. Ну и там автор заболел класической питоньей болезнью - клать класс в класс чтобы вызвать объект из объекта, и складывать в другой объект, при том что кода меньше 1000 строк.

>>3165578
Не, я о том что питон почти всегда по дефолту предустаовлен. Достаточно запакетировать сервер с зависимостями, и в таком виде распостранять по локалке. Клиент буквально одной командой поставит не вспотев. На го еще пизже, что даже в голый контейнер можно поставить без рантайми (правда язык ГОвно).
Аноним 23/05/24 Чтв 20:34:17 3167047 165
>>3166819
>Красиво. Так я не понял, жавалин в первую очередь для явы делали или для котлина? Почему в гибабе несколько языков? Я, вот, яву только читать умею, и если подавляющее большинство ответов в мануалах и стаковерфлоу будет на яве, то не осилю.
Вообще для Явы , закос под котлиновский ктор. А какое это значение имеет?
Аноним 23/05/24 Чтв 20:40:35 3167053 166
>>3166819
>Не, я о том что питон почти всегда по дефолту предустаовлен.
На линуксе разве что, на Винде нет. В любом случае ты и джаву одной командой поставить можешь, через вингет или аптгет
Аноним 24/05/24 Птн 03:24:07 3167330 167
>>3167047
Ну технически я начинаю теряться когда импортирую ява зависимость и понимаю что не могу сходу сразу сказать, нужно ли создавать nullable переменную/объек или нет. Если бы либа была полностью в котлине, так мы сразу а гайдах написали что тут используем ?. там !!. Соотв буду попадать на null pointer exception по невнимательности.
Аноним 25/05/24 Суб 16:12:12 3168812 168
>>3164775
Ничего особенно интересного нет, увы. Просто улучшили то, что есть.
Хотя я хз что нового можно добавить для котлина. Я бы хотел какой-нибудь синтаксис прикольный, который ещё больше позволит сокращать код. Мб функциональщины побольше
Аноним 26/05/24 Вск 05:13:11 3169329 169
>>3105288 (OP)
Немного новостей про котлин:

Вышел котлин 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.
Аноним 26/05/24 Вск 05:15:03 3169331 170
Аноним 26/05/24 Вск 09:07:44 3169372 171
image.png 330Кб, 1276x455
1276x455
Гугл показали новую навигацию. В этот раз выглядит как говно, ну то-есть как обычно. Когда уже будет что-то адекватное в виде:

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() }
}
Аноним 26/05/24 Вск 10:17:07 3169423 172
>>3169372
а что поменялось? Я чёт нифига не понял
Аноним 26/05/24 Вск 12:06:56 3169520 173
Аноним 26/05/24 Вск 15:23:43 3169889 174
>>3169520
Да не за что.
Думаю делать такую выжимку, когда выходит несколько интересных обновлений и рассказывать общее. Может по ктору и exposed буду пилить т.к. очень интересный стек.
Аноним 26/05/24 Вск 18:29:14 3170101 175
>>3169423
Вроде навигацию, лайфсайкл и ресурсы доступны на большем числе платформ (меньше платформозависимых костылей). Правда такое чувство на данный момент на мультиплатформе пишут 3,5 энтузиаста в надежде на скорую декостылизацию. Житбрейнс и Гугл делают ставку на то что те апи что есть на андроид будут работать везде, и им похуй на рефакторинг на данный момент. Целятся в вебе и айос взлететь залететь, но это пока только на слайдах. В чате в телеге почти все мультиплатформеры пишут в связке андроид+пк, и то часто обмениваются костылями для пк.
Аноним 26/05/24 Вск 18:33:22 3170107 176
>>3169889
>Пиши, а то такие треды тонут.
Аноним 26/05/24 Вск 18:42:28 3170113 177
>>3170101
Я не понимаю этот дрочь к мультиплатформе. Это преподносится как киллерфича, но на деле просто группировка кода и все же?

Куда там все силы идут, на что? Полгода назад нужен был десктоп, вспомнил про шум мультикомпоза, думал наверну, а на деле ни доков, ни примеров, понюхал бибу и ушел

Или там финансирование жестко свернули или кто-то жестко стал пилить бабло. Даже вот этот котлин 2.0, стыдно показывать, ноль реальных технологий, сахара и либ.
Аноним 26/05/24 Вск 18:43:03 3170114 178
image.png 71Кб, 877x398
877x398
>>3169520
Ну вы там держитесь))
Аноним 26/05/24 Вск 18:44:27 3170115 179
>>3170113
Там даже сравнение типа есть, мол флаттер против мультиплатформы. Я так понимаю это рабочий кросс флатер против пустого котлин-нейтив? Или что? Может кто объяснит, реально не в теме.
Аноним 26/05/24 Вск 18:45:22 3170117 180
А можно ли как-то в init-блоке получить поля класса в том же порядке, в котором они вызывались в конструкторе? Звучит как шиза, но ине нужно чтобы data class хранил в себе порядок переданных полей.

Чтобы для объектов Person(name="John", age="20", citizenship="US") и Person(age="22", citizenship="CA", name="Michael") можно было бы написать функцию которая бы возвращала ["John", "20", "US"] в первом случае и ["22", "CA", "Michael"] во втором, как пример?
Аноним 26/05/24 Вск 18:53:00 3170120 181
>>3170117
Напиши такую функцию, в твоем желаемом порядке (каждый раз разный порядок - не имеет смысла, нужен какой-то твой стандарт).
Аноним 26/05/24 Вск 19:21:37 3170151 182
>>3170113
Вопрос мультиплатформы у Котлина это вопрос жизни и смерти: либо сосать+лежать под сапогом у гугла с явой на андроиде, изредка поглядывая на мертвый сектор дестктопа (расклад на сегодняшний день), либо наобещать золотые горы вебмакакам и нищукам без макбука (айос разработка это обязательно мак), и пустить корни везде.

>>3170115
Посмотрел эти дебаты флаттера с котлином. В общем флаттер это огромные всратые портянки кода, благодаря которым можно делать сложнейшие анимации и все что угодно на любой платформе при предсказуемом результате. Котлин локаничен и прост для вката, но красивых анимаций с виджетами и образцовой мультиплатформеностью от него ждать рано. То-есть флаттер это стабильное могучее кровавое легаси, которое могет в любое ебанутое "сделайте так чтобы красиво было", и писать на нем это наверное полный пиздец, а котлин уже сейчас используется для не особо сложных приложений, и только разрастается до размеров флаттера.
Аноним 26/05/24 Вск 19:24:30 3170159 183
>>3170101
Ну, будем надеется!

Кстати, Movavi тоже уже перешла к мультиплатформе
Аноним 26/05/24 Вск 19:32:43 3170168 184
>>3170113
В мультиплатформе используется обычный компоуз, но специфичная документация находится здесь. Кстати, не вся т.к. большая часть 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) -> // код} это котлиновская версия
Аноним 26/05/24 Вск 22:48:42 3170280 185
>>3170120
Я тут использовал некий класс Person, но вообще идея была в том чтобы хранить URL-параметры для API где их порядок важен. Чтобы в одном классе инкапсулировать всю тайпчеки и преобразования и не таскать мапу из функции в функции. Но альтернатив, видимо, нет.
Аноним 27/05/24 Пнд 00:28:28 3170321 186
Есть ли смысл учить котлин если не знаешь Java ?
Аноним 27/05/24 Пнд 03:54:26 3170369 187
>>3170321
Тебе по факту джаву знать на уровне синтаксиса надо, а это 6 часовой курс на ютубе от условного индуса.

А в целом да, смысл есть, если для себя учишь. Большинство крупных либ по типу gui, ORM, backend web уже есть на чистом котлине (compose/korge, exposed/ktorm/sqldelight, ktor/javalin)
Если язык понравится и захочешь больше углубиться, то джава необходима т.к. слишком много документации написано на чистой джаве, без упоминания котлина. Хотя данный код может запускаться (и тебе придется это делать) и на котлине
Помогите разобраться Аноним 27/05/24 Пнд 05:55:00 3170380 188
image.png 85Кб, 518x479
518x479
Я не могу добиться нормального объяснения от чатжпт потому что у него тупо нет данных чтобы объяснить такую тему, он начинает нести пургу.

Почему говорят что в котлине нет подстановочных знаков? Есть же вариативность. Это потому что это как-то концептуально другое или это надо воспринимать буквально что нет знака "?", поэтому wildcard собственно нет.
Аноним 27/05/24 Пнд 12:37:06 3170708 189
>>3170321
Если у тебя вкат с нуля, то стоит, просто потому что там база си-синтаксиса. А так не нужно, большую часть времени там API либ дергается, ровно как и в котлине и в других языках.
Аноним 27/05/24 Пнд 15:37:26 3170960 190
>>3170380
А разве это не одно и то же?

Погуглил, посмотрел, вроде одно и то же
Аноним 27/05/24 Пнд 16:04:48 3170982 191
>>3170321
Стоит в первую очередь учить котлин. А жабакод достаточно подтянуть до уровня "умею читать". Причины:
- чистая ява вызывает непреодолимую тягу писать абстрактными классами, а так же сеттерами и геттерами
- на яве много годных статей, которые не всегда есть в котлине
- в доступе тонны примеров на яве, который можно копипастить в андроид студио, и он будет сам конвертироваться в котлиновский
- знание жабы сейчас нужно только чтобы пройти интервью, а на работе уже будет переписывание на котлин либо поддержка жабы
- на андроид есть библиотеки на яве, которые не портированы на котлин, но достаточно лишь создать экземпляр класса явы не вдаваясь в детали
Аноним 27/05/24 Пнд 17:04:08 3171046 192
>>3170982
>в доступе тонны примеров на яве,
Ох уж эти легаси примеры, вкатывался давно в джаву, по рекомендациям поиска начал вкатываться в стек EE. Оказалось он не нужен, а если юзается то только контейнер сервлетов, да и это уже моветон. Такие открытие ненужны вообще.

Зная котлин ты будешь знать джаву, если прям надо будет читать сорцы, подтянешь походу.

Это начинать с нуля не очень, котлин специфичен по синтаксису, все другое будет непривычно. Как и котлин после джавы.
Аноним 28/05/24 Втр 00:45:19 3171457 193
17133441385991.mp4 8110Кб, 640x360, 00:06:35
640x360
>>3170960
Если это действительно одно и тоже, то документацию делал какой-то недалекий красноглазик.
Интересные библиотекифреймворкиETC Аноним 28/05/24 Втр 16:59:32 3172064 194
Решил бампнуть тред интересными библиотеками для Kotlin (пока-что только KMP / UI решения. В будущем будет всё больше и шире общий спектр).

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.
Аноним 28/05/24 Втр 17:40:45 3172111 195
>>3171046
>Ох уж эти легаси примеры
Ты удивишься, но примеры из явы 1.8 до сих пор везде работают, а с тех пор не поменялось примерно нихуя. Буквально копипащу рандомный ответ из стаковерфлоу и жду пока ИДЕ соберет код в котлин. Работает в 90% случаев кроме тех 10% когда надо правильно nullable типы переопределить. Жаба - рай для легаси кодера. Обратка даже пизже чем у дельфи, хотя это тот еще некроязык (там придумали диалекты чтобы ухудшить совместимость кода, чем как обычно навалили себе в штаны в стиле дельфи).
Аноним 28/05/24 Втр 18:01:19 3172138 196
>>3172064
>Coil
Насосался с ним, и больше не хочу его трогать даже палкой. Работает как черная коробка, которую почти невозможно отдебажить или проверить на ошибки без прыжков над головой. Не работает в эмуляторе потому что так захотели разрабы. Даже повторного запроса при неудачном подключении и нормального stack trace нет, какой уж там production-ready. Вечная бета. Я просто делаю запрос okhttp3, сохраняю через context и показываю обычным Image, что полностью исключает обосрамсы и позволяет обрабтать любую внештатную ситуацию. Используй такой же костылек, и вернешься к койлу лет через 5-10 когда его допилят.
>PreCompose
Скоро библиотеки с навигацией будут выходить каждый месяц. Опенпосусники обезумели в соревновании кто больше создаст одинаково кривых навигаторов по примеру гугла. Даже я свой навигатор написал (не либа, а стейт + класс навигатор) для внутренних нужд.
Аноним 28/05/24 Втр 19:46:13 3172252 197
>>3172138
>precompose

Да, есть такое, ведь гуглы педики и сразу после выхода беты compose multiplatform не удосужились сделать хотя бы альфу jetpack navigate. Только спустя 4 года всё же начали пилить. Как и typesafe navigation
Аноним 29/05/24 Срд 16:34:10 3173124 198
Максимально тупой вопрос, но все же надо ответ.

При передаче метода, может ли быть вызван метод 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 как всегда
Аноним 29/05/24 Срд 17:44:43 3173221 199
>>3173124
Я не понимаю просто, это прикол от разрабов? Я провёл мини тест системы и понял, что запросов не чётко 4 или 3, а вариативно от 3 до 8 где-то. Какого... ну не может же быть это из-за того, что я криво объект сериализации написал и он не работает? Хммм
Аноним 29/05/24 Срд 18:29:55 3173294 200
>>3173221
Дебагер запусти и по шагу смотри где у тебя там что много дергается и как.
Я не совсем понял что у тебя за беда.
Аноним 29/05/24 Срд 18:32:15 3173299 201
Аноним 29/05/24 Срд 19:10:19 3173382 202
>>3173294
Да уже посмотрел. Оказывается, что у меня объект не успевал сериализоваться и тут же шел за "новой" порцией. Зачем? Да хз вообще. Сейчас просто удалил весь код, буду с нуля переписывать. Эх...

Зато возникла другая проблема: kotlinx.serialization умеет в парсинг parent-child нормально? Просто один мудак сделал апи на уровне
{
"status": { "string": "завершено", "code": 2 }
}
И теперь для сериализации приходится создавать доп. Объект или же писать мапу.
Прим. для сериализации этой же параши
data class Test(
val status: Status
)
data class Status(
val string: String
)
Да и бог бы с ним, если бы такие были объекты, так они еще вложены друг в друга... Знаю про ignoreUnknownKeys, но все равно проблему не решает. Помогите, анончики!
Аноним 29/05/24 Срд 19:13:52 3173394 203
>>3173382
А, плохо спросил, я имел в виду "сериализация вложенного объекта без создания parent объекта. Чтоб
{
"list": {
"episode": {}
}
}
Было вот так в коде
@SerialName("list.episode")
data class Episode()

Ну как пример
Аноним 29/05/24 Срд 23:26:16 3173682 204
Аноним 30/05/24 Чтв 00:01:56 3173709 205
javalinhotspots.PNG 62Кб, 1134x355
1134x355
Как так котляны? Перфтестнул джавалин и в результате четверть процессорного времени ушла про проверку нуллов
оправдывайтесь
Аноним 30/05/24 Чтв 07:42:49 3173837 206
>>3173709
Ну, есть такое, да. Поделать ничего нельзя, только если gc менять или еще как то шаманить.
Аноним 30/05/24 Чтв 18:33:08 3174613 207
>>3173709
JVM/CLR будет делать ровно тоже самое, если бы не было проверок то падало рандомно с сигфолтами. Вроде как jit может выпиливать это.
Аноним 30/05/24 Чтв 19:06:31 3174654 208
>>3174613
Так в том то и дело что это джвм и есть. И без котла она так не делает
Аноним 30/05/24 Чтв 19:39:59 3174674 209
>>3174654
Откуда тогда VM решает бросить НПЕ когда получает аналл? То есть, там тоже есть проверки. Без проверок сигфолт будет.
Аноним 30/05/24 Чтв 20:19:48 3174708 210
>>3174674
Вроде там джвм подписывается на событие разыменования нулевого указателя, типа page fault exception.
У всех остальных указателей этой проверки нет
Так что это далеко не одно и то же
Аноним 30/05/24 Чтв 20:39:18 3174721 211
>>3174708
А какая разница? Ну типа так и так есть где-то под капотом действие, которое определяет что "ты" есть на самом деле (нулл или не нулл).

Та же беда с проверкой индексов массива, вроде простая вещь, поставь ты эту проверку и лишишь просто пласта проблем (одни из популярных уязвимостей), но в реале эта хрень миллионами и миллиардами раз может дергаться (как у тебя), что делает раст с нулевой абстракцией просто наябом, если сравнивать с си.

Я не удивлюсь что проверку делает котлин и где-то под копотом еще VM повторяет это.
Аноним 30/05/24 Чтв 20:44:18 3174724 212
>>3174721
Хотя может я и не прав, просто это фундаментальная проблема. Я не знаю можно ли это сделать бесплатно на системном уровне и почему тогда котлин не решает эту проблему как решает VM
Аноним 30/05/24 Чтв 20:46:21 3174725 213
>>3174721
>А какая разница?
По перформансу как видишь огромная. Что у тебя проц железом обрабатывает, а что джава функция с ветвлением постоянно вызывается
Аноним 30/05/24 Чтв 21:09:34 3174745 214
>>3174725
Я хз как там сделано, я к тому, что там под капотом есть оверхед, иначе давно бы стерлась грань между управляемыми и не управляемыми языками, просто ты этот оверхед не видишь в статистике.

А может там правда работает через событие системы, но это может стоит настолько дорого, что решили проще if подергать, чем давать генерировать эту ситуацию.

Не факт даже, что нуллабилити можно сделать проще, даже со своей VM.
Аноним 31/05/24 Птн 10:31:20 3175181 215
>>3169329
Забыл дополнить:

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"
Аноним 31/05/24 Птн 13:40:49 3175502 216
>>3173709
Забавно что альтернатив нету.

Го это вообще просто звездос, вроде норм асинхронный рантайм, но столько подводных камней, даже на элементарных слайсях есть места отстрела ног, как будто студенты язык делали. Там реально есть книга 100 ошибок го.

С шарпами мутная херня, вроде опенсорс и язык неплох, и тут же закрытый отладчик онли под вижлы. Какие-то страдания у линуксоидов. В общем в жопу эти корпаративные языки и игру мягких в EEE.

Раст вроде по началу норм, а потом такая шляпа начинается, что ну его нахер, проще на сях (или новом зиге) писать чем в эти ограничения и лайвтаймы дрочиться. Он просто неудобный, ни какого чуда не случиться просто вката, будет только медленная разработка.

Динамикодресня идет лесом, как только код становится больше 1000 строк, начинается страдания, да всякие jsdoc и хинты могут помочь, но проще взять статик язык, там хоть в производительности выигрышь

Жаба после котлина противна, ну вот я писал и понял что мне бы тут просто не помешал сейчас этот сахар из котлина и везде думаешь как хорошо было бы тут котлин итд, проще котлин взять.
Аноним 31/05/24 Птн 16:37:54 3175753 217
>>3175502
О, мощный коупинг пошёл. Чего же тебе в джаббе не хватает, что ты готов к таким падениям производительности?
Аноним 31/05/24 Птн 17:17:55 3175784 218
>>3175753
Лично мне в джаве не нравится синтаксис (слегка специфичный, скажем так), что лямбды вне функции нельзя вынести, нет нулл сафети, нет лямбд let, apply, also, нет компоуза, нет удобного дсл

Это то, что я за 10 минут вспомнил

Но это не значит, что я вообще не люблю джаву. Я на ней пишу и мне нормально впринципе, просто слегка неудобно. Всё таки котлин сделал своё дело и 98% времени пишу на котлине
Мимо
Аноним 31/05/24 Птн 17:22:59 3175792 219
>>3173124
>>3173382
>>3173394
Обвешай реквест самописными коллбэками и не выполняй вызов повторно пока не получил нормальный ответ. Ожидай до таймаута, либо обвешай все слипами в when до победного, либо крути while с прерыванием до достижения нужного значения каунта. Первый раз реквесты пишешь что-ли? Твой незаурядный план без костылинга не исполнишь.
Аноним 31/05/24 Птн 17:48:43 3175805 220
>>3175784
>что лямбды вне функции нельзя вынести
можно же, в поля например записать
Аноним 31/05/24 Птн 18:02:15 3175814 221
>>3175753
Как можно зарекаться о производительности, когда вы пишите на срыге? Взяв джаву и срыг, ты буквально поделил где-то на 10-15. да мой сладких, все уже знают
о techempower
Аноним 31/05/24 Птн 18:17:48 3175825 222
2024-04-04 1834[...].png 902Кб, 1661x616
1661x616
>>3175502
>Го это вообще просто звездос
Для меня главным красным флагом в этом языке является то как на хабре пишут о нем в статьях. В стиле сначало было очень неудобно от горячего баттплага, а потом гомосексуализм стал приносить удовольствие, даже не знаю как описать почему полюбил гомогейский синтаксис, в общем стал ценить говно.
Аноним 31/05/24 Птн 19:29:18 3175922 223
>>3175814
Ну вот я пишу на джавалине, проблемс?
Аноним 31/05/24 Птн 19:30:29 3175924 224
>>3175805
не, я про то, что условный Runnable надо писать так
new Thread(() -> { // code } ), когда как на котлине это
Thread { // code } и никаких скобочек не надо
Аноним 31/05/24 Птн 19:38:39 3175928 225
>>3175792
да я вроде всё сделал, теперь не срабатывает ложных вызовов. Я просто сильно удивился, что ктор шлёт запросы БЕСКОНЕЧНОЕ КОЛИЧЕСТВО, пока не сможет получить/сериализовать объект.

Ну как избавился... я надеюсь, что теперь не будет такого. Всё таки ктор это та еще чёрная магия, надо тестить его работу более подробно. В данный момент лень, потом займусь.
Ответить в тред Ответить в тред

Check this out!

Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов