Реддит опять принёс прекрасное. Это актуальный код material3. Тут вы видите уникальную в своём роде Deprecated Experimental функцию. Апогей гугловости.
Я могу представить зачем они так делают. Типа чтобы даже люди, которые сидят на экспериментальных аннотациях, могли ещё какое-то количество версий пожить без обязаловки со стороны гугла, иначе взвоют. С композом бтв без экспериментальных аннотация вообще никак работать нельзя, это у нас норма.
Но даже это меня что-то не сильно убеждает. С точки зрения меня как пользователя Experimental и Deprecated это прямо противоположные вещи. Первая про то, что код слишком новый и может поменяться, а вторая про то, что код слишком старый и может удалиться.
Я бы даже сказал, что Experimental это вообще лишняя сущность. Тебе как автору библиотек ничего не мешает и стабильный код депрекейтить. Часто это и делают. А это попытка усидеть на двух стульях. Ты или смирись с тем, что ты написал, или подумай ещё раз и напиши нормально, без соломки в виде аннотаций, которые мы всё равно все вынуждены использовать.
До кучи, это код из того же файла. 43 (сорок три) параметра в функции. Может быть я тут слишком консервативен, но не перебор ли это? 😒
В среднем весь Compose UI такой. Взять какой-нибудь TextField
- 19 параметров. Text
- 16 параметров. Найти компонент где меньше 5 параметров в функции почти невозможно. В Compose, вся комплексность настройки компонентов переместилась из полей классов и атрибутов в параметры функций. И мне кажется, что это скорее плохо, чем хорошо. Инструменты, IDE, кодстайлы, всё это нужно как-то дорабатывать, потому что раньше такие функции - это был позор, под это никто ничего не закладывал.
Пару недель назад в твиттере был срач, в котором человеку накидали в панамку за сигнатуру функции его экрана. Там все хором говорили, что слишком много всего, что надо на подкомпоненты разбивать, что надо слоты в родительских делать. И это, конечно, способ решать эту проблему, так нужно делать. Но этот способ такой, до поры до времени. Если у вас компонент чуть сложнее, чем просто контейнер для нескольких подкомпонентов, то всё равно это обрастёт параметрами.