По-явански
رفتن به کانال در Telegram
Пишу про Java-технологии, Kotlin и Android-разработку. Редко но метко. Кодревью: http://javanese.online/%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_%D0%BA%D0%BE%D0%B4%D0%B0/ Поболтать IRL: @coffeeCodeEverywhere Автор: @Harmonizr Менеджер по рекламе: /dev/null
نمایش بیشتر823
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-17 روز
+530 روز
آرشیو پست ها
823
Массив пар или пара массивов?
В ситуации, когда нужно хранить множество пар, кортежей, точек и т. п., есть несколько решений.
В интернете встречал информацию о том, что в JVM наивный вариант (1) медленнее, чем «вывернутый наизнанку» вариант (2). Это правда: во втором варианте данные лежат плотнее, больше шансов попадания в кэши процессора.
Но я бы предложил вариант (3). Именно так массив структур лежал бы в С или Rust. Тут и память сэкономлена, и прыжков по указателям меньше.
823
Head First Kotlin
Бегло просмотрел эту книжку. Есть, конечно, откровенные ляпы вроде «Char variables are used for single characters»; «In Kotlin, numbers are objects, and the variable holds a reference to the object, not the object itself» или
arrayOf(1, 2, 3), но в целом вполне хорошо. Отличная аналогия между переменными и стаканами, размерностью и размером стакана. Хорошо разъясняется тема передачи аргументов в функции, раскрыто много базовых тем.
«Питер», 2020, перевел с английского Е. Матвеев
Перевод с трудом дотягивает по качеству до машинного.
«Напоследок мы расскажем, почему объекты играют
такую важную роль в программировании Kotlin».
«Вы узнаете, как писать компактные функции единичных выражений».
Все слова переведены (лексика потерялась, дата-классы стали классами данных), а структура предложений осталась (т. н. «калька»).823
Итераторы
В джавовых коллекциях «сколько-нибудь элементов типа T» выражается типом
Iterable<T>. Но сейчас есть java.util.stream.Stream и kotlin.Sequence, которые не наследуют Iterable. Причём не потому что авторы врединки, а потому что итераблы многоразовые, а стримы с сиквенсами одноразовые и их не стоит смешивать. Также стримы и сиквенсы не являются подтипами друг друга, потому что существуют параллельно — в Java 1.8+ и в Kotlin, который совместим с 1.6.
Единственное, что их объединяет, — это старые добрые итераторы.
Если какому-нибудь методу нужно единожды вычитать «сколько-нибудь элементов типа T», можно принимать непосредственно Iterator<T>. Это сделает код совместимым и с итераблами, и с коллекциями, и со стримами, и с сиквенсами. Более того, ничто не мешает прямо на месте создать new Iterator<T>() { … } / iterator { yield } и нагенерировать данных на лету.823
Транскрипт доклада Егора Бугаенко о том, как нужно собеседовать, а как — нет. Очень перекликается с тем, что я обычно говорю о задачах на алгоритмы и подготовке к собесам.
Кстати, мы на @spbpeerlab проводим тренировочные собеседования для всех желающих.
823
«Какую книгу почитать новичку для вкатывания с нуля?» Пока не знаю. Зато точно знаю, какую читать не стоит.
823
«Я считаю, что бывают программы, которые написаны»
Мне тоже очень хочется верить Тагиру, что бывают :)
https://youtu.be/FTQUXQsSQ_Y?t=1451
823
Обратная совместимость уместна не только в программных интерфейсах, но и в пользовательских.
Старая последовательность действий должна вести к одинаковому результату и в старых, и в новых версиях. Любое убирание функциональности должно происходить ступенчато, с предупреждением и пояснениями.
823
Процессы и потоки
Наконец порезал видео с весенней Android Academy. Основы многопоточки в Java и Android.
youtu.be/TWlhCraPd3Q
823
На DevFest буду с более полной версией. https://devfest.space/schedule/2019-11-23?sessionId=kotlin_antipattern
823
Листы против массивов
Везде рекомендуют использовать в публичных API коллекции, а не массивы. И я с этим согласен.
Но мне всегда очень хотелось минимизировать количество обёрток, объектов в памяти, переходов по указателям и т. п..
Kotlin-MPP Collection utils — горстка inline-классов как раз для этих целей.
823
Спасибо @egroden за внимательность!
Регистрация не через приложение для iOS — тут: https://cocoaheads-spb.timepad.ru/event/1113307/
823
15 ноября пройдет петербургская встреча CocoaHeads на площадке от Revolut.
В программе:
– Sign In with Apple (client + server)
Пётр Третьяков, Redmadrobot
– Рефакторинг в условиях быстрорастущего стартапа
Георгий Фесенко, Revolut
– Эволюция антипаттернов в Java и Kotlin
Михаил Горюнов, Яндекс
Афтерпати, викторина и тёплая атмосфера практически в сердце Петербурга.
https://apps.apple.com/ru/app/cocoaheads-russia/id1257534277
823
«Скажите этому чуваку, что у него эхо!»
Казалось, всё должно пройти хорошо: саундчек был, настройки шумоподавления и громкости мы выбрали. Я открыл Impress на обоих экранах: один стримил, на втором видел следующий слайд. На телефоне открыл YouTube, чтобы поглядывать в чат, в Telegram держал связь с организаторами.
Оказывается, чат в YouTube не работает на телефоне. Он остаётся белым полотном, и по нему не угадать, пустой он или сломался.
Вот такой получился полезный опыт тестирования в проде.
Приношу всем извинения за эхо и паузы в попытке всё исправить.
823
10 ноября(воскресенье) приглашаем всех желающих на бесплатный онлайн-доклад практикующего Android-разработчика Михаила Горюнова (github.com/Miha-x64, twitter.com/Miha_x64, @javanese_online)
💬Тема доклада: «Эволюция антипаттернов в Java и Kotlin».
Приходите послушать и прокачать свой skill.💪🏼 Будет интересно и полезно!
———————————————
❗️Save the date! 10 ноября в 19 по мск❗️
———————————————
Трансляция состоится в ⏰19:00 по московскому времени на нашем Youtube-канале https://www.youtube.com/c/SkillBranch.
Присоединяйся!🏃🏻♂️💨
823
Основы?.программирования?.на?.Kotlin!!
Мне прислали проект на ревью и попросили пояснить, правильно ли реализованы MVP и маппинг.
Отвечаю: нет, хороший маппер — выпиленный маппер, то же касается и хорошего презентера.
Так что я просто разобрал встреченные в проекте ошибки.
Напомню, любой желающий может прислать свой код на ревью. Если пример окажется интересным и нетипичным, я постараюсь его разобрать.
