Intereting Posts
Проверьте, нет ли ландшафта через ADB Имеет ли смысл иметь более одного сокета UDP Datagram в режиме ожидания? Являются ли «одновременные» пакеты сброшены или поставлены в очередь ядром? Изменить макет или активность фрагмента (?) С помощью навигационного ящика Изменение темы выбора учетной записи Android – Правильный способ использования AsyncTasks? Android: Как организовать ресурсы проекта? Как протестировать миграцию базы данных в Android? Как исключить модуль из всех зависимостей, но оставить явное объявление Gradle Проект Android-градиента строит очень медленно Android ListView с флажком: автоматически отменяет Как изменить цвет панели выбора текста, который появляется при копировании текста? Как добавить logcat в ACRA Значок приложения ShareActionProvider от AppCompat слишком велик по сравнению с другими значками Тестирование использования батареи Работа с ограничением размера текстуры Android

Для Android-событий, почему операторы switch более распространены, чем цепочки if-else?

Когда разработка для Android – это оператор switch более эффективный, чем цепочка if-else? Оператор switch принимает больше строк кода, но, как представляется, более частое использование в приложениях для Android выглядит более часто.

Приведенные ниже примеры иллюстрируют одну и ту же конструкцию программирования с аргументом case и цепочкой if-else. Оператор switch требует 10 строк, в то время как для цепочки if-else требуется 7.

Заявление о случаях

public void onClickWithSwitch(View v) { switch(v.getId()) { case R.id.buttonA: buttonA(); break; case R.id.buttonB: buttonB(); break; case R.id.buttonC: buttonC(); } } 

Цепочка if-else

 public void onClickWithIf(View v) { int id = v.getId(); if(id == R.id.buttonA) buttonA(); else if (id == R.id.buttonB) buttonB(); else if (id == R.id.buttonC) buttonC(); } 

Почему переключаться чаще, чем цепочка if-else? Операторы switch предлагают лучшую производительность по сравнению с целями if-else?

Solutions Collecting From Web of "Для Android-событий, почему операторы switch более распространены, чем цепочки if-else?"

Языки switch имеют инструкции switch чтобы позволить компилятору генерировать таблицу перехода, которая быстрая, если она большая, потому что во время выполнения она может получить желаемый код в O (1), а не O (N).

Это полезно только по скорости, если есть много случаев, и код для выполнения в каждом случае не занимает много времени, и программа тратит на это большую часть времени.

Кроме того, это просто вопрос вкуса.

Между количеством строк кода и скоростью нет никакой связи. Важно то, что генерируется код языка ассемблера, с которым я бы посоветовал вам ознакомиться.

Если ваша последовательность ifs / cases не будет действительно огромной, я не думаю, что это имеет значение. С заявлением переключателя, более ясно, что происходит. Единственный недостаток – это все заявления о break и возможность пропустить один, но статический анализатор должен это поймать.

Лучше всего будет карта с ключом по идентификатору или умное использование подкласса

«Более эффективная» – это смутная концепция, потому что существует так много способов ее измерения. Я полагаю, большинство людей думают о времени выполнения. С другой стороны, большинство людей не думает об эффективности памяти. Оператор switch с широко разнесенными тестовыми значениями может быть ужасным всплеском памяти, если только компилятор достаточно умен, чтобы повторно интерпретировать его как цепочку if-else.

Кроме того, есть много чего сказать, для эффективности программирования, включая обслуживание и удобочитаемость. Как было отмечено, оператор switch может быть более четким в отношении намерений программиста, чем цепочка if-else. Комментарии могут уравновешивать это, но для этого требуется больше работы для программиста, а также существует риск того, что комментарии и код не совпадают (особенно после нескольких циклов обслуживания).

Я полагаю, что большинство людей следуют тому стилю, которому их учили (или сказали следовать), не задумываясь об этом слишком много. В остальное время, я думаю, большинство решений о switch vs. if-else основаны на том, что лучше всего соответствует мышлению программиста в момент создания кода.

Вы спросили: действительно ли оператор switch более эффективен?

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

Поэтому я бы строго пошел на удобочитаемость.

Пока мы обсуждаем этот вопрос, никто не упоминал, что в инструкции switch всегда должна быть строка по default . Обычно вы хотите создать исключение, но, по крайней мере, вы должны утверждать и / или регистрировать ошибку.

Это просто хорошее базовое защитное программирование. Он предупреждает вас, что у вас есть ошибка программирования, если вы позже добавите еще одну кнопку (в этом случае).