en
Feedback
Javanese Online

Javanese Online

Open in Telegram

Статьи и новости, наблюдения и советы. Кодревью: http://javanese.online/%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_%D0%BA%D0%BE%D0%B4%D0%B0/ Обсуждение в @javanese_questions Материалы пишет @Harmonizr

Show more
723
Subscribers
No data24 hours
+37 days
+530 days
Posts Archive
В продолжение темы парсинга джейсонов, затронутой в последнем кодревью.

Ревью библиотеки FitBitAuth для Android. Будет полезно всем, кто начинает писать библиотеки.

Полная версия моего доклада про антипаттерны. Таймкод для тех, кто видел предыдущие версии, есть в описании.

Трудно поверить, но это задача с платных курсов.
Трудно поверить, но это задача с платных курсов.

Итак, что же это было. Понять можно, если посмотреть на строчку ""&'<>": это код для замены «опасных» для XML символов на соответствующие сущности (entities).

Кстати, о компактном размещении данных в памяти. Есть идеи, что делает этот чудесный код, который я нарочно скомпилировал и д
Кстати, о компактном размещении данных в памяти. Есть идеи, что делает этот чудесный код, который я нарочно скомпилировал и декомпилировал?

Массив пар или пара массивов? В ситуации, когда нужно хранить множество пар, кортежей, точек и т. п., есть несколько решений.
Массив пар или пара массивов? В ситуации, когда нужно хранить множество пар, кортежей, точек и т. п., есть несколько решений. В интернете встречал информацию о том, что в JVM наивный вариант (1) медленнее, чем «вывернутый наизнанку» вариант (2). Это правда: во втором варианте данные лежат плотнее, больше шансов попадания в кэши процессора. Но я бы предложил вариант (3). Именно так массив структур лежал бы в С или Rust. Тут и память сэкономлена, и прыжков по указателям меньше.

you.getСпина().setColor(0xFF_FFFFFF);

«Java многословная» — говорили они
«Java многословная» — говорили они

Head First Kotlin Бегло просмотрел эту книжку. Есть, конечно, откровенные ляпы вроде «Char variables are used for single char
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». «Вы узнаете, как писать компактные функции единичных выражений». Все слова переведены (лексика потерялась, дата-классы стали классами данных), а структура предложений осталась (т. н. «калька»).

Итераторы В джавовых коллекциях «сколько-нибудь элементов типа T» выражается типом Iterable<T>. Но сейчас есть java.util.stream.Stream и kotlin.Sequence, которые не наследуют Iterable. Причём не потому что авторы врединки, а потому что итераблы многоразовые, а стримы с сиквенсами одноразовые и их не стоит смешивать. Также стримы и сиквенсы не являются подтипами друг друга, потому что существуют параллельно — в Java 1.8+ и в Kotlin, который совместим с 1.6. Единственное, что их объединяет, — это старые добрые итераторы. Если какому-нибудь методу нужно единожды вычитать «сколько-нибудь элементов типа T», можно принимать непосредственно Iterator<T>. Это сделает код совместимым и с итераблами, и с коллекциями, и со стримами, и с сиквенсами. Более того, ничто не мешает прямо на месте создать new Iterator<T>() { … } / iterator { yield } и нагенерировать данных на лету.

Транскрипт доклада Егора Бугаенко о том, как нужно собеседовать, а как — нет. Очень перекликается с тем, что я обычно говорю о задачах на алгоритмы и подготовке к собесам. Кстати, мы на @spbpeerlab проводим тренировочные собеседования для всех желающих.

«Какую книгу почитать новичку для вкатывания с нуля?» Пока не знаю. Зато точно знаю, какую читать не стоит.

«Я считаю, что бывают программы, которые написаны» Мне тоже очень хочется верить Тагиру, что бывают :) https://youtu.be/FTQUXQsSQ_Y?t=1451

Обратная совместимость уместна не только в программных интерфейсах, но и в пользовательских. Старая последовательность действий должна вести к одинаковому результату и в старых, и в новых версиях. Любое убирание функциональности должно происходить ступенчато, с предупреждением и пояснениями.

Процессы и потоки Наконец порезал видео с весенней Android Academy. Основы многопоточки в Java и Android. youtu.be/TWlhCraPd3Q

На DevFest буду с более полной версией. https://devfest.space/schedule/2019-11-23?sessionId=kotlin_antipattern

Листы против массивов Везде рекомендуют использовать в публичных API коллекции, а не массивы. И я с этим согласен. Но мне всегда очень хотелось минимизировать количество обёрток, объектов в памяти, переходов по указателям и т. п.. Kotlin-MPP Collection utils — горстка inline-классов как раз для этих целей.