Telegram

Kotlin Developer

Прямой пост
t.me/KotlinSenior
Нет баллов
Описание канала в Telegram

Самый топовый канал по Kotlin По вопросам сотрудничества и рекламы: ссылка скрыта Мы на бирже: ссылка скрыта

Аудитория
Смешанная аудитория
Подписчики
6 285
-5день
-13неделя
-51месяц
Охват поста
472
472за 24 часа
534в среднем
Вовлечённость
7,5%
7,5%за 24 часа
14,6%в среднем
Упоминания в других каналах

Канал упомянули 206 раз в 40 каналах

Чем больше упоминаний и каналов — тем заметнее канал в своей нише.

Информация о подписчиках
Вк, телеграм

Похожие каналы

29 289
Смешанная аудитория
ERR 13%

🔓 Популярные игры, приложения для android устройств, новости технологий и многое другое. 🤝 Сотрудничество: https://clck.su/FWLEf ⚠️ Наш чат: 🔓 Популярные игры, приложения для android устройств, новости технологий и многое другое. 🔓 Популярные игры, приложения для android устройств, новости технологий Игры, приложения, модификации, моды, новости, android, сма

2 200
4 095
Мужская аудитория
ERR 23%

Пишем про новые ИИ-модели, open-source проекты и инструменты для разработки. Следим за релизами и собираем главное в одном месте. Реклама: @clucai_sup Купить рекламу: https://telega.in/c/+tiyGChxuJ0oyZjAy

2 000
1 982
Смешанная аудитория
ERR 17%

ChatGPT (ЧатГпт) | NanoBanana 2 (НаноБанана) | DeepSeek | Claude (Клод) | Veo 3.1 | GPT Image 2 | Kling (Клинг) | Grok | GPT 2 AI Бот | ИИ Бот | ИИ Max | нейросети | написать текст | ответы на вопросы | перевод | генерация фото | генерация видео | улучшить фото | фотосессия Бот с нейросетями — @id711601738400_bot 🧑‍💻 Связь: https://clck.ru/3T8PD8 Сервис аналитики MAX - https://maxframe.ru

600
9 907
Смешанная аудитория
ERR 14%

Канал направленный на исследование в сфере ИБ, OSINT. Сотрудничество: @glebsto Медиа: @agencytender Мы на бирже: https://telega.in/c/info_cybersecurity Архив: https://t.me/tochkaseti

3 000
2 328
Мужская аудитория
ERR 27%

Реклама: https://iimax.ru/seller135

2 000
2 011
Смешанная аудитория
ERR 23%

Вся самая новая и полезная литература для Java разработчиков! По вопросам авторских прав, сотрудничества и рекламы: https://t.me/NadikaKir или в ЛС сообщества ВК https://vk.com/javatutorial Мы на бирже: https://telega.in/channels/bookofgeek/card_max/?r=lcDuijdm Канал в перечне РКН: https://vk.cc/cJrTqo

900
Формат размещения
1 400

топ 1 час · сутки в ленте · цена напрямую от автора

💎Эффективность за эти деньги
3,0
CPV · за показ
2 966
CPM · за 1000
Пересчитывается от формата и охвата 472/24ч
Гарантия выхода поста и возврат средств
Надёжность сделки
Среднее время ответа админа
Среднее время ответа админа
Обычно отвечает быстро
Размещений через Помогач
Размещений через Помогач
Первое размещение — за вами
Посты в канале
Kotlin Developer
Telegram · канал
Во что компилируется typealias? Typealias не создает новый тип данных, а только создает псевдоним для существующего типа. При компиляции кода, все typealias заменяются на соответствующий тип, поэтому typealias не приводит к увеличению размера кода. Например, typealias IntPredicate = (Int) -> Boolean при компиляции будет заменено на (Int) -> Boolean, то есть функцию, принимающую значение типа Int и возвращающую значение типа Boolean. Можно ли использовать typealias для функциональных типов? Да, можно использовать typealias для функциональных типов в Kotlin. Например, вы можете создать псевдоним для типа функции, которая принимает два параметра типа Int и возвращает значение типа String, следующим образом: typealias IntToString = (Int, Int) -> String Это позволит вам использовать созданный псевдоним вместо полного объявления типа, то есть вместо: fun processValues(f: (Int, Int) -> String) { // ... } можно использовать: fun processValues(f: IntToString) { // ... } Как и в случае с другими typealias, компилятор Kotlin просто заменяет псевдоним на соответствующий тип при компиляции кода.
465 просм.24 авг., 23:09
Дачная дача в Т-Банк Шопе Футболки с огурцами, тыквами, капустой и другие крутые штуки, да еще и с финансовыми пожеланиями. Надо брать. Посмотреть каталог #реклама tbank.ru О рекламодателе
539 просм.24 авг., 13:43
Что такое мульти-декларации (destructuring declarations)? Мульти-декларации (destructuring declarations или деструктуризирующее присваивание) — это способ извлечения значений из объекта и присвоения их сразу нескольким переменным. В Kotlin этот механизм поддерживается с помощью оператора распаковки (destructuring operator) — componentN(), где N — номер компонента. При создании data класса Kotlin автоматически создает функции componentN() для каждого свойства класса, где N — номер позиции переменной в конструкторе. Функции componentN() возвращают значения свойств в порядке их объявления в конструкторе. Это позволяет использовать мульти-декларации для распаковки значений свойств и присваивания их отдельным переменным. Например, если у нас есть data класс Person с двумя свойствами name и age, мы можем использовать мульти-декларации, чтобы извлечь эти свойства и присвоить их двум переменным: data class Person(val name: String, val age: Int) val person = Person("Alice", 29) val (name, age) = person println(name) // Alice println(age) // 29 Также можно использовать мульти-декларации в циклах, чтобы итерироваться по спискам объектов и распаковывать значения свойств: val people = listOf(Person("Alice", 30), Person("Bob", 40)) for ((name, age) in people) { println("$name is $age years old") } // Alice is 30 years old // Bob is 40 years old Мульти-декларации также могут быть использованы с массивами и другими коллекциями: val list = listOf("apple", "banana", "orange") val (first, second, third) = list println(first) // apple println(second) // banana println(third) // orange
510 просм.24 авг., 13:16
👩‍💻 Inspektify — написанная на Kotlin библиотека для Android и iOS. Она позволяет вам наблюдать за сетью вашего приложения в режиме реального времени прямо на вашем мобильном устройстве ❗️ Эту библиотеку можно использовать только в проектах, использующих Ktor для сетевой коммуникации 🔐 Лицензия: MIT 🖥 Github @KotlinSenior #kotlin
846 просм.21 авг., 01:02
🖥 Китайский разработчик выложил в открытый доступ целую автомобильную ОС, которая превращает любой Android-смартфон в беспроводной адаптер CarPlay. Она называется OkcarOS. Это кастомная прошивка Android 13, которая напрямую общается с экраном автомобиля по протоколу CarPlay. → Подключение за 4 секунды → Видео 60 fps, битрейт 25 Мбит/с → Без потерь аудио PCM → Разрешение 1:1 с экраном в автомобиле 100% с открытым исходным кодом. 🖥 https://github.com/okcar-os/android @android_dev_ru #android
793 просм.20 авг., 12:57
666 просм.20 авг., 09:51
660 просм.20 авг., 09:51
💻 Vico — создание диаграмм и графиков на Kotlin dependencies { implementation(libs.vico.compose) implementation(libs.vico.compose.m2) implementation(libs.vico.compose.m3) implementation(libs.vico.core) implementation(libs.vico.views) } Vico — это легкая расширяемая библиотека Kotlin для создания диаграмм. Библиотека совместима как с Jetpack Compose, так и с системой представлений, при этом 2 её основных модуля — compose и views, — являются независимыми. 🖥 GitHub 🟡 Wiki @KotlinSenior #kotlin
601 просм.20 авг., 09:51
667 просм.19 авг., 11:01
💻 KVision — ООП веб-фреймворк для Kotlin KVision позволяет создавать современные веб-приложения на Kotlin без использования HTML, CSS и JavaScript. KVision предоставляет большую коллекцию готовых к использованию компонентов GUI, которые можно использовать в качестве блоков для построения пользовательского интерфейса приложения. KVision полностью поддерживает как реактивные, так и императивные стили программирования. KVision содержит инновационный интерфейс для подключения фреймворков Ktor, Jooby, Spring Boot, Javalin, Vert.x и Micronaut на стороне сервера, что позволяет создавать fullstack-приложения с общим кодом для модели данных и бизнес-логики. KVision активно развивается. 🖥 GitHub 🟡 Доки @KotlinSenior #kotlin
672 просм.19 авг., 11:00
628 просм.19 авг., 00:42
💻 kobweb — современный фреймворк для full stack веб-приложений на Kotlin Kobweb — это фреймворк Kotlin, построенный на основе Compose HTML. Kobweb включает в себя все необходимое для создания динамичных веб-сайтов, а также веб-приложений, используя при этом всю экосистему Kotlin. 🖥 GitHub 🟡 Доки @KotlinSenior #kotlin
746 просм.19 авг., 00:42
Вопрос с собеседования по Kotlin Назовите подтип всех типов в Kotlin 👇 Правильный ответ: Nothing в Kotlin — это т.н. bottom type, то есть он является подтипом любого другого типа. Наличие Nothing в системе типов позволяет типизировано выражать то, что без него принципиально невозможно. Bottom type — это тип, который не имеет значений и предназначен для обозначения невыполнимых ситуаций в программе. @KotlinSenior #kotlin
726 просм.18 авг., 17:11
Вопрос с собеседования по Kotlin Чем анонимная функция отличается от лямбда-выражения? 👇 Правильный ответ: • Лямбда-выражения, как правило, короче и лаконичнее. • Лямбда-выражения используют {} с -> для параметров и тела функции, в то время как анонимные функции используют ключевое слово fun. • Анонимные функции позволяют явно указывать типы возвращаемых значений, в то время как лямбда-выражения определяют тип возвращаемого значения автоматически. @KotlinSenior #kotlin
769 просм.18 авг., 10:04
Что такое функциональный тип, какие у него ограничения Язык Kotlin допускает объявлять тип анонимных функций или лямбда выражений — функциональный. Функциональный тип — это тип данных, который позволяет работать с функциями как с обычными объектами, передавать функции в качестве аргументов и возвращать их из функций. Синтаксис функционального типа в Котлин представлен списком типов параметров, разделенных запятой, затем оператором -> и типом возвращаемого значения функции. Пример функционального типа: (a: Int, b: Int) -> Int Здесь функциональный тип описывает функцию с двумя параметрами типа Int и возвращаемым значением типа Int. Функциональный тип может быть использован для создания переменных, которые могут хранить ссылки на функции. А также поддерживает перегрузку, что позволяет иметь несколько функций с различными сигнатурами, но с одинаковым именем. Ограничения функционального типа: 🔘 Тип передаваемой функции должен быть определен явно, чтобы компилятор мог проверить типы аргументов и возвращаемых значений. 🔘 Функциональный тип может содержать только один тип возвращаемого значения. 🔘 Функциональный тип не может содержать более 22 параметров из-за ограничения JVM. 🔘 Функциональный тип не поддерживает неявные преобразования типов. Несмотря на эти ограничения, функциональные типы позволяют обрабатывать функции как объекты, что повышает гибкость и выразительность кода. Пример определения функционального типа: // определение функционального типа typealias Operation = (Int, Int) -> Int // использование функционального типа fun calculate(op: Operation, a: Int, b: Int): Int { return op(a, b) } // пример вызова функции calculate val sum: Operation = { x, y -> x + y } calculate(sum, 10, 5) // результат: 15 Код из примера определяет функциональный тип Operation, который представляет собой функцию, принимающую два аргумента типа Int и возвращающую значение типа Int. Затем создается функция calculate, которая принимает три параметра: функцию op типа Operation и два аргумента типа Int. Внутри функции calculate вызывается переданная функция op с переданными аргументами a и b, и результат возвращается из функции calculate. В конце кода создается переменная sum, которая содержит лямбда-выражение, реализующее операцию сложения. Далее вызывается функция calculate с параметрами sum, 10 и 5, что приводит к вызову функции sum с аргументами 10 и 5, и результатом является число 15. @KotlinSenior #kotlin
899 просм.17 авг., 10:57
Вопрос с собеседования по Kotlin Расскажите о Data классах. Какие преимущества они имеют? 👇 Правильный ответ: Data класс предназначен исключительно для хранения каких-либо данных. Основное преимущество: для параметров, переданных в основном конструкторе автоматически будут переопределены методы toString(), equals(), hashCode(), copy(). Также для каждой переменной, объявленной в основном конструкторе, автоматически генерируются функции componentN(), где N — номер позиции переменной в конструкторе. Благодаря наличию вышеперечисленных функций внутри data класса мы исключаем написание шаблонного кода. @KotlinSenior #kotlin
1 021 просм.14 авг., 14:47
Kotlin Android MVVM Template — шаблон Android-приложения Kotlin Android MVVM Template — простой и легкий шаблон для приложения Jetpack Compose с полностью настроенной навигацией, Retrofit и Dagger-Hilt для вашего удобства, чтобы вы могли сосредоточиться только на важном. Фичи: 🔘 Полностью на Jetpack Compose 🔘 Jetpack Compose Navigation 🔘 Полностью настроенный Retrofit 🔘 MVVM 🔘 Kotlin DSL 🔘 Gradle Version Catalog для инъекции зависимостей detekt для проверки кода 🔘 Dependabot для обновления зависимостей 🔘 GitHub Actions CI/CD для проверки линтера, тестов и сборки APK 🔘 Coil для изображений 🖥 Kotlin Android MVVM Template на GitHub @KotlinSenior #kotlin
1 060 просм.13 авг., 17:06
5 ошибок в Kotlin, которые незаметно ухудшают производительность 1️⃣ Использование data class copy() в узких циклах Классы данных удобны. Но вот это: items = items.map { it.copy(isSelected = false) } Создает новый объект для каждого элемента. Если в вашем списке 5000 элементов? Это 5000 новых выделений памяти. И если это происходит часто (например, при обновлении состояния в Compose), вы постоянно генерируете мусор. Почему это вредно: 🔘 Увеличивается нагрузка на кучу 🔘 Увеличивается частота сборки мусора 🔘 Увеличивается количество пауз в потоках пользовательского интерфейса В областях, чувствительных к производительности, следует учитывать: 🔘 Обновление только измененных элементов 🔘 Тщательно используйте шаблоны неизменяемости 🔘 Избегайте полного пересоздания списка Чистая архитектура не означает пересоздания всего мира при каждом изменении состояния. 2️⃣ Запуск слишком большого количества корутин Корутины легковесны. Но не бесплатны. Распространен такой шаблон: items.forEach { launch { process(it) } } Теперь представьте 1000 элементов. Вы только что запустили 1000 корутин. Даже если они легковесные, они все равно увеличивают накладные расходы на планирование, добавляют переключение контекста, увеличивают нагрузку на диспетчер. 🔹 Лучший подход Используйте структурированную параллельность: coroutineScope { items.map { async { process(it) } }.awaitAll() } Или, еще лучше, выполняйте работу пакетами. Корутины — мощный инструмент, но неограниченный параллелизм — это ловушка производительности. 3️⃣ Чрезмерное переключение диспетчеров Это выглядит безобидно: ``` withContext(Dispatchers.IO) { val result = apiCall() withContext(Dispatchers.Main) { updateUI(result) } } ``` Но если этот шаблон повторяется внутри циклов или вложенных вызовов, вы платите за: 🔘 Переключение контекста потока 🔘 Стоимость синхронизации 🔘 Планирование основного потока Переключение диспетчера не является бесплатным. В высокочастотных операциях избегайте ненужного переключения между потоками. Думайте большими блоками работы. 4️⃣ Использование Flow для всего Современные разработчики Android обожают Flow. Иногда даже слишком сильно. Пример: flowOf(data) .map { transform(it) } .flowOn(Dispatchers.Default) .collect { render(it) } Для одной эмиссии. Это избыточно. Flow вводит механизмы корутин, отслеживание состояний, цепочки операторов, проверки отмены. Если вам нужен просто вызов функции, используйте функцию. Реактивные потоки мощны, когда у вас есть несколько эмиссий, проблемы с Backpressure, долгоживущие потоки. Не для простых преобразований. 5️⃣ Игнорирование выделения памяти внутри биндинга RecyclerView Это тонкий момент. override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.textView.text = "${user.firstName} ${user.lastName}" } Интерполяция строк? Создает новую строку при каждом срабатывании биндинга. Быстрая прокрутка 100 элементов = более 100 срабатываний в секунду. Немного? Да. Повторяется тысячи раз? Не такое уж немного. То же самое с созданием объектов DateFormat, созданием ClickListeners внутри биндинга, выделением новых списков при каждой привязке. Переместите все выделения за пределы биндинга, когда это возможно. Производительность RecyclerView умирает из-за 1000 микро-аллокаций. @KotlinSenior #kotlin
798 просм.13 авг., 13:47
Какие коллекции есть в Kotlin Коллекция — это объект, содержащий в себе набор значений одного или различных типов, а также позволяющий к этим значениям обращаться и извлекать. Другими словами — это контейнер, в который вы можете помещать то, что вам нужно, а затем каким-либо образом с ним взаимодействовать. В Kotlin есть три типа коллекций: 🔘 List (список). Упорядоченная коллекция, в которой к элементам можно обращаться по их индексам. Идентичные элементы (дубликаты) могут встречаться в списке более одного раза. Примером списка является предложение: это группа слов, их порядок важен, и они могут повторяться. 🔘 Set (множество/набор). Неупорядоченная коллекция без повторяющихся значений. Примером множества является алфавит. 🔘 Map (словарь/ассоциативный список). Набор из пар "ключ-значение". Ключи уникальны и каждый из них соответствует ровно одному значению. В коллекции могут присутствовать повторяющиеся значения, но не повторяющиеся ключи. Пример — ID сотрудников и их должностей. Map не является наследником интерфейса Collection. Два типа интерфейсов, на основе которых создаются коллекции: 1. Неизменяемый (read-only) — дают доступ только для чтения (Set, List, Map, Collection). 2. Изменяемый (mutable) — расширяет предыдущий интерфейс и дополнительно даёт доступ к операциям добавления, удаления и обновления элементов коллекции (MutableSet, MutableList, MutableMap, MutableCollection). @KotlinSenior #kotlin
744 просм.12 авг., 19:49
Kotlin DSL: создание предметно-ориентированных языков от теории до JsonBuilder. Бесплатный урок курса «Проектирование и разработка Kotlin-бэкенда» Одна из сильных сторон Kotlin — возможность создавать выразительные DSL, которые делают код понятнее и позволяют описывать сложную бизнес-логику практически как естественный язык. Однако многие разработчики используют готовые DSL, не понимая, как они устроены и какие возможности языка стоят за их реализацией. На открытом уроке 19 августа в 20:00 разберём принципы построения предметно-ориентированных языков в Kotlin. Поговорим о задачах и сценариях использования DSL, на практике создадим собственный JsonBuilder, изучим лямбды с получателем и extension-функции, а также посмотрим, как эти возможности помогают создавать удобные API и упрощать разработку. Урок не для тех, кто хочет ограничиться базовым синтаксисом Kotlin и не планирует использовать его продвинутые возможности. Будет полезен как Kotlin-разработчикам, так и тем, кто только знакомится с языком и хочет понять его сильные стороны. 👉 Записаться: https://vk.cc/d0q20O Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
752 просм.12 авг., 14:01
5 ошибок в Kotlin, которые незаметно ухудшают производительность 1️⃣ Последовательное выполнение операций с коллекциями внутри Hot Paths Это встречается повсюду. val result = users .filter { it.isActive } .map { it.profile } .sortedBy { it.name } Выглядит красиво. Но каждый оператор: 🔘 Создает новую промежуточную коллекцию 🔘 Выделяет память 🔘 Добавляет стоимость итерации Если это выполняется в коллбэке прокрутки, внутри биндинга RecyclerView, при каждом ответе API, в перекомпозициях Compose, то вы просто умножаете объем работы. Что происходит на самом деле? Каждый вызов: 🔘 filter() → создает новый List 🔘 map() → создает еще один List 🔘 sortedBy() → снова копирует Это множественные выделения памяти и циклы. Лучший подход в коде, критически важном для производительности Используйте последовательности: val result = users.asSequence() .filter { it.isActive } .map { it.profile } .sortedBy { it.name } .toList() Последовательности вычисляются лениво и сокращают количество промежуточных выделений памяти. Ещё лучше: иногда один ручной цикл быстрее и понятнее. Не всё должно быть «функциональной элегантностью». 2️⃣ Чрезмерное использование Inline классов и дженериков без понимания боксинга Чрезмерное использование Inline классов и дженериков без понимания боксинга Kotlin скрывает сложность JVM. Но это все еще JVM. Generic типы могут вызывать боксинг: fun process(value: T) Если T — это Int, оно может быть упаковано в Integer. Упаковка = выделение памяти для объекта. Аналогично, inline/value классы не всегда исключают выделение памяти во всех контекстах. Если важна производительность: 🔘 Проверьте байт-код 🔘 Используйте профилировщик 🔘 Поймите, когда примитивы упаковываются Высокоуровневый Kotlin не устраняет низкоуровневые издержки. 3️⃣ Массивные графы объектов в ViewModel Некоторые ViewModel выглядят так: 🔘 12 Flow 🔘 5 операторов объединения 🔘 Множественные преобразования 🔘 Цепочки map → filter → flatMapLatest Это выглядит архитектурно чистым. Но во время выполнения? 🔘 Каждый оператор добавляет накладные расходы 🔘 Объединение увеличивает выбросы 🔘 Частые перерасчеты Особенно в Compose, где изменения состояния запускают рекомпозицию. Сложные реактивные графы могут вызывать: 🔘 Неожиданные повторные вычисления 🔘 Скачки загрузки ЦП 🔘 Разряд батареи Иногда более простой контейнер состояния работает лучше, чем идеально реактивный конвейер. 4️⃣ «Совсем небольшая» блокировка основного потока Это опасно, потому что не приводит к сбою. val result = runBlocking { repository.getData() } Или: Thread.sleep(50) Или: database.query() Если блокировка длится 10–20 мс, вы можете этого не заметить. Но 16 мс = один кадр при 60 кадрах в секунду. Всё, что больше этого = пропущенный кадр. Микроблокировки накапливаются. Пользователи не видят «блокирующий вызов». Они чувствуют, что «приложение тормозит». 5️⃣ Не профилируют — просто предполагают Самая большая ошибка не в Kotlin. Это образ мышления. Разработчики предполагают. «Всё выглядит нормально». «Корутины легковесны». «Поток оптимизирован». «Compose всё обрабатывает». Производительность — это не вопрос убеждений. Это вопрос измерений. Используйте: 🔘 Профилировщик ЦП 🔘 Профилировщик памяти 🔘 Отслеживание выделения памяти 🔘 Системную трассировку Проверяйте: 🔘 Время холодного запуска 🔘 Рендеринг кадров 🔘 Частоту сборки мусора 🔘 Горячие точки выделения памяти Без профилирования вы просто гадаете. А в производительности полагаться на догадки — дорого. @KotlinSenior #kotlin
680 просм.12 авг., 10:33
Вопрос с собеседования по Kotlin Что такое нелокальный return? 👇 Правильный ответ: В Котлин non-local return — это механизм, который позволяет выйти из внешней функции или лямбда-выражения и вернуться к вызывающему коду, обходя оставшуюся часть текущей функции или лямбда-выражения. Он работает по-разному в зависимости от того, является ли функция inline или не-inline. В не-inline функциях: • Если внутри функции есть лямбда-выражение, non-local return из лямбда-выражения может привести к нелокальному завершению внешней функции. • Для использования non-local return внутри лямбда-выражения в не-inline функции, необходимо использовать метку (label) и оператор return@label. В inline-функциях: • В inline-функциях, лямбда-выражения становятся частью кода функции и имеют локальный контроль над потоком управления. • Оператор return внутри лямбда-выражения в inline-функции приведет только к завершению самого лямбда-выражения, не влияя на внешнюю функцию. @KotlinSenior #kotlin
742 просм.12 авг., 00:21
Почему reified можно использовать только с обобщенными типами (generics) Ключевое слово reified в языке Kotlin можно использовать только с обобщенными типами, потому что оно предназначено для решения конкретной проблемы, связанной именно с дженериками. Одна из особенностей обобщенных типов заключается в том, что информация о типе становится недоступной на этапе выполнения программы. Вместо этого на этапе компиляции создается код, который работает с типом-параметром "на уровне объекта", то есть как с любым другим объектом, не зная его конкретного типа. Именно reified позволяет сохранить информацию о типе-параметре на этапе выполнения программы. И дает нам возможность проверять типы в рантайме, создавать объекты типа-параметра и передавать их в качестве параметров других функций. Таким образом, ключевое слово reified не имеет смысла применять к необобщенным типам, поскольку они уже доступны в качестве конкретных объектов на этапе выполнения. @KotlinSenior #kotlin
767 просм.11 авг., 22:09
Rebound — мониторинг рекомпозиций Rebound — это плагин компилятора Kotlin, который инструментирует каждую функцию с аннотацией @Сomposable легковесными вызовами отслеживания. Во время выполнения он отслеживает частоту рекомпозиции в соответствии с бюджетами для каждого composable-объекта, обнаруживает нарушения и сообщает о них через окно инструментов Android Studio, CLI или logcat. Работает на Android и iOS (Compose Multiplatform). Настройка не требуется — просто примените плагин Gradle. Плагин IDE предоставляет панель мониторинга производительности с 5 вкладками, включающую мониторинг в реальном времени, ранжирование проблемных мест, тепловую карту временной шкалы, анализ стабильности и историю сессий с корреляцией с системами контроля версий. 🖥 Rebound на GitHub @KotlinSenior #kotlin
875 просм.11 авг., 20:30
Аннотация @JvmStаtic в Kotlin С помощью аннотации @JvmStatic есть возможность объявить методы по настоящему статическими, ее можно добавить как к методам object, так и к методам companion object. object ObjectWithStatic { @JvmStatic fun staticFun(): Int { return 5 } } В этом случае метод staticFun будет действительно объявлен статическим: public final class ObjectWithStatic { public static final ObjectWithStatic INSTANCE; @JvmStatic public static final int staticFun() { return 5; } private ObjectWithStatic() { INSTANCE = (ObjectWithStatic)this; } static { new ObjectWithStatic(); } } @KotlinSenior #kotlin
1 446 просм.8 авг., 00:19

Посты загружаются автоматически из канала. Администрация сайта не несёт ответственности за их содержание и размещённые в них ссылки.