Kotlin Meta
248 subscribers
57 photos
2 videos
1 file
55 links
Всякое разное интересное про язык программирования Kotlin и около него.

Чатик: @kotlinmetachat.
Мы на YouTube: https://youtube.com/@KotlinMeta.
Мы на Twitch: https://twitch.tv/kotlinmeta.
Download Telegram
Что по вашему должен выводить код на картинке?
Anonymous Quiz
24%
true
42%
false
33%
Ошибка компиляции
211
Этот код успешно скомпилируется и выведет false. И причина будет очевидна, если вы понимаете, как работает fun interface.

До версии Kotlin 1.6 код бы просто упал с ошибкой компиляции, и ведь логично, созданная лямбда ну никак не похожа на интерфейс Test. Но в последующих обновлениях
была добавлена автоматическая конвертация лямбд в функциональные интерфейсы (т.е. интерфейсы с одним-единственным методом).

Это нужно для удобной работы с Java-функциями, которые в качестве параметров часто принимают такие интерфейсы. Начиная с версии Kotlin 1.6 их стало вызывать также просто, как и родные Kotlin функции.

И никакой особой магии тут нет, компилятор просто генерирует обёртку для лямбды. На картинке представлен примерный вид скомпилированного кода. Тут, как я и говорил, становится очевидно, почему же код вывел false: у нас 2 разных объекта.

Иногда красивые синтаксические конструкции не бесплатны. Будем рассказывать и дальше о таких штуках в этом канале.
126🔥21
📹 Запись первого стрима: Kotlin в VSCode от JetBrains. Но зачем?

Разобрались кто такие языковые сервера, а также: Почему они есть для всех языков программирования, а для Kotlin раньше не было? Что поменялось сейчас, что JetBrains решили выпустить LSP для котлин? Зачем JetBrains официальная поддержка Kotlin в VSCode?

Мы смогли скачать и проверить как работает первая версия LSP, и, спойлер, ошибки подсвечиваются моментально. Я был очень приятно удивлён, и сделал сравнение анализа одного и того же кусочка кода в VSCode и Intellij Idea.

YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
1654
This media is not supported in your browser
VIEW IN TELEGRAM
👀9🔥31👍11
Rich Errors: В Kotlin 2.4 появятся Union-типы?

И да, и нет. Для тех, кто не знает, что такое Union-типы, – они позволяют создавать новые типы на основе существующих, подобно логическому оператору ИЛИ.

Например, конструкция userId: String | Int означает, что переменная может принимать значения либо строки, либо числа. Такое существует во многих языках программирования, таких как TypeScript, Python, C# (когда-то в будущем) и др.

В Kotlin же Union-типов не будет скорее всего никогда. Вместо этого предлагается использовать этот же синтаксис для выражения возможных ошибок при выполнении функции (что-то похожее на джавовое throws, но сделанное правильно).

🔴 Обсудим это на стриме уже в субботу в 17:00 МСК. Приходите!

Telegram | YouTube | Twitch
76321
💬 Впервые за долгое время мы наконец смогли собраться в Москве российским Kotlin-сообществом в ФКН ВШЭ.

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

За анонсами можно будет следить в канале Kotlin Russia: https://t.iss.one/kotlin_russia
12😭111
🔴 Сегодняшний стрим переносится на завтра

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

Завтра в это же время (17:00 МСК) присоединяйтесь к стриму, который мы сможем хорошо для вас подготовить. Будем обсуждать Rich Errors в Kotlin и Union-типы.

Все остальные стримы планируем также по расписанию каждую субботу в 17:00 МСК.
👍104😢21
Live stream scheduled for
🔴 Мы в прямом эфире!

Тема стрима – Rich Errors: В Kotlin 2.4 появятся Union-типы? Обсудим как это реализовано в других экосистемах, и что именно предлагается ввести в Kotlin.

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

Telegram | YouTube | Twitch
🔥61111
Live stream started
Live stream finished (2 hours)
Почему в Kotlin никогда не будет полноценных Union-типов?

В среду мы готовим полноценный ролик с разбором новой фишки Kotlin – Rich Errors a.k.a. Union-типы для ошибок (если вы из будущего, где ролик уже выложен, то обязательно гляньте!).

Я зарисовал на картинке минимальный пример с демонстрацией новой фичи для работы с ошибками. И да, эта фича вообще никак не связана с исключениями. Слева в типе указывается успешный результат, справа – все виды ошибок, которые могут произойти. Подобно тому, как работает Result в Rust, Either в Haskell, Ocaml, Scala, Error Union Type в Zig и error в Go.

Читайте ниже про новый синтаксис.
Please open Telegram to view this post
VIEW IN TELEGRAM
242👍11
Особенности error class

Для того, чтобы тип мог использоваться в правой части Union-а, его необходимо объявить через специальную декларацию error class. Ограничения на такие классы:

• error class не может быть abstract/open
• error class не может содержать дженериков

Так почему же в каком-нибудь TypeScript я могу написать:


type MessageId = string | number


А в Kotlin эта фича будет работать только для error class-ов?
4👍111
Перформанс

И этот тот самый случай, когда перформанс НЕ является примером Premature Optimization. Дело в том, что проверка того, является ли один Union-тип подтипом другого Union-типа – это неразрешённая проблема. Это приводит к экспоненциальному росту времени проверки при добавлении новых подтипов в Union-тип.

В других языках такая проблема есть, но с ней живут. Так, в мире TypeScript оптимизация времени проверки типов – это одна из актуальных задач на большом проекте. Но при разделении на "основной" и "побочные" типы, ребята из JetBrains совместно с Ross Tate разработали быстрый алгоритм для проверки на сходство типов.
321
Rich Errors не заменяют sealed interface, а делают работу с неудачными сценариями проще, чем это можно достичь с sealed interface. И это я бы назвал Game Changer-ом для распространения подхода Errors as Values.

Для полноценной замены Union-типов, возможно, стоит ожидать нового удобного синтаксиса для sealed interface из этого тикета в YouTrack.

Rich Errors также не заменяют исключения, и они всё ещё нужны в своей нише, а именно – логические ошибки программиста. Подобно тому, как работает panic в Go и Rust, и fatalError в Swift.
2👍221
Please open Telegram to view this post
VIEW IN TELEGRAM
📥 Мы включили возможность писать личные сообщения в этот канал

Старая добрая предложка из ВКонтакте появилась в новой версии Telegram. Обновляйте ваши клиенты, и смотрите на кнопочку внизу экрана.

А чтобы пообщаться с сообществом, вступайте в @kotlinmetachat. Я и Эмиль будем отвечать в обоих чатах.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍5
📹 Запись второго стрима: JetBrains переизобрели checked exceptions? Смотрим на Rich Errors и почему в Kotlin не будет полноценных Union-типов.

Посмотрели как к этому вообще пришли, какие есть альтернативы в других экосистемах и почему не хотят реализовывать полноценные Union-типы в Kotlin. Разобрали proposal-ы с обсуждением разработчиков из JetBrains про Union-типы в Kotlin.

И, главное, поняли чем они могут быть лучше sealed interfaces, Result-типов и checked exceptions.

YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103🔥221
🔴️️️️️️ Стрим в 17:00 МСК в субботу

Расскажем про fuzz-тестирование и про новую библиотеку kotlinx.fuzz для написания таких тестов.

Обязательно ставьте себе напоминалку и приходите. В этот раз это ваши вопросы будут особо важны, потому что в конечном итоге то, что мы будем смотреть и разбирать, выльется в доклад на Mobius или JPoint.

Telegram | YouTube | Twitch
👍53🔥22
Live stream scheduled for
💥 return делай, throw не делай

Что же, какое-то длиннопостное настроение на этой неделе. Сегодня поговорим про исключения. Когда их использовать нужно, и когда их использовать не нужно. Идеалом для меня по этой теме был и есть этот пост от Романа Елизарова на Medium.

Крайне советую с ним ознакомиться, сохранить в закладки, и пересылать всем, кто не следует конвенциям, описанным там. И не просто потому что так сказал Роман Елизаров, а потому что в посте очень доходчиво описаны причины таких конвенций. Их же я опишу в следующих постах.
Please open Telegram to view this post
VIEW IN TELEGRAM
321