Как стать автором
Поиск
Написать публикацию
Обновить
63.14

Kotlin *

Статически типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Архитектура EBA aka реактивность на всю катушку

Время на прочтение14 мин
Количество просмотров9K

Я пришел в Tinkoff пару лет назад, на новый проект Клиенты и проекты, который тогда только запускался.
Сейчас уже не помню своих ощущений от новой тогда для меня архитектуры. Но точно помню: было непривычно, что Rx используется еще где-то, за пределами обычных походов в сеть и в базу. Сейчас, когда эта архитектура уже прошла некоторый эволюционный путь развития, хочется наконец рассказать о том, что было и к чему пришло.



По моему мнению, все популярные ныне архитектуры — MVP, MVVM и даже MVI — уже давно на арене и не всегда заслуженно. Разве у них нет недостатков? Я вижу их немало. Мы у себя решили, что хватит это терпеть, и (пере)изобрели новую, максимально асинхронную архитектуру.

Читать дальше →

Котлин против Свифта: Android и iOS движутся к созданию универсального языка?

Время на прочтение5 мин
Количество просмотров18K


Друзья, всем привет. На связи Дмитрий Кожевин — преподаватель базового курса «Android-разработчик» в OTUS. Специально для читателей нашего блога я подготовил перевод вот такой отчасти провокационной статьи. Очень интересно ваше мнение, поэтому после прочтения приглашаю всех в комментарии к данной публикации.



Как только Kotlin получил поддержку Google, явное волнение фанатов Kotlin стало не единственной реакцией. Те, кто не знаком с Kotlin, были весьма обеспокоены его уровнем совместимости с Java, средним временем, необходимым для его освоения, а также преимуществами использования Kotlin в целом.
Читать дальше →

Использование нативных корутин в Java

Время на прочтение2 мин
Количество просмотров14K
Многие современные языки поддерживают работу с корутинами на уровне языка. Java в данный момент не поддерживает корутины, но есть надежды что в будущем все может измениться.
Читать дальше →

11 видео с первого дня DevFest 2019 в Калининграде

Время на прочтение4 мин
Количество просмотров2.4K
28-29 сентября в Калининграде прошёл пятый DevFest — конференция для разработчиков от GDG Kaliningrad. Сегодня ребята бесплатно выложили в свой канал на YouTube записи с выступлениями спикеров.

image

Самодельный «сахар» для Android проекта или «Как делать нельзя»

Время на прочтение6 мин
Количество просмотров4.2K
Эта статья — набор небольших кубиков сахара для android-проекта, до которых я дошел в свое время и что мне пригодилось. Некоторые вещи, возможно, не будут идеальными решениями, но могут пригодиться вам так же, как в свое время пригодились и мне.
Читать дальше →

Как я упрощал процесс работы над опенсорс проектами

Время на прочтение4 мин
Количество просмотров3.2K

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

Читать дальше →

Книга «Head First. Kotlin»

Время на прочтение9 мин
Количество просмотров15K
imageПривет, Хаброжители! У нас вышла книга для изучения Kotlin по методике Head First, выходящей за рамки синтаксиса и инструкций по решению конкретных задач. Эта книга даст вам все необходимое — от азов языка до продвинутых методов. А еще вы сможете попрактиковаться в объектно-ориентированном и функциональном программировании.

Под катом представлен отрывок «Классы данных»
Читать дальше →

Реализация Kotlin Flow на C#

Время на прочтение10 мин
Количество просмотров7.4K

image


Всем привет!


Последние годы я занимаюсь разработкой под Андроид на Котлине. Не так давно, за неимением RxJava на Kotlin multiplatform, мы начали использовать корутины и flow – холодные стримы для Котлина из коробки. До Андроида я много лет провёл с C#, и там свои корутины есть уже очень давно, только их там так называть не принято. Но вот про аналог flow на async/await я не слышал. Основной инструмент для реактивного программирования – Rx.Net (собственно, здесь rx и родился). Вот я и решил поностальгировать и попробовать напилить велосипед.


Далее подразумевается, что читатель имеет представление о штуках, про которые говорилось в предыдущем абзаце. Для нетерпеливых — сразу ссылка на репозиторий.


Дисклеймер: данный код не претендует на использование в продакшене. Это — концепт, не более того. Что-то может работать не совсем так, как задумывалось.

Читать дальше →

Искусство аннотирования: пишем Java-friendly код на Kotlin

Время на прочтение6 мин
Количество просмотров7.4K
Привет, Хабр!

Сегодня мы затронем важнейшую тему: интероперабельность Java и Kotlin. Авторы предлагаемой публикации разумно предполагают, что переписать на Kotlin базу кода, сделанную на Java, маловозможно. Поэтому правильнее обеспечить взаимодействие кода на Java и Kotlin. Читайте, как это можно сделать при помощи аннотаций.
Читать дальше →

Telegraff: Kotlin DSL для Telegram

Время на прочтение10 мин
Количество просмотров22K

Лого


На Хабре тысячи статей про то, как сделать Телеграм-бота под разные языки программирования и платформы. Тема далеко не новая.


Но Telegraff – лучший фреймворк для реализации Телеграм ботов и я это под катом докажу.

А ну-ка

«Для сообщества критически важно установить стандарты»: Марчин Москала о Kotlin

Время на прочтение6 мин
Количество просмотров7.3K


Пару лет назад было много блог-постов «смотрите, какой интересный язык Kotlin», где объяснялись основы. В 2019-м разжёвывать азы уже не требуется, зато теперь появляется публикация совсем другого формата. Марчин Москала, который уже не первый год учит людей этому языку, сейчас выпускает книгу «Effective Kotlin» — то есть уже не просто «как писать на Kotlin», а «как писать на Kotlin наилучшим образом».

А скоро Марчин приедет к нам на Mobius с докладом. Поэтому мы поспрашивали его и про новую книгу, и про доклад, и про обучение людей Kotlin, и о происходящем в индустрии вокруг этого языка. И про то, чем различаются слова «effective» и «efficient».
Читать дальше →

Обработка ошибок в Kotlin/Java: как правильно это делать?

Время на прочтение7 мин
Количество просмотров20K

Источник


Обработка ошибок в любой разработке играет важнейшую роль. В программе может пойти не так практически всё: пользователь введёт некорректные данные, или они могут прийти такими по http, или мы ошиблись при написании сериализации/десериализации и в процессе обработки программа падает с ошибкой. Да может банально закончится место на диске.


спойлер

¯_(ツ)_/¯, нет единого способа, и в каждой конкретной ситуации придётся подбирать наиболее подходящий вариант, но есть рекомендации, как это делать лучше.

Читать дальше →

Пробуем Jetpack Compose в бою?

Время на прочтение7 мин
Количество просмотров21K

Наконец, настал момент, когда не нужно собирать самостоятельно Android Studio, чтобы попробовать новый декларативный UI framework для Android. Jetpack Compose стал доступен в виде первого Dev Preview в Maven-репозитории Google. С такой новости началось моё утро понедельника. И сразу же возникло желание посмотреть, что из себя представляет набор инструментов, который так ждали.


Читать дальше →

Ближайшие события

Как внедрить аналитику и не сломать приложение?

Время на прочтение7 мин
Количество просмотров6.5K
Привет! Меня зовут Соснин Илья. Я работаю в Lamoda Android разработчиком. Крашу кнопочки, прогаю списочки и, к сожалению, пишу аналитику…

Lamoda — это Data Driven Company, в которой все решения принимаются на основе поведения пользователей. Сначала мы наблюдаем и только потом делаем выводы. Поэтому несложно догадаться, что аналитика у нас есть, и она нам очень нужна.

В расшифровке моего доклада митапа Mosdroid #18 Argon я расскажу, как устроен наш SDK и почему рефлексия — это не всегда плохо. А также отвечу на главный вопрос этой темы: «Как внедрить аналитику и не сломать приложение?».
image
Для начала задам один простой вопрос: “Как вы думаете, сколько у нас установок в Google play?”.
Читать дальше →

Проблемы пакетной обработки запросов и их решения (часть 2)

Время на прочтение25 мин
Количество просмотров2.9K

Это продолжение статьи «Проблемы пакетной обработки запросов и их решения». Рекомендуется сначала ознакомиться с первой частью, так как в ней подробно описана суть задачи и некоторые подходы к ее решению. Здесь же мы рассмотрим другие методы.
Читать дальше →

Continuous delivery для вашей Kotlin Multiplatform библиотеки

Время на прочтение12 мин
Количество просмотров3.7K

Logo


Привет! Меня зовут Юрий Влад, я Android-разработчик в компании Badoo и принимаю участие в создании библиотеки Reaktive — Reactive Extensions на чистом Kotlin.


В процессе работы мы столкнулись с тем, что в случае с Kotlin Multiplatform continuous integration и continuous delivery требуют дополнительной настройки. Необходимо иметь в распоряжении несколько виртуальных машин на различных операционных системах, чтобы собрать библиотеку полностью. В этой статье я покажу, как настроить continuous delivery для вашей Kotlin Multiplatform библиотеки.

Читать дальше →

Generic Recycler View или как не писать шаблонный код

Время на прочтение4 мин
Количество просмотров8.3K
Все мы пишем приложения и у всех нас есть списки. И самое очевидное решение это RecyclerView. Сама по себе реализация не сложна и писать гайд по RecyclerView уже не актуально. Но есть одно но. Каждый раз когда нам нужен список мы создаем класс, в нем прописываем шаблонный методы, создаем шаблонные классы. Когда у нас 2-3 списка то ничего страшного в этом нет. Но когда их 10 или того более, то этого делать уже не хочется.

И вот столкнувшись с проблемой я начал искать. Нашел одну очень интересную реализацию на Kotlin. Она мне понравилась, но в ней не хватало нескольких элементов. Потратив еще пару часов, я смог доработать его и теперь реализация адаптера занимает несколько строчек. И здесь я хочу поделиться ею с вами.

Первое что нам необходимо сделать это создать адаптер.

abstract class GenericAdapter<T> : RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private var itemList = mutableListOf<T>()

    constructor()

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        return getViewHolder(
            LayoutInflater.from(parent.context)
                .inflate(viewType, parent, false)
            , viewType
        )
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        (holder as Binder<T>).bind(itemList[position], itemClickListener)
    }

    override fun getItemCount(): Int = itemList.size

    override fun getItemViewType(position: Int): Int = getLayoutId(position, itemList[position])

    fun update(items: List<T>) {
            itemList = items.toMutableList()
            notifyDataSetChanged()
    }

    protected abstract fun getLayoutId(position: Int, obj: T): Int

   protected open fun getViewHolder(view: View, viewType: Int): RecyclerView.ViewHolder {
        return ViewHolderFactory.create(view, viewType)
    }

    internal interface Binder<T> {
        fun bind(data: T)
    }
}
Читать дальше →

Обработка ошибок в функциональном стиле в Java

Время на прочтение2 мин
Количество просмотров5.5K
Кроме классического подхода для обработки ошибок с помощью исключений, можно выделить также функциональный подход.

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

Например, в языке Scala для этого используется определенный класс Try.

def inputStreamForURL(url: String): Try[Try[Try[InputStream]]] = parseURL(url).map { u =>
     Try(u.openConnection()).map(conn => Try(conn.getInputStream))
}

В Java мире с помощью библиотеки Vavr также можно обрабатывать ошибки в функциональном стиле.
Читать дальше →

Kaspresso: фреймворк для автотестирования, который вы ждали

Время на прочтение7 мин
Количество просмотров34K
Все, кто занимался или занимается автотестами под Android, знают, какая это боль.
От объема задач и проблем устаешь так, что и отпуск не помогает. Люди даже увольняются из-за автотестов.

Боль, страдания и мучения неизбежно приводят к появлению чего-то нового и прекрасного. Мы постарались собрать вместе все грабли, на которые нам пришлось наступить, объединили свои усилия с ребятами из «Авито» и HH и создали то, что сделает ваши отношения с автотестами несравнимо лучше и плодотворнее.

Встречайте: Kaspresso — фреймворк для автотестирования, который вы ждали!


Читать дальше →

Почему вам стоит выкинуть MVP из своих проектов

Время на прочтение4 мин
Количество просмотров15K

Всем привет! Сегодня я бы хотел поговорить об архитектуре Android-приложений.
На самом деле я не очень люблю доклады и статьи на данную тему, но недавно ко мне пришло осознание, с которым я бы хотел поделиться.

Читать дальше →