To val, or to const val, that is the question — заметка о различиях между val и const val в Kotlin.
РЕКОМЕНДУЕМ:
Полезные советы разработчику на языке Kotlin
Возьмем следующий пример:
1 2 |
val FANCY_VAL = 1 const val FANCY_CONST_VAL = 2 |
Обе эти переменные немодифицируемые, но вторая объявлена с ключевым словом const в начале. Что это значит на деле? Во-первых, FANCY_VAL станет приватной переменной, для доступа к которой будет создан геттер. Это можно увидеть, если скомпилировать код и затем декомпилировать его в Java:
1 2 3 4 5 6 7 8 |
public final class ConstValKt { private static final int FANCY_VAL = 1; public static final int FANCY_CONST_VAL = 2; public static final int getFANCY_VAL() { return FANCY_VAL; } } |
Во-вторых, переменная FANCY_CONST_VAL будет заинлайнена, то есть компилятор заменит все полученные значения этой переменной на само значение. Это тоже можно увидеть, если написать код, использующий эти переменные, а затем скомпилировать и декомпилировать его.
Оригинальный код:
1 2 3 4 |
public static void main(String[] args) { System.out.println(ConstValKt.get_FANCY_VAL()); System.out.println(ConstValKt.MY_FANCY_CONST_VAL); } |
Декомпилированный код:
1 2 3 4 |
public static void main(String[] var0) { System.out.println(ConstValKt.getFANCY_VAL()); System.out.println(2); } |
Вывод: const val позволяет оптимизировать код, избавившись от ненужных геттеров и обращений к переменным.
РЕКОМЕНДУЕМ:
Inline-функции Kotlin