#статьи
👨💻 Выжимаем максимум из код-ревью
Большинство разработчиков не любит проводить код-ревью. Все понимают, что это важно и нужно, могут с ходу назвать три-четыре причины необходимости этого процесса. Но раз за разом они всячески избегают его. Или участвуют в нём неэффективно.
Поэтому разрушим шаблоны — не будем акцентировать внимание на важности и полезности код-ревью, а разберёмся в причинах сложившейся неприязни к этому процессу. И попробуем понять, как с этим жить.
Читать статью
👉 Новости 👉 База вопросов
Большинство разработчиков не любит проводить код-ревью. Все понимают, что это важно и нужно, могут с ходу назвать три-четыре причины необходимости этого процесса. Но раз за разом они всячески избегают его. Или участвуют в нём неэффективно.
Поэтому разрушим шаблоны — не будем акцентировать внимание на важности и полезности код-ревью, а разберёмся в причинах сложившейся неприязни к этому процессу. И попробуем понять, как с этим жить.
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 moko-resources
Это библиотека для Kotlin Multiplatform, предоставляющая доступ к ресурсам (строкам, изображениям, цветам и другим) в приложениях для iOS, Android, macOS, браузеров и JVM!
Она позволяет использовать ресурсы из общего кода, обеспечивая поддержку локализации, тёмной темы и других платформенных особенностей.
Гитхаб
👉 Новости 👉 База вопросов
Это библиотека для Kotlin Multiplatform, предоставляющая доступ к ресурсам (строкам, изображениям, цветам и другим) в приложениях для iOS, Android, macOS, браузеров и JVM!
Она позволяет использовать ресурсы из общего кода, обеспечивая поддержку локализации, тёмной темы и других платформенных особенностей.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#ЛитКод
Задача: 360. Sort Transformed Array
Дан отсортированный массив целых чисел nums и три целых числа a, b и c. Примените квадратичную функцию вида f(x) = ax^2 + bx + c к каждому элементу nums[i] в массиве и верните массив в отсортированном порядке.
Пример:
👨💻 Алгоритм:
1⃣ Преобразование и сортировка
Преобразуем каждый элемент массива nums по квадратичной функции f(x) = ax^2 + bx + c и сохраняем результаты в массив transformed. Используем алгоритм поразрядной сортировки для сортировки массива transformed.
2⃣ Поразрядная сортировка
Находим максимальное значение по модулю в массиве для определения количества цифр. Применяем поразрядную сортировку к массиву transformed.
3⃣ Сортировка по цифре
Для каждой цифры (разряда) используем подсчет для сортировки массива.
😎 Решение:
👉 Новости 👉 База вопросов
Задача: 360. Sort Transformed Array
Дан отсортированный массив целых чисел nums и три целых числа a, b и c. Примените квадратичную функцию вида f(x) = ax^2 + bx + c к каждому элементу nums[i] в массиве и верните массив в отсортированном порядке.
Пример:
Input: nums = [-4,-2,2,4], a = 1, b = 3, c = 5
Output: [3,9,15,33]
Преобразуем каждый элемент массива nums по квадратичной функции f(x) = ax^2 + bx + c и сохраняем результаты в массив transformed. Используем алгоритм поразрядной сортировки для сортировки массива transformed.
Находим максимальное значение по модулю в массиве для определения количества цифр. Применяем поразрядную сортировку к массиву transformed.
Для каждой цифры (разряда) используем подсчет для сортировки массива.
class Solution {
fun sortTransformedArray(nums: IntArray, a: Int, b: Int, c: Int): IntArray {
val transformed = nums.map { a * it * it + b * it + c }.toIntArray()
radixSort(transformed)
return transformed
}
private fun radixSort(array: IntArray) {
val maxElement = array.map { Math.abs(it) }.maxOrNull() ?: 0
var placeValue = 1
while (maxElement / placeValue > 0) {
countingSortByDigit(array, placeValue)
placeValue *= 10
}
val negatives = array.filter { it < 0 }.sorted()
val positives = array.filter { it >= 0 }.sorted()
array.indices.forEach { array[it] = if (it < negatives.size) negatives[it] else positives[it - negatives.size] }
}
private fun countingSortByDigit(array: IntArray, placeValue: Int) {
val output = IntArray(array.size)
val count = IntArray(10)
array.forEach { count[(Math.abs(it) / placeValue) % 10]++ }
for (i in 1 until 10) count[i] += count[i - 1]
for (i in array.indices.reversed()) {
val digit = (Math.abs(array[i]) / placeValue) % 10
output[count[digit] - 1] = array[i]
count[digit]--
}
output.indices.forEach { array[it] = output[it] }
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Для чего используется модификатор reified в Kotlin?
Модификатор
👉 Новости 👉 База вопросов
Модификатор
reified используется в сочетании с inline , чтобы сохранить информацию о типе в generic-функциях, несмотря на стирание типов (type erasure). С его помощью можно проверять типы, создавать объекты и вызывать методы по типу во время выполнения. Это полезно для работы с рефлексией или написания более универсального кода.Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#полезное
📞 Emoji
Это библиотека для Kotlin Multiplatform, которая добавляет поддержку эмодзи в Android, iOS и JVM-приложениях!
Она предоставляет инструменты для выбора, отображения и работы с эмодзи в текстовых полях, кнопках и других UI-элементах. Библиотека включает несколько провайдеров эмодзи, таких как Google, iOS, Facebook и Twitter, что позволяет адаптировать внешний вид эмодзи под нужды приложения.
Гитхаб
👉 Новости 👉 База вопросов
Это библиотека для Kotlin Multiplatform, которая добавляет поддержку эмодзи в Android, iOS и JVM-приложениях!
Она предоставляет инструменты для выбора, отображения и работы с эмодзи в текстовых полях, кнопках и других UI-элементах. Библиотека включает несколько провайдеров эмодзи, таких как Google, iOS, Facebook и Twitter, что позволяет адаптировать внешний вид эмодзи под нужды приложения.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#полезное
😊 Calf
Это библиотека для Compose Multiplatform, упрощающая создание адаптивных пользовательских интерфейсов и доступ к платформенно-специфичным API!
✅ Она предоставляет готовые компоненты для UI, работы с файлами, WebView, разрешениями и мультимедиа на Android, iOS, настольных и веб-платформах.
Гитхаб
👉 Новости 👉 База вопросов
Это библиотека для Compose Multiplatform, упрощающая создание адаптивных пользовательских интерфейсов и доступ к платформенно-специфичным API!
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🔥1
#Собес
🤔 Объясните концепцию делегатов в Kotlin.
Делегаты в Kotlin позволяют делегировать реализацию свойств или функций другим объектам. Это упрощает реализацию таких задач, как ленивая инициализация (
👉 Новости 👉 База вопросов
Делегаты в Kotlin позволяют делегировать реализацию свойств или функций другим объектам. Это упрощает реализацию таких задач, как ленивая инициализация (
lazy ), наблюдение за изменениями ( observable ) или добавление дополнительного поведения без наследования.Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
👍1
#полезное
🤓 KMP-App-Template-Native — шаблон для создания приложений на Kotlin Multiplatform с использованием нативных UI для Android и iOS!
✅ Он включает общую бизнес-логику и обработку данных, а также нативные UI-реализации с использованием Jetpack Compose для Android и SwiftUI для iOS. Шаблон использует различные библиотеки Kotlin Multiplatform для сетевых запросов, сериализации JSON, внедрения зависимостей и работы с ViewModel.
Гитхаб
👉 Новости 👉 База вопросов
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🔥1
#полезное
🤯 Koin — это лёгкий и прагматичный фреймворк для внедрения зависимостей (Dependency Injection) на языке Kotlin!
✅ Он поддерживает как Kotlin Multiplatform, так и Android. Koin предоставляет удобный DSL для настройки зависимостей, минимизирует избыточность кода и интегрируется с различными экосистемами, включая Jetpack Compose и Ktor.
Гитхаб
👉 Новости 👉 База вопросов
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 Ныне популярный vibe-coding теперь и в Android Studio благодаря Firebender!
По своей сути, то же самое, что и Cursor, Trae и windsurf, но встроено внутрь Android Studio. Демо для тех кто слышит об этом впервые можно глянуть тут: https://firebender.com/
Это кратно удобнее, чем задавать вопросы в чат. Доступны как популярные модели
👉 Новости 👉 База вопросов
По своей сути, то же самое, что и Cursor, Trae и windsurf, но встроено внутрь Android Studio. Демо для тех кто слышит об этом впервые можно глянуть тут: https://firebender.com/
Это кратно удобнее, чем задавать вопросы в чат. Доступны как популярные модели
claude-3.7, так и локально запущенные llm. Пробовали ли на своих проектах работу с AI агентами в паре?Please open Telegram to view this post
VIEW IN TELEGRAM
vas3k.blog
Вайб-кодинг
Новый способ программирования в эпоху GenAI
#Собес
🤔 Каково назначение ключевого слова by в Kotlin?
Ключевое слово
👉 Новости 👉 База вопросов
Ключевое слово
by используется для делегирования. Оно позволяет классу передавать выполнение функций или управление свойством другому объекту. Это упрощает повторное использование кода и добавление дополнительного поведения к уже существующей функциональности.Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
👍1
#полезное
😊 KoalaPlot — это библиотека для создания графиков и диаграмм, основанная на Compose Multiplatform и написанная на языке Kotlin!
✅ Она позволяет создавать интерактивные диаграммы для Android, десктопа, iOS и веба с использованием единого API. Поддерживает разнообразные виды графиков, такие как круговые, линейные, столбчатые, а также графики на основе полярных координат. В библиотеке предусмотрена широкая настройка визуальных элементов, таких как цвета, шрифты, взаимодействие с пользователем и анимации.
Гитхаб
👉 Новости 👉 База вопросов
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#полезное
😵💫 EitherNet — это библиотека для Kotlin, предназначенная для обработки API-ответов в приложениях!
✅ Она предоставляет типизированный подход к обработке результатов сетевых запросов, используя sealed-классы для представления успешных и неудачных ответов. Это упрощает работу с ошибками, исключая необходимость использования исключений для обработки ошибок. Например, можно различать типы ошибок, такие как сетевые сбои, HTTP-ошибки или специфические API-ошибки, что делает код более безопасным и понятным.
✅ Библиотека интегрируется с Retrofit, позволяя разработчикам легко подключить её к существующим API-запросам. Она поддерживает аннотации, такие как @.DecodeErrorBody, для автоматической обработки тела ошибок HTTP-ответов. Это делает работу с API более удобной и предсказуемой, улучшая качество обработки ошибок и делая код проще для чтения и поддержки.
Гитхаб
👉 Новости 👉 База вопросов
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#ЛитКод
Задача: 364. Nested List Weight Sum II
Вам дан вложенный список целых чисел nestedList. Каждый элемент является либо целым числом, либо списком, элементы которого также могут быть целыми числами или другими списками.
Глубина целого числа — это количество списков, внутри которых оно находится. Например, вложенный список [1,[2,2],[[3],2],1] имеет значение каждого целого числа, установленное равным его глубине. Пусть maxDepth будет максимальной глубиной любого целого числа.
Вес целого числа определяется как maxDepth - (глубина целого числа) + 1.
Верните сумму каждого целого числа в nestedList, умноженную на его вес.
Пример:
👨💻 Алгоритм:
1⃣ Инициализировать первый уровень BFS-дерева, добавив все элементы из входного nestedList в очередь.
2⃣ Для каждого уровня извлекать передний элемент из очереди. Если это список, то добавить его элементы в очередь. В противном случае обновить значения sumOfElements, maxDepth и sumOfProducts.
3⃣ Когда очередь станет пустой, вернуть значение (maxDepth + 1) * sumOfElements - sumOfProducts.
😎 Решение:
👉 Новости 👉 База вопросов
Задача: 364. Nested List Weight Sum II
Вам дан вложенный список целых чисел nestedList. Каждый элемент является либо целым числом, либо списком, элементы которого также могут быть целыми числами или другими списками.
Глубина целого числа — это количество списков, внутри которых оно находится. Например, вложенный список [1,[2,2],[[3],2],1] имеет значение каждого целого числа, установленное равным его глубине. Пусть maxDepth будет максимальной глубиной любого целого числа.
Вес целого числа определяется как maxDepth - (глубина целого числа) + 1.
Верните сумму каждого целого числа в nestedList, умноженную на его вес.
Пример:
Input: nestedList = [[1,1],2,[1,1]]
Output: 8
Explanation: Four 1's with a weight of 1, one 2 with a weight of 2.
1*1 + 1*1 + 2*2 + 1*1 + 1*1 = 8
class Solution {
fun depthSumInverse(nestedList: List<NestedInteger>): Int {
val queue: Queue<NestedInteger> = LinkedList(nestedList)
var depth = 1
var maxDepth = 0
var sumOfElements = 0
var sumOfProducts = 0
while (queue.isNotEmpty()) {
val size = queue.size
maxDepth = maxOf(maxDepth, depth)
repeat(size) {
val nested = queue.poll()
if (nested.isInteger()) {
val value = nested.getInteger()
sumOfElements += value
sumOfProducts += value * depth
} else {
queue.addAll(nested.getList())
}
}
depth++
}
return (maxDepth + 1) * sumOfElements - sumOfProducts
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Объясните модификатор suspend в Kotlin.
Модификатор
👉 Новости 👉 База вопросов
Модификатор
suspend в Kotlin используется для пометки функций, которые могут быть приостановлены и возобновлены в рамках корутин. Это позволяет функции выполнять асинхронные операции, не блокируя поток, и вызывать другие приостанавливаемые функции внутри себя.Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
👍1
#полезное
🥺 AAY-chart — это библиотека для создания графиков в приложениях на Kotlin Multiplatform и Jetpack Compose!
✅ Она поддерживает несколько типов диаграмм, таких как линейные, столбчатые, круговые, пончиковые и радарные.
Гитхаб
👉 Новости 👉 База вопросов
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
😊 Это база: companion object (также Singleton)
Объекты можно объявлять внутри класса, при этом нет каких-либо ограничений по их количеству. Но только один объект можно пометить ключевым словом
Синглтон-свойство
Важно отметить, что
Такому объекту можно не указывать свое имя, и обращаться к методам и свойствам объекта через имя содержащего его класса без явного указания имени объекта.
Компилируется в
👉 Новости 👉 База вопросов
Объекты можно объявлять внутри класса, при этом нет каких-либо ограничений по их количеству. Но только один объект можно пометить ключевым словом
companion object в рамках одного класса.Синглтон-свойство
companion object достигается за счет того, что он создается внутри класса в качестве статического поля. Он будет инициализирован при первом обращении к нему или при создании первого экземпляра класса, в котором он объявлен.Важно отметить, что
companion object будет инициализирован первым, а затем уже будет создан экземпляр класса:class MyClass {
init {
// Выполняется всегда после инициализации companion object
}
companion object {
init {
// Выполняется всегда перед блоком init содержащего класса
}}}
val myClass = MyClass()Такому объекту можно не указывать свое имя, и обращаться к методам и свойствам объекта через имя содержащего его класса без явного указания имени объекта.
class SomeClass {
companion object {
fun create()
}
}
val someClass = SomeClass.create()Компилируется в
public static final class на Java. Работает подобно ключевому слову static в Java.Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
🤯 Размещение UI-компонентов в пределах отступов Safe Area
Безопасная область (safe area) — это часть экрана, которую не загораживают элементы системного UI, такие как строка состояния, панель навигации, динамический остров и пр.
По умолчанию SwiftUI гарантирует, что представления будут размещены в этой безопасной области, чтобы сохранить видимость и доступность. Однако бывают случаи, когда разработчикам требуется больше контроля над тем, как представления взаимодействуют с этими границами.
Читать статью
👉 Новости 👉 База вопросов
Безопасная область (safe area) — это часть экрана, которую не загораживают элементы системного UI, такие как строка состояния, панель навигации, динамический остров и пр.
По умолчанию SwiftUI гарантирует, что представления будут размещены в этой безопасной области, чтобы сохранить видимость и доступность. Однако бывают случаи, когда разработчикам требуется больше контроля над тем, как представления взаимодействуют с этими границами.
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 В чем разница между init и constructor в Kotlin?
👉 Новости 👉 База вопросов
constructor создаёт экземпляр класса и принимает параметры, а блок init выполняет инициализацию, общую для всех конструкторов. Блок init всегда выполняется после вызова конструктора, что позволяет настроить обьект или проверить параметры.Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
🤓 Kopy — это библиотека для Kotlin, предназначенная для удобного глубокого копирования объектов!
🚩 Она позволяет создавать новые экземпляры классов данных с измененными свойствами, включая вложенные объекты, без необходимости вручного копирования каждого поля. Это особенно полезно при работе со сложными структурами данных, где требуется изменить только часть объекта, сохранив остальные данные неизменными.
Гитхаб
👉 Новости 👉 База вопросов
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM