Siemenstim писал(а):Tamachi писал(а):
На самом деле в методе initColors() происходите следующее:
1. Создается временный массив localArrayList
2. В него заносятся цвета COLORS
3. Затем из него удаляются цвета FIRST_SET
4. Затем в него опять заносятся цвета FIRST_SET
(то есть теперь есть гарантия, что НИ ОДИН из цветов FIRST_SET не повторяется дважды)
5. Затем полученные цвета _добавляются_ (именно добавляются, а не присваиваются) в свойство mColors
Думаю, это просто демонострация.
Но что мешает тебе оформить COLORS и FIRST_SET как параметры метода initColors.
Тогда путем последовательного вызова initColors(...) ты сможешь добавлять/удалять группы цветов.
Это не демонстрация, а кусок реального кода (декомпилировал прогу и изучаю как она работает).
Хочу понять зачем они так сделали, ведь с учетом твоей поправки (п.5) можно весь код метода заменить одной строкой
this.mColors.addAll(COLORS);
ведь п.1-5 делают тоже самое (да еще и с лишним выделением памяти под localArrayList).
Получается мы вызываем метод ради одной строки кода? Зачем его тогда вызывать? Можно было-бы вместо вызова метода initColors() просто написать то, что я предлагаю. Или я чего-то не доучил еще?
p.s. Сильно не ругайся если спрашиваю глупости - я только учусь.
Лишнего выделения памяти не будет -- комппилятор прочухает и оптимизирует. Да и сборщик мусора есть.
Хорошо (по канонам) написанный код никогда не использует такие ляпы как
"переменная=значение".
Всегда лучше использовать
"setMyValue(myValue)" -- то есть использовать метод.
Прикинь: вдруг тебе в будущем потребуется отловить в коде все места, где изменяется какое-нибудь значение.
Подумай, что легче: пройтись по всему коду и сделать исправления везде где происходит изменение
или же просто подправить метод setMyValue?
Другой пример: вдруг тебе в будущем когда-нибудь захочется связать изменение твоего Value с каким-нибудь действием или событием. Например, при изменении цвета фона, совпадающего с цветом текста выдать предупреждение. Что проще: пройтись по всему коду и везде, где нужно дописать код или же чуть подправить
метод setMyValue?
Когда пишешь проект -- всегда надо оставлять зацепки на случай если "что-нибудь пойдёт не так как планировалось".
Чтобы в дальнейшем тебе было проще поддерживать проект -- всегда оформляй код так, чтобы потом долго не искать в коде место, "где надо поправить". И стремись к тому, чтобы это "поправить" нужно было только в одном-единственном месте.
Есть куча шаблонов проектирования, которые позволяют это сделать.
К сожалению, для андроида шаблоны проектирования ещё не написаны зато есть много шаблонов для Java.
Там твои вопросы более детально обсуждаются.