Здесь онлайн интерпретатор, здесь документация.
Зачем
В сентябре 2020 года я учился на 2 курсе. В том же месяце я впервые написал программу, которая мне понравилась. Она создаёт svg изображения растений, здесь её можно потрогать.
Здесь онлайн интерпретатор, здесь документация.
В сентябре 2020 года я учился на 2 курсе. В том же месяце я впервые написал программу, которая мне понравилась. Она создаёт svg изображения растений, здесь её можно потрогать.
Больше всего в Kotlin мне нравятся некоторые мелкие особенности, благодаря которым язык становится очень элегантным. Например, смарт-кастинг (контракты), приостановка, функции приемника/расширения и делегирование.
Но на данный момент моей любимой особенностью является сочетание функций inline и suspend.Читать полностью »
Меня зовут Фёдор Игнаткевич, я делаю приложение Яндекс и мобильный Яндекс Браузер для Android. Примерно год назад я предложил команде идею фреймворка для внедрения зависимостей, который более чем вдвое ускорил сборку обоих проектов и который мы сегодня выложили на Гитхаб — чтобы разработчики других приложений тоже могли улучшить скорость сборки. Я с нуля реализовал фреймворк, а затем мы вместе с командой интегрировали его в проекты и сейчас активно используем.
Как раз про свой опыт разработки я и хочу рассказать. Давайте попробуем разобраться, какие есть факторы замедления сборки, как Yatagan, совместимый с Dagger по API, с ними справляется и какие ещё задачи могут стоять перед DI-фреймворком — например, в части зависимостей под рантайм-условиями. Кстати, нативная поддержка этих зависимостей в Yatagan избавила нас от ручной обработки состояний A/B-экспериментов в DI.
Статья содержит много технических моментов, которые я открыл для себя по ходу исследований. В конце посмотрим, каким проектам Yatagan может быть полезен в качестве замены, а в каких польза от него будет невелика.
Читать полностью »
Всем привет! Меня зовут Максим Бредихин, я Android-разработчик в Тинькофф. А это — вторая статья серии об интересных моментах из Fragment API, о которых вы, возможно, не знали.
Часть 2. (Не) создаем инстанс (вы находитесь здесь)
Часть 3. Навигация (coming soon)
В этой статье я расскажу про исключительную ситуацию, которая произошла с одним исключением в продакшене нашего Android приложения.
Оригинальная статья написана мной, так что это не совсем "перевод", это ее интерпретация от того же автора.
В Java 5 появились generic-типы, а вместе с ним и концепция type erasure, которая буквально означает стирание информации о generic-типе после компиляции. Действительно, во многих случаях это просто синтаксический сахар, помогающий писать типо-безопасный код на уровне компиляции, и в runtime с такими типами работать нельзя. Например, невозможно получить тип T внутри ArrayList<T>, поэтому он в своей реализации создает массив Object[], а не T[] для хранения элементов.
Однако, в ряде случаев это очень даже возможно. Например, можно объявить поле
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanPostProcessor;
...
@Autowired
private Set<BeanPostProcessor> beanPostProcessors;
и spring в него заинжектит все объекты контекста, которые реализуют интерфейс BeanPostProcessor.
Можно написать и так:
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
...
List<String> strings = new ObjectMapper()
.readValue("[1, 2, 3]", new TypeReference<>() {});
// все элементы strings - строки (не Integer и не Long)
List<Integer> ints = new ObjectMapper()
.readValue("[1, 2, 3]", new TypeReference<>() {});
// все элементы ints - Integer (не String и не Long)
Можно написать даже так:
Читать полностью »
Данная инициатива - не реклама, пиар, прикол или что-либо, имеющее под собой злой умысел. Это именно инициатива, цель которой собрать под одной "крышей" таких же маслят в Java, как я, и помогать в обучении.
Однажды ты просыпаешься и понимаешь: избыточность компонентов и рассинхронизация в твоём приложении начинают вредить пользователям. Однажды ты смотришь на написанное давным-давно ядро, плачешь горькими слезами, и приходит это некомфортное, но вместе с тем немного соблазнительное ощущение — что рефакторинг назрел. Добро пожаловать на экскурсию по рефакторингу Музыки, начиная с ресёрча и заканчивая эксплуатацией! Я покажу вам реальный код и постараюсь в деталях вспомнить, как мы формировали требования к механизмам и разрабатывали их, рисовали у себя в голове и в коде границы ядра, по одной переделывали очереди и внедряли то, что получилось, в SDK.
Читать полностью »
Привет, Хабр! Каждую неделю, в своем телеграм-канале Mobile Native, я публикую дайджест с интересными и полезными материалами (новости, статьи, инструменты, библиотеки и т.д.) для мобильных разработчиков. Решил попробовать публиковать эту рубрику и на Хабре. Посмотрим, что из этого получится.
Android 🤖
• Dependency Inversion Principle: How Google Developers write code
• Как мы используем фича-флаги в мобильном приложении QIWI Кошелек
Читать полностью »