Mike
Как я могу получить контекст в ресайклере?
В адаптере? В onCreateViewHolder можно спросить у parent.
Dyno
А во вьюхолдере у itemView
Sergey
В адаптере? В onCreateViewHolder можно спросить у parent.
Да, верно, в адаптере, прошу прощения
Sergey
А во вьюхолдере у itemView
Спасибо, сейчас поэкспериментирую
Vlad
Всем привет) Читал правила оформления кода в Котлине и наткнулся на интересную часть "Do not sort the method declarations alphabetically or by visibility, and do not separate regular methods from extension methods. Instead, put related stuff together, so that someone reading the class from top to bottom would be able to follow the logic of what's happening." Странно, я раньше думал что сортировать методы и переменные по видимости это нормально, что думаете по этому поводу?
Konstantin
правило меньше 1к
Konstantin
класс меньше 1к строк
Konstantin
метод меньше 50
Konstantin
помоему отличные правила
Mike
класс <500 (без доков), метод <10-20
Di7aK
а в итоге мы видим около 50 тысяч строк в гугловских сорсах
Vlad
понял) всем спасибо!)
Ferrero
индусы, сэр
Ну там очень много документации
Сергій
и дикое легаси
Sergey
getDialog().dismiss()
Спасибо, тоже попробую
Mike
а в итоге мы видим около 50 тысяч строк в гугловских сорсах
так это же прекрасно. Гуглокод — идеальный антипример.
Ferrero
Но все равно в 500 строк не уложиться))
Ferrero
Я не знаю, как можно уместить это все в 500 строк, если в джаве нет расширений
Ferrero
Вьюха сама по себе имеет много методов
Konstantin
зачем вендора обсуждать я не понимаю
Сергій
так это же прекрасно. Гуглокод — идеальный антипример.
Интересно было бы увидеть эпло-код, не зря же они его прячут 😁
Daniel
Устраивайся в эпл)
Daniel
И потом продавай знания)
Stepan
И потом продавай знания)
Тим Кук лично отымеет за продажу чего-либо оттуда
Daniel
знания и опыт, а не код)
Philipp
про хороший код: можете попробовать заглянуть в исходники телеграма на гитхабе я страшнее ничего ещё не видел
Ferrero
Страшно в каком плане?
Philipp
Страшно в каком плане?
открываешь рандомные классы — 10-15 тысяч строк, у меня подвисает что браузер, что иде
Pavel
господа, помогите советом, плз. есть экран. на нем можно выделить три больших элемента: сверху AppBarLayout с CollapsableToolbarLayout внутри, под ним находится Relative с несколькими вьюхами, и под ним находится ресайклер вью. и тут такая тема: после того, когда листаем вниз, и AppBarLayout свернулся, при дальнейшем скролле сначала должен ушйти Relative, и потом начать прокручиваться RecyclerView. вариант с тем, чтобы запихнуть Relative в AppBarLayout не подходит (Relative не всегда отображается, и когда он gone, АppBarLayout ведет себя не очень хорошо). запихнуть Relative и Recycler в NestedScrollView не подходит (мне не нравится поведение Recycler'а в этой ситуации). дать люлей дизайнеру (мало ли, вдруг кто предложит) - не подходит. уволиться (встречал тут и такие ответы) тоже не подходит) как вылезти из этой ситуации? точнее, как это все будет грамотно организовать? а то у меня идеи совершенно закончились. P.S. сорян, если непонятно объяснил, на "схеме" сверху разрисовал смысл идеи.
Philipp
но при этом приложения, которое бы стабильнее работало, чем телеграм, я ещё не видел
Philipp
https://github.com/DrKLO/Telegram можете заценить
Philipp
Видимо, не было другого выхода
я уверен, что был вот в таких блоках весь код
Mike
Реклама котлина
конечно, ведь на котлине говнокод красивый! ❤️
Philipp
Реклама котлина
а причём здесь котлин? несколько уровней вложенности — это не проблема джавы, это проблема рук
Ferrero
Ну как минимум в нем нет постоянных if != null
Mike
плохой код остаётся плохим кодом
Ferrero
Сколько больших проектов вообще опен сурс?
ᴀɴᴅʀᴇʏ
я уверен, что был вот в таких блоках весь код
Это сделано специально. Чем больше напишешь говнокода в проекте, тем больше ты становишься незаменимым и тебя не уволят, ибо только ты сможешь это поддерживать
Philipp
Ну как минимум в нем нет постоянных if != null
очень надо if != null, сделай лучше if (a == null) { return; } …
Mike
очень надо if != null, сделай лучше if (a == null) { return; } …
a ?: return другое дело, что return должен быть строго один
Philipp
a ?: return другое дело, что return должен быть строго один
почему он должен быть строго один?
Mike
почему он должен быть строго один?
для читаемости-понятности
Philipp
камон, ранние ретёрны всегда будут лучше смотреться, чем уровни вложенности из-за else
Mike
камон, ранние ретёрны всегда будут лучше смотреться, чем уровни вложенности из-за else
ранние ретёрны нужно только в плохом коде, при всяких проверках на нуллы и пустые значения
Konstantin
a ?: return другое дело, что return должен быть строго один
ды нет не должен, early return нормальная практика для проверки пред-условий
Konstantin
FirebaseInstanceId .getInstance() .instanceId .addOnCompleteListener(OnCompleteListener { task -> if (!task.isSuccessful) { return@OnCompleteListener } val token = task.result?.token ?: return@OnCompleteListener ... })
Philipp
ранние ретёрны нужно только в плохом коде, при всяких проверках на нуллы и пустые значения
тебе так или иначе бывают нужны подобные куски вот рандомный пример со стековерфлоу
Konstantin
пиздец
это пример из документации практически
Mike
здесь все ранние ретёрны должны бросать исключения
Mike
это пример из документации практически
ну значит пиздец не тебе, а документации
Konstantin
войд колбэки с ранними ретернами - збс
Konstantin
я хз че те так не нравится, везде и всюду буквально в любом языке их юзают
Philipp
здесь все ранние ретёрны должны бросать исключения
чтоб потом лишний трай-кетч делать? зачем?
Mike
это пример из документации практически
ясен хрен, что она переведена конвертером, и никто там глазами в эту дичь не смотрел
Mike
чтоб потом лишний трай-кетч делать? зачем?
чтобы валиться при нарушении предусловий, а не продолжать бессмысленное выполнение
Михаил
я уверен, что был вот в таких блоках весь код
тут я вижу лишь проблему с показом кучи анимации
Михаил
и кстати, ифы здесь будут что в джаве, что в котлине одинаковые
Konstantin
я просто лестницы из кода не люблю
Konstantin
if(blabla) if(blabla2) if(blabla3)
Михаил
я просто лестницы из кода не люблю
не пиши анимации в приложении )))
Philipp
тут я вижу лишь проблему с показом кучи анимации
там миллион разных действий в одном куске кода, это всегда плохо
Konstantin
че бы сразу не писать if (!blabla) return if (!blabla2) return if (!blabla3) return намного проще
Konstantin
ну и скратить вообще в одну строку через &&
Philipp
чтобы валиться при нарушении предусловий, а не продолжать бессмысленное выполнение
хз, я не буду сейчас искать контрпример, но я уверен, что или твой код выглядит и читается плохо, или ты просто не очень понимаешь, как оно выглядит