Kotlin-реализация RecyclerView на Android
У вас есть большой список данных для показа пользователям вашего приложения? Ищете гибкий, удобный для разработчиков и пользователей способ отображения данных?
Тогда RecyclerView — именно то, что вам нужно.
RecyclerView — это расширенная версия ListView, только более мощная и гибкая.
RecyclerView относится к семейству ViewGroup, которое является оптимизированным преемником ListView и GridView.
Как следует из названия, RecyclerView перезапускает верхние элементы списка, которые, уходя за пределы с экрана, становятся невидимыми для пользователя. Например, если пользователь прокрутит список вниз до пункта 6 или 7, то элементы в позиции 1, 2 или 3 будут удалены из памяти. В результате сокращается расход памяти.
https://medium.com/@hrithik481/implement-recyclerview-in-android-with-kotlin-42408c6bf6
✍️ @kotlin_lib
У вас есть большой список данных для показа пользователям вашего приложения? Ищете гибкий, удобный для разработчиков и пользователей способ отображения данных?
Тогда RecyclerView — именно то, что вам нужно.
RecyclerView — это расширенная версия ListView, только более мощная и гибкая.
RecyclerView относится к семейству ViewGroup, которое является оптимизированным преемником ListView и GridView.
Как следует из названия, RecyclerView перезапускает верхние элементы списка, которые, уходя за пределы с экрана, становятся невидимыми для пользователя. Например, если пользователь прокрутит список вниз до пункта 6 или 7, то элементы в позиции 1, 2 или 3 будут удалены из памяти. В результате сокращается расход памяти.
https://medium.com/@hrithik481/implement-recyclerview-in-android-with-kotlin-42408c6bf6
✍️ @kotlin_lib
👍8😐1
KMP Library Wizard
Теперь можно в два клика создать KMP проект
https://terrakok.github.io/kmp-web-wizard/
✍️ @kotlin_lib
Теперь можно в два клика создать KMP проект
https://terrakok.github.io/kmp-web-wizard/
✍️ @kotlin_lib
👍6🔥3
Защита архитектуры проекта Kotlin с помощью Konsist
Konsist - это совершенно новый инструмент, который помогает стандартизировать кодовую базу. Он совместим с различными Kotlin-проектами, включая Android-проекты, Spring-проекты и Kotlin Multiplatform-проекты.
Прежде чем погрузиться в Konsist, давайте вкратце обсудим многоуровневую архитектуру. Компоненты в рамках паттерна многоуровневой архитектуры организованы в слои, каждый из которых выполняет определенную роль в приложении. Каждый слой также определяет границы - классы и интерфейсы могут быть доступны только другим классам и интерфейсам из нужных слоев.
Konsist может быть использован для автоматизации проверки этих слоев, что повышает качество кодовой базы приложения и делает ее более управляемой. Давайте рассмотрим несколько архитектур и посмотрим, как мы можем защитить их границы.
https://proandroiddev.com/protect-kotlin-project-architecture-using-konsist-3bfbe1ad0eea
✍️ @kotlin_lib
Konsist - это совершенно новый инструмент, который помогает стандартизировать кодовую базу. Он совместим с различными Kotlin-проектами, включая Android-проекты, Spring-проекты и Kotlin Multiplatform-проекты.
Прежде чем погрузиться в Konsist, давайте вкратце обсудим многоуровневую архитектуру. Компоненты в рамках паттерна многоуровневой архитектуры организованы в слои, каждый из которых выполняет определенную роль в приложении. Каждый слой также определяет границы - классы и интерфейсы могут быть доступны только другим классам и интерфейсам из нужных слоев.
Konsist может быть использован для автоматизации проверки этих слоев, что повышает качество кодовой базы приложения и делает ее более управляемой. Давайте рассмотрим несколько архитектур и посмотрим, как мы можем защитить их границы.
https://proandroiddev.com/protect-kotlin-project-architecture-using-konsist-3bfbe1ad0eea
✍️ @kotlin_lib
👍3
Apress_Pro_Spring_6_with_Kotlin.pdf
24.1 MB
Pro Spring 6 with Kotlin: An In-depth Guide to Using Kotlin APIs in Spring Framework 6
Автор: Chris Schaefer (2023)
Освойте основы Spring Framework 6, опираясь на реальный опыт экспертов по Spring. Из этой книги вы узнаете, как использовать Spring 6 в тандеме с языком программирования Kotlin для создания сложных корпоративных приложений сверху донизу. От монолитов до облачных нативных приложений для потоковых микросервисов - вы получите представление о каждом аспекте процесса, включая транзакции, доступ к данным, персистентность, веб-уровни и уровни представления.
✍️ @kotlin_lib
Автор: Chris Schaefer (2023)
Освойте основы Spring Framework 6, опираясь на реальный опыт экспертов по Spring. Из этой книги вы узнаете, как использовать Spring 6 в тандеме с языком программирования Kotlin для создания сложных корпоративных приложений сверху донизу. От монолитов до облачных нативных приложений для потоковых микросервисов - вы получите представление о каждом аспекте процесса, включая транзакции, доступ к данным, персистентность, веб-уровни и уровни представления.
✍️ @kotlin_lib
👍6
Прослушивание событий элементов с использованием Compose for Web
В декларативном мире события являются основным способом взаимодействия с элементами, и у большинства компонентов есть способ их прослушивания.
События играют ключевую роль во взаимодействии между вашим приложением и браузером. В декларативном мире события - это основной способ получения обновлений от элементов. В этом отношении HTML-документ действительно очень силен.
Как вы можете видеть в документации W3C, существует почти 100 типов событий, которые вы можете использовать. В этой статье мы узнаем, как использовать их в Compose for Web.
https://touchlab.co/compose-html-events
✍️ @kotlin_lib
В декларативном мире события являются основным способом взаимодействия с элементами, и у большинства компонентов есть способ их прослушивания.
События играют ключевую роль во взаимодействии между вашим приложением и браузером. В декларативном мире события - это основной способ получения обновлений от элементов. В этом отношении HTML-документ действительно очень силен.
Как вы можете видеть в документации W3C, существует почти 100 типов событий, которые вы можете использовать. В этой статье мы узнаем, как использовать их в Compose for Web.
https://touchlab.co/compose-html-events
✍️ @kotlin_lib
👍2✍1
DataMaps. Рассказ о нашей ORM на Kotlin
Меня зовут Александр, я ведущий программист в БФТ-Холдинге. Уже несколько лет мы с командой трудимся над платформой, которая официально называется БФТ.Платформа, а менее официально – Ice. В основном наша платформа используется в органах власти и государственных учреждениях.
Сегодня хотелось бы рассказать не обо всей платформе, а только об одном из ее компонентов – ORM (object-relational mapping) – фреймворке DataMaps.
Данная статья не инструкция или справка. Это достаточно поверхностный обзор, цель которого получить первичную обратную связь: интересен ли наш фреймворк сообществу?
Внутри БФТ-Холдинга Datamaps зарекомендовали с одной стороны, как легкий, наглядный и понятный для разработчиков фреймворк, с другой стороны, мощный по своим возможностям.
https://habr.com/ru/companies/bft/articles/787280/
✍️ @kotlin_lib
Меня зовут Александр, я ведущий программист в БФТ-Холдинге. Уже несколько лет мы с командой трудимся над платформой, которая официально называется БФТ.Платформа, а менее официально – Ice. В основном наша платформа используется в органах власти и государственных учреждениях.
Сегодня хотелось бы рассказать не обо всей платформе, а только об одном из ее компонентов – ORM (object-relational mapping) – фреймворке DataMaps.
Данная статья не инструкция или справка. Это достаточно поверхностный обзор, цель которого получить первичную обратную связь: интересен ли наш фреймворк сообществу?
Внутри БФТ-Холдинга Datamaps зарекомендовали с одной стороны, как легкий, наглядный и понятный для разработчиков фреймворк, с другой стороны, мощный по своим возможностям.
https://habr.com/ru/companies/bft/articles/787280/
✍️ @kotlin_lib
👍3
Как использовать ресурсы в Compose Multiplatform
Ресурсы являются важной частью любого мобильного приложения, они включают в себя отрисовки, шрифты, текстовые файлы и многое другое. С появлением Compose Multiplatform у нас появился компонент ресурсов Compose, но он был экспериментальным и претерпел несколько изменений в разных версиях. Теперь, когда вышла следующая основная версия Compose, а именно 1.6.0-beta01, в разделе ресурсов появились некоторые важные изменения. Давайте рассмотрим их, а также то, как перенести и использовать новый способ доступа к ресурсам.
https://proandroiddev.com/how-to-use-resources-in-compose-multiplatform-77a6552b505d
✍️ @kotlin_lib
Ресурсы являются важной частью любого мобильного приложения, они включают в себя отрисовки, шрифты, текстовые файлы и многое другое. С появлением Compose Multiplatform у нас появился компонент ресурсов Compose, но он был экспериментальным и претерпел несколько изменений в разных версиях. Теперь, когда вышла следующая основная версия Compose, а именно 1.6.0-beta01, в разделе ресурсов появились некоторые важные изменения. Давайте рассмотрим их, а также то, как перенести и использовать новый способ доступа к ресурсам.
https://proandroiddev.com/how-to-use-resources-in-compose-multiplatform-77a6552b505d
✍️ @kotlin_lib
👍3
Использование делегирования в Kotlin для упрощения совместной работы с ViewModel и управления состояниями
В предыдущем материале мы рассказали о том, как создавался наш экран InRide для водителей. По мере того как развиваются технологии и потребности, развивается и наш продукт. Хамид Реза, наш менеджер по продукции, придумал встроить навигационные возможности прямо в существующий экран In-Ride, избавив наших водителей от зависимости от сторонних навигационных приложений. 🗺️
https://proandroiddev.com/leveraging-kotlin-delegation-to-simplify-viewmodel-collaboration-and-state-management-399c17cf5df5
✍️ @kotlin_lib
В предыдущем материале мы рассказали о том, как создавался наш экран InRide для водителей. По мере того как развиваются технологии и потребности, развивается и наш продукт. Хамид Реза, наш менеджер по продукции, придумал встроить навигационные возможности прямо в существующий экран In-Ride, избавив наших водителей от зависимости от сторонних навигационных приложений. 🗺️
https://proandroiddev.com/leveraging-kotlin-delegation-to-simplify-viewmodel-collaboration-and-state-management-399c17cf5df5
✍️ @kotlin_lib
👍3
Миграция конфигурации сборки с Groovy на Kotlin
Что такое DSL?
DSL (Domain-Specific Language) — это язык программирования, который спроектирован и оптимизирован для решения задач в конкретной области или для определенного класса задач. DSL build.gradle предоставляет разработчикам удобный способ определения настроек проекта и управления ими, используя специфический синтаксис, который Gradle понимает и обрабатывает. Этот DSL позволяет создавать мощные и гибкие сценарии сборки, которые могут быть легко настраиваемы для разных проектов и задач.
С Android Studio Giraffe Kotlin DSL становится новым стандартом для Gradle-скриптов в разработке Android. Когда вы создаете новые проекты, используя встроенные шаблоны IDE, вам будут предоставлены файлы Kotlin DSL вместо файлов Gradle на основе Groovy.
https://habr.com/ru/companies/ppr/articles/765544/
✍️ @kotlin_lib
Что такое DSL?
DSL (Domain-Specific Language) — это язык программирования, который спроектирован и оптимизирован для решения задач в конкретной области или для определенного класса задач. DSL build.gradle предоставляет разработчикам удобный способ определения настроек проекта и управления ими, используя специфический синтаксис, который Gradle понимает и обрабатывает. Этот DSL позволяет создавать мощные и гибкие сценарии сборки, которые могут быть легко настраиваемы для разных проектов и задач.
С Android Studio Giraffe Kotlin DSL становится новым стандартом для Gradle-скриптов в разработке Android. Когда вы создаете новые проекты, используя встроенные шаблоны IDE, вам будут предоставлены файлы Kotlin DSL вместо файлов Gradle на основе Groovy.
https://habr.com/ru/companies/ppr/articles/765544/
✍️ @kotlin_lib
👍5
Корутинные загадки
Антон Дудаков, Владимир Меркурьев
Спикеры будут показывать код с корутинами и спрашивать, что в нем должно случиться, а слушатели будут выбирать варианты ответов. После этого будет запускаться живой код и оцениваться то, что получилось на самом деле. Затем будем разбор того, почему все именно так. Кто выберет больше всего правильных вариантов — тот и победил.
Будут примеры с синхронизацией и конкурентной работой, отмена корутин и неочевидности Kotlin Flow.
https://www.youtube.com/watch?v=Qj_vTsN_4uo
✍️ @kotlin_lib
Антон Дудаков, Владимир Меркурьев
Спикеры будут показывать код с корутинами и спрашивать, что в нем должно случиться, а слушатели будут выбирать варианты ответов. После этого будет запускаться живой код и оцениваться то, что получилось на самом деле. Затем будем разбор того, почему все именно так. Кто выберет больше всего правильных вариантов — тот и победил.
Будут примеры с синхронизацией и конкурентной работой, отмена корутин и неочевидности Kotlin Flow.
https://www.youtube.com/watch?v=Qj_vTsN_4uo
✍️ @kotlin_lib
YouTube
Антон Дудаков, Владимир Меркурьев — Корутинные загадки
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
Спикеры будут показывать код с корутинами и спрашивать, что в нем должно случиться, а слушатели будут выбирать варианты ответов. После этого будет запускаться живой код и оцениваться то, что получилось…
— —
Спикеры будут показывать код с корутинами и спрашивать, что в нем должно случиться, а слушатели будут выбирать варианты ответов. После этого будет запускаться живой код и оцениваться то, что получилось…
👍5
Элегантная обработка событий в Kotlin - прохождение рефакторинга
Раскройте пиковую производительность кода Kotlin с помощью этих экспертных советов по рефакторингу.
В мире разработки программного обеспечения рефакторинг кода - это герой, который спасает нас от запутанного и неэффективного кода. В этой статье мы отправимся в приключение, чтобы переделать код Kotlin для обработки различных событий. Наша миссия? Повысить производительность и улучшить стиль, сделав код более гладким, удобным и приятным для работы.
https://img.ly/blog/kotlin-code-refactoring-for-peak-performance/
✍️ @kotlin_lib
Раскройте пиковую производительность кода Kotlin с помощью этих экспертных советов по рефакторингу.
В мире разработки программного обеспечения рефакторинг кода - это герой, который спасает нас от запутанного и неэффективного кода. В этой статье мы отправимся в приключение, чтобы переделать код Kotlin для обработки различных событий. Наша миссия? Повысить производительность и улучшить стиль, сделав код более гладким, удобным и приятным для работы.
https://img.ly/blog/kotlin-code-refactoring-for-peak-performance/
✍️ @kotlin_lib
👍3
Измеряем sequence
В Kotlin существует мощный механизм ленивой обработки коллекций, но многие разработчики боятся его использовать, так как не понимают, как он работает внутри.
Максим сравнит два подхода к обработке коллекций: обычный и ленивый через sequence. Он рассмотрит, как работают под капотом большинство конструкций sequence. Но самое главное — он измерит на конкретных цифрах, насколько корректно правило CouldBeSequence, и в каких случаях использование sequence дает реальный выигрыш, а в каких — проигрыш. «На десерт» будет немного оптимизации. Да-да, оригинальные функции Kotlin не всегда работают оптимально.
https://www.youtube.com/watch?v=bg3ICZVRDOs
✍️ @kotlin_lib
В Kotlin существует мощный механизм ленивой обработки коллекций, но многие разработчики боятся его использовать, так как не понимают, как он работает внутри.
Максим сравнит два подхода к обработке коллекций: обычный и ленивый через sequence. Он рассмотрит, как работают под капотом большинство конструкций sequence. Но самое главное — он измерит на конкретных цифрах, насколько корректно правило CouldBeSequence, и в каких случаях использование sequence дает реальный выигрыш, а в каких — проигрыш. «На десерт» будет немного оптимизации. Да-да, оригинальные функции Kotlin не всегда работают оптимально.
https://www.youtube.com/watch?v=bg3ICZVRDOs
✍️ @kotlin_lib
YouTube
Максим Сидоров — Измеряем sequence
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
В Kotlin существует мощный механизм ленивой обработки коллекций, но многие разработчики боятся его использовать, так как не понимают, как он работает внутри.
Максим сравнит два подхода к обработке…
— —
В Kotlin существует мощный механизм ленивой обработки коллекций, но многие разработчики боятся его использовать, так как не понимают, как он работает внутри.
Максим сравнит два подхода к обработке…
👍5
Понимание разницы между KSP и KAPS в Kotlin
В этой статье мы рассмотрим, чем отличаются KSP и KAPS, и узнаем, в каких случаях стоит использовать каждый из них.
https://towardsdev.com/understanding-the-difference-between-ksp-and-kaps-in-kotlin-d87e68d86f87
✍️ @kotlin_lib
В этой статье мы рассмотрим, чем отличаются KSP и KAPS, и узнаем, в каких случаях стоит использовать каждый из них.
https://towardsdev.com/understanding-the-difference-between-ksp-and-kaps-in-kotlin-d87e68d86f87
✍️ @kotlin_lib
👍2👎1
Media is too big
VIEW IN TELEGRAM
Алина Гребёнкина — как сделать так, чтобы разработчики использовали Kotlin
Тайм-коды:
00:00 — Избранные моменты выпуска
00:37 — Начало выпуска
00:50 — Расскажи подробнее, что ты делаешь на работе?
01:30 — Что такое Kotlin?
03:34 — Кем ты хотела стать, когда вырастешь?
05:10 — Про школу и интересы в школьное время
08:03 — Про ЕГЭ и обучение в СУНЦ НГУ
14:34 — Как ты выбирала универ и как тебе там было после СУНЦа?
16:45 — Как появилась твоя первая работа и что ты делала?
19:29 — Как происходил твой рост в работе за эти два года?
21:05 — Почему ты решила уйти и как искала новую работу?
23:00 — Про собеседования в Москве
24:21 — Работа в СММ-агентстве и переход к разработке брендинговых стратегий
26:33 — «Поняла, что хочется перейти на сторону продукта»
29:03 — Что ты делала в Bookmate?
31:22 — Почему ты ушла?
33:32 — Как ты попала в JetBrains?
37:55 — Что ты посоветуешь человеку, который хочет в IT?
40:45 — Ты работаешь в IT, но ты не пишешь код. Тебе с этим ок?
42:03 — Подкаст выходит при поддержке школы karpov.courses
42:27 — Cпасибо Haos Community Space за предоставленное место для съемки
источник
✍️ @kotlin_lib
Тайм-коды:
00:00 — Избранные моменты выпуска
00:37 — Начало выпуска
00:50 — Расскажи подробнее, что ты делаешь на работе?
01:30 — Что такое Kotlin?
03:34 — Кем ты хотела стать, когда вырастешь?
05:10 — Про школу и интересы в школьное время
08:03 — Про ЕГЭ и обучение в СУНЦ НГУ
14:34 — Как ты выбирала универ и как тебе там было после СУНЦа?
16:45 — Как появилась твоя первая работа и что ты делала?
19:29 — Как происходил твой рост в работе за эти два года?
21:05 — Почему ты решила уйти и как искала новую работу?
23:00 — Про собеседования в Москве
24:21 — Работа в СММ-агентстве и переход к разработке брендинговых стратегий
26:33 — «Поняла, что хочется перейти на сторону продукта»
29:03 — Что ты делала в Bookmate?
31:22 — Почему ты ушла?
33:32 — Как ты попала в JetBrains?
37:55 — Что ты посоветуешь человеку, который хочет в IT?
40:45 — Ты работаешь в IT, но ты не пишешь код. Тебе с этим ок?
42:03 — Подкаст выходит при поддержке школы karpov.courses
42:27 — Cпасибо Haos Community Space за предоставленное место для съемки
источник
✍️ @kotlin_lib
👍7
Wonderous Compose
Wonderous Compose - это порт Wonderous в Compose Multiplatform. Wonderous Compose - это визуальная витрина восьми чудес света. Оригинальный проект был создан командой gskinner с использованием Flutter. Этот проект - дань уважения их оригинальной работе, с целью исследовать возможности дизайна в Compose.
Изображения и логотипы взяты из репозитория GitHub оригинального проекта. Художественные работы, находящиеся в открытом доступе, предоставлены Метрополитен-музеем, Нью-Тауэр. Фотографии с сайта Unsplash.
https://github.com/ShreyashKore/wonderous_compose
✍️ @kotlin_lib
Wonderous Compose - это порт Wonderous в Compose Multiplatform. Wonderous Compose - это визуальная витрина восьми чудес света. Оригинальный проект был создан командой gskinner с использованием Flutter. Этот проект - дань уважения их оригинальной работе, с целью исследовать возможности дизайна в Compose.
Изображения и логотипы взяты из репозитория GitHub оригинального проекта. Художественные работы, находящиеся в открытом доступе, предоставлены Метрополитен-музеем, Нью-Тауэр. Фотографии с сайта Unsplash.
https://github.com/ShreyashKore/wonderous_compose
✍️ @kotlin_lib
👍8😇1
Kotlin и Java
Преимущества языка Kotlin перед Java
Код на Kotlin компактнее на 30-40%
Меньше кода = меньше ошибок, выше скорость разработки.
Безопасная работа с обнуляемыми переменными (Null Safety)
В отличие от Java, в Kotlin по умолчанию все типы являются non-nullable, то есть не могут принимать значение null. Присвоение или возврат null приведет к ошибке компиляции. Чтобы присвоить переменной значение null, в Kotlin необходимо явно пометить эту переменную как nullable (добавив после типа знак вопроса). В Java же при использовании ссылки на объект с указанным значением null, появляется исключение в виде «NullPointerException!».
Функции-расширения (Extensions)
Kotlin позволяет расширять класс путём добавления нового функционала без необходимости наследования от такого класса. Это реализовано с помощью специальных выражений, называемых расширения. Например, вы можете написать новые функции для класса из сторонней библиотеки, которую вы не можете изменить. Такие функции можно вызывать обычным способом, как если бы они были методами исходного класса. Этот механизм называется функцией расширения.
Классы данных (data classes)
Разработчику на Java приходится писать много стандартного, но часто встречающегося кода (т.н. шаблонный код или boilerplate). В Kotlin же есть возможность создания специальных классов для определения полей для хранения данных, конструктора, функций сеттеров и геттеров для каждого поля, и функций
Синглтоны на уровне языка (Object)
В Java все должно объявляться внутри класса. Но в Kotlin все иначе. Компоненты могут объявляться за пределами класса, и это автоматически делает их статическими. Поэтому нам не требуется ключевое слово static. В Java статические члены обрабатываются не так, как члены-объекты. Это означает, что для статических членов нам недоступны такие вещи, как реализация интерфейса, помещение экземпляра в ассоциативный список (map) или передача его в качестве параметра методу, который принимает объект. В Kotlin static не является ключевым словом и вместо статических членов используются объекты-компаньоны, позволяющие преодолеть вышеуказанные ограничения. В этом и заключается преимущество. Даже если члены объектов-компаньонов выглядят как статические члены в других языках, во время выполнения они все равно остаются членами экземпляров реальных объектов и могут, например, реализовывать интерфейсы.
Корутины
Kotlin предоставляет возможность создавать дополнительные потоки, однако в нем также существуют т.н. корутины (сопрограммы), которые позволяют использовать меньше памяти в сравнении с обычным потоком, т.к. реализованы они без стека. Корутины же в свою очередь способны выполнять интенсивные и длительные задачи методом приостановления выполнения без блокировки потока и его последующего восстановления. Что в дальнейшем позволяет сгенерировать асинхронный код без блокирования, который при его выполнении не отличить от синхронного. К тому же, они генерируют эффектные доп. стили например async или await.
✍️ @kotlin_lib
Преимущества языка Kotlin перед Java
Код на Kotlin компактнее на 30-40%
Меньше кода = меньше ошибок, выше скорость разработки.
Безопасная работа с обнуляемыми переменными (Null Safety)
В отличие от Java, в Kotlin по умолчанию все типы являются non-nullable, то есть не могут принимать значение null. Присвоение или возврат null приведет к ошибке компиляции. Чтобы присвоить переменной значение null, в Kotlin необходимо явно пометить эту переменную как nullable (добавив после типа знак вопроса). В Java же при использовании ссылки на объект с указанным значением null, появляется исключение в виде «NullPointerException!».
Функции-расширения (Extensions)
Kotlin позволяет расширять класс путём добавления нового функционала без необходимости наследования от такого класса. Это реализовано с помощью специальных выражений, называемых расширения. Например, вы можете написать новые функции для класса из сторонней библиотеки, которую вы не можете изменить. Такие функции можно вызывать обычным способом, как если бы они были методами исходного класса. Этот механизм называется функцией расширения.
Классы данных (data classes)
Разработчику на Java приходится писать много стандартного, но часто встречающегося кода (т.н. шаблонный код или boilerplate). В Kotlin же есть возможность создания специальных классов для определения полей для хранения данных, конструктора, функций сеттеров и геттеров для каждого поля, и функций
Hashcode()
, toString()
и equals()
. Для этого достаточно добавить data в определение класса, затем компилятор сделает все сам.Синглтоны на уровне языка (Object)
В Java все должно объявляться внутри класса. Но в Kotlin все иначе. Компоненты могут объявляться за пределами класса, и это автоматически делает их статическими. Поэтому нам не требуется ключевое слово static. В Java статические члены обрабатываются не так, как члены-объекты. Это означает, что для статических членов нам недоступны такие вещи, как реализация интерфейса, помещение экземпляра в ассоциативный список (map) или передача его в качестве параметра методу, который принимает объект. В Kotlin static не является ключевым словом и вместо статических членов используются объекты-компаньоны, позволяющие преодолеть вышеуказанные ограничения. В этом и заключается преимущество. Даже если члены объектов-компаньонов выглядят как статические члены в других языках, во время выполнения они все равно остаются членами экземпляров реальных объектов и могут, например, реализовывать интерфейсы.
Корутины
Kotlin предоставляет возможность создавать дополнительные потоки, однако в нем также существуют т.н. корутины (сопрограммы), которые позволяют использовать меньше памяти в сравнении с обычным потоком, т.к. реализованы они без стека. Корутины же в свою очередь способны выполнять интенсивные и длительные задачи методом приостановления выполнения без блокировки потока и его последующего восстановления. Что в дальнейшем позволяет сгенерировать асинхронный код без блокирования, который при его выполнении не отличить от синхронного. К тому же, они генерируют эффектные доп. стили например async или await.
✍️ @kotlin_lib
👍11
Разница между Exception в Java и Kotlin
Одним из ключевых отличий между Java и Kotlin является подход к исключениям. В Java есть два типа исключений: checked и unchecked.
Checked исключения это те, которые должны быть обработаны в коде, иначе компилятор не позволит коду скомпилироваться. Unchecked исключения не требуют обработки в коде.
С точки зрения исключений компилятор Kotlin отличается тем, что не различает checked и unchecked исключения. Все исключения — только unchecked, поэтому нет необходимости отлавливать или объявлять какие-либо исключения (вы самостоятельно принимаете решение, стоит ли их отлавливать и обрабатывать).
Такой подход был выбран разработчиками Kotlin, чтобы упростить и ускорить процесс разработки, сократив количество бойлерплейта и улучшив читаемость кода. Однако, это может привести к тому, что некоторые ошибки могут быть упущены при компиляции и проявиться только во время выполнения программы.
Некоторые разработчики считают, что отказ от checked исключений является недостатком Kotlin, поскольку это может привести к ошибкам, которые могут быть предотвращены на этапе компиляции в Java. Однако, другие разработчики утверждают, что этот подход снижает количество шаблонного кода и упрощает написание программ.
Более подробно тут и тут
✍️ @kotlin_lib
Одним из ключевых отличий между Java и Kotlin является подход к исключениям. В Java есть два типа исключений: checked и unchecked.
Checked исключения это те, которые должны быть обработаны в коде, иначе компилятор не позволит коду скомпилироваться. Unchecked исключения не требуют обработки в коде.
С точки зрения исключений компилятор Kotlin отличается тем, что не различает checked и unchecked исключения. Все исключения — только unchecked, поэтому нет необходимости отлавливать или объявлять какие-либо исключения (вы самостоятельно принимаете решение, стоит ли их отлавливать и обрабатывать).
Такой подход был выбран разработчиками Kotlin, чтобы упростить и ускорить процесс разработки, сократив количество бойлерплейта и улучшив читаемость кода. Однако, это может привести к тому, что некоторые ошибки могут быть упущены при компиляции и проявиться только во время выполнения программы.
Некоторые разработчики считают, что отказ от checked исключений является недостатком Kotlin, поскольку это может привести к ошибкам, которые могут быть предотвращены на этапе компиляции в Java. Однако, другие разработчики утверждают, что этот подход снижает количество шаблонного кода и упрощает написание программ.
Более подробно тут и тут
✍️ @kotlin_lib
👍6
Как перенести статичные методы из Java в Kotlin?
В Kotlin нет статических методов, для этих целей обычно служит companion object.
Для того чтобы метод из Java был представлен как статический используется аннотация
Например, если у нас есть статический метод в Java:
Мы можем использовать этот метод в Kotlin, добавив аннотацию
Подробнее https://kotlinlang.ru/docs/reference/java-to-kotlin-interop.html
✍️ @kotlin_lib
В Kotlin нет статических методов, для этих целей обычно служит companion object.
Для того чтобы метод из Java был представлен как статический используется аннотация
@JvmStatic
. Эта аннотация говорит компилятору Kotlin создать статический метод в байт-коде, что позволяет использовать методы так же, как в Java.Например, если у нас есть статический метод в Java:
public class MyClass {
public static int sum(int a, int b) {
return a + b;
}
}
Мы можем использовать этот метод в Kotlin, добавив аннотацию
@JvmStatic
:object MyClass {
@JvmStatic
fun sum(a: Int, b: Int): Int {
return a + b
}
}
Подробнее https://kotlinlang.ru/docs/reference/java-to-kotlin-interop.html
✍️ @kotlin_lib
👍4🥴2
Konsist: Первый опыт работы с новым линтером для Kotlin
Так что же такое Konsist?
В официальной документации дается хорошее и краткое объяснение его назначения, и я не могу сформулировать его лучше.
Konsist - это статический анализатор кода для языка Kotlin. Он совместим
с различными проектами на Kotlin, включая проекты Android, Spring,
и Kotlin Multiplatform.
Konsist упрощает процесс поддержания согласованности кодовой базы за счет
Поддерживая соглашения по коду и сохраняя архитектуру проекта.
Он позволяет разработчикам создавать проверки согласованности с помощью модульных тестов, которые
которые можно запускать во время проверки запросов на поставку (PR) для проверки.
https://proandroiddev.com/konsist-first-experience-with-the-new-linter-for-kotlin-9153b0e7e2c3
✍️ @kotlin_lib
Так что же такое Konsist?
В официальной документации дается хорошее и краткое объяснение его назначения, и я не могу сформулировать его лучше.
Konsist - это статический анализатор кода для языка Kotlin. Он совместим
с различными проектами на Kotlin, включая проекты Android, Spring,
и Kotlin Multiplatform.
Konsist упрощает процесс поддержания согласованности кодовой базы за счет
Поддерживая соглашения по коду и сохраняя архитектуру проекта.
Он позволяет разработчикам создавать проверки согласованности с помощью модульных тестов, которые
которые можно запускать во время проверки запросов на поставку (PR) для проверки.
https://proandroiddev.com/konsist-first-experience-with-the-new-linter-for-kotlin-9153b0e7e2c3
✍️ @kotlin_lib
👍4❤1