Переменные

Переменные

Переменные перед использованием также, как и функции должны быть объявлены либо как переменные только для чтения ключевым словом val либо как переменная для чтения и записи ключевым словом var. После ключевого слова идёт название переменной и необязательно, но можно написать двоеточие ":" и тип данных, которые хранятся в функции (название класса). Все переменные должны быть инициализированы, что означает у них должно быть значение:
val a : Int = 10 // Объявление и инициализация переменной только для чтения с именем a, для хранения значений целого числа, чей тип указывается во время объявления
val b = 20 // Тип переменной необязательно указывать если сразу присваивается значение, так как тип переменной определяется в зависимости от типа присваиваемого значения
val c: Int // Тип необходимо указывать, если переменная не инициализируется сразу
c = 30 // Инициализация значением 30 в отдельной строке 

c = 50 // Ошибка! Для изменения значения переменной её необходимо объявить ключевым словом var
var d = 100 // Тип автоматически определяется по присвоенному значению
d = 200 // Значение переменной изменено на 200, так как переменная объявлена ключевым словом var 

Значение переменных, объявленных с ключевым словом val не могут быть изменены:

Область видимости переменных

Переменные, объявленные в каком-либо блоке доступны в этом блоке и во всех его вложенных блоках. Блоки есть в функциях, лямбда выражениях, if, when, циклах (for, while), классах. Поэтому, если переменная объявлена в классе она доступна во всех функциях этого класса, если переменная объявлена в теле функции, она доступна в этой функции и во вложенных блоках функции, но не доступна в других функциях, так как область видимости заканчивается при окончании тела функции.
fun scope() {
    // Объявление переменной внутри функции
    var scopeVar = 10

    if(scopeVar == 10) 
    {
        // Переменная scopeVar доступна, так как объявлена в родительском блоке блока if
        scopeVar = 20
    }
} // - Окончание блока функции

fun scope2() {
    // Переменная scopeVar недоступна, так область видимости закончилась при окончании функции scope
    print(scopeVar)
}