когда (просмотр) против переключателя (view.getId()) с расширениями Kotlin для Android

Я новичок в разработке Android и Kotlin и в настоящее время изучаю учебные пособия, изначально написанные для Java. В них часто встречаются такие закономерности, как:

void onSomething(View v) {
  switch(v.getId()) {
  case R.id.btn1:
    ...
  }    
}

Однако я использую Kotlin с Kotlin Android Extensions в своих проектах, что позволяет писать такие переключатели, как:

fun onSomething(v: View) {
  when (v) {
    btn1 -> { ... }
  }
}

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

Итак, имея это в виду,

1) является ли использование ссылок View в коммутаторах вместо идентификаторов хорошей практикой в ​​Kotlin/KAE?

2) может ли это негативно повлиять на производительность моего приложения или объем памяти, если не считать преждевременную оптимизацию?


person Artalus    schedule 01.09.2019    source источник


Ответы (1)


Является ли использование ссылок View в коммутаторах вместо идентификаторов хорошей практикой в ​​Kotlin/KAE?

Что ж, оператор when в Kotlin эквивалентен оператору switch в Java.

Чтобы дать вам некоторую ясность, нет причин, по которым вы не можете сделать это:

fun onSomething(v: View) {
    when (v.id) {//do a switch on the id instead of the entire object
        R.id.something -> { ... }
    }
}

чтобы ответить на ваш вопрос относительно:

может ли это негативно повлиять на производительность моего приложения или объем памяти, если не считать преждевременную оптимизацию?

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

person a_local_nobody    schedule 01.09.2019
comment
При использовании объекта View в when() , какой из них проверяется для сравнения? ссылка на представление или весь объект? - person Ali Zarei; 03.02.2021