Kotlin. Змінні та константи

Змінні та константи. Ключові слова var, val, const


Зміст


Пошук на інших ресурсах:

1. Призначення змінних та констант. Необхідність використання змінних та констант у програмі. Види змінних

В мові Kotlin фундаментальною одиницею будь-якої програми є змінні та константи. Вони використовуються для зберігання даних (значень) у програмі.

Дані описуються відповідними типами. А, отже змінні та константи мають визначений тип. Більш детально про типи даних можна прочитати тут.

Кожна змінна чи константа зберігає деяке значення визначеного типу. Тип даних визначає розмір комірки пам’яті, що буде виділена для оголошеної змінної чи константи.

В залежності від алгоритму розв’язку задачі, у програмі може використовуватись будь-яка кількість змінних чи констант.

Кожна змінна чи константа має ім’я, яке задається при її оголошенні. Ім’я змінної вибирається таким чином, щоб воно відповідало призначенню цієї змінної у програмі. Наприклад, кількість елементів доцільно позначити іменем length або count, а об’єм якогось об’єкту іменем volume.

Правильний вибір імен у програмі дає наступні взаємозв’язані переваги:

  • підвищується читабельність програми;
  • полегшується супровід програми іншими програмістами;
  • знижується ризик допущення помилок, які можуть виникнути внаслідок плутанини в іменах.

У програмі можна оголошувати змінні двох видів:

  • змінювані змінні (посилання), що оголошуються з використанням ключового слова var. Значення такої змінної у програмі можна змінювати багатократно;
  • незмінювані змінні (посилання) або змінні, доступні тільки для читання. У цьому випадку використовується ключове слово val. Такій змінній неможна присвоїти значення після ініціалізації (змінній присвоюється значення тільки один раз). Ці змінні відповідають змінним мови Java, які оголошені з модифікатором final.

 

2. Синтаксис оголошення змінної. Ключове слово var

Будь-яка змінна у програмі на мові Kotlin може бути оголошена одним з двох способів:

  • без ініціалізації;
  • з ініціалізацією.

Синтаксис (загальна форма) оголошення змінної без ініціалізації має наступний вигляд:

var VariableName : Type

тут

  • VariableName – ім’я змінної;
  • Type – тип змінної (Int, Double тощо). Більш детально про базові типи даних можна прочитати тут.

Після такого оголошення, змінній можна присвоювати значення типу Type або іншого типу, сумісного з типом Type.

Синтаксис оголошення змінної з ініціалізацією дозволяє одразу присвоїти потрібне значення змінній

var VariableName : Type = Value

тут

  • VariableName – ім’я змінної, яка зберігатиме дані типу Type;
  • Value – деяке значення. Це значення може бути літералом, ім’ям іншої змінної чи константи, результатом повернення з функції.

Якщо змінній VariableName присвоїти значення типу, який не є типом Type або несумісний з ним, то компілятор видасть помилку несумісності типів.

 

3. Приклад оголошення змінних різних типів з використанням ключового слова var

 

fun main(args:Array<String>) {
  // Ключове слово var
  // 1. Оголошення змінних без ініціалізації
  // 1.1. Змінна з іменем x типу Short
  var x : Short

  // пізніше змінній x можна присвоювати деяке значення типу Short
  x = 100

  // 1.2. Змінна y типу String (рядок)
  var y : String
  y = "bestprog.net"

  // 1.3. Змінна z типу Float
  var z : Float
  z = 1234.56f

  println("x = " + x)
  println("y = " + y)
  println("z = " + z)

  // 2. Оголошення змінних з ініціалізацією
  // Оголосити змінну a типу Double
  // і присвоїти їй значення 12.88
  var a:Double = 12.88

  // Оголосити змінну b типу Int
  // і присвоїти їй цілу частину змінної a
  var b:Int = a.toInt() // b = 12

  // Оголосити змінну c типу Char і присвоїти їй значення
  var c:Char = '+';

  // Оголосити змінну d типу String
  // і присвоїти їй рядок
  var d:String = "Hello world!";

  println("a = " + a)
  println("b = " + b)
  println("c = " + c)
  println("d = " + d)
}

Результат виконання програми

x = 100
y = bestprog.net
z = 1234.56
a = 12.88
b = 12
c = +
d = Hello world!

Якщо у вищенаведеному коді спробувати присвоїти числове значення змінній y

...

// 1.2. Змінна y типу String (рядок)
var y : String

// Спроба присвоїти змінній y числове значення
y = 120 // помилка компіляції 

...

то компілятор видасть помилку

Error:(17, 9) Kotlin: The integer literal does not conform to the expected type String

Це є логічно, оскільки змінна y при оголошенні має тип String (рядок) і присвоїти їй числове значення неможливо.

 

4. Змінні, доступні тільки для читання (незмінювані змінні). Використання ключового слова val в оголошенні змінної. Синтаксис

Мова Kotlin дозволяє використовувати змінні, доступні тільки для читання. Ці змінні мають незмінні значення протягом усього часу виконання програми. Ці змінні не є константами. Вони можуть отримувати значення тільки один раз.

Наприклад, якщо програма працює з деяким файлом, то допускається задати ім’я файлу один раз на початку програми, щоб потім використовувати цей файл багатократно.

Якщо змінна, що призначена тільки для читання, отримала початкове значення, повторна спроба зміни цього значення викличе помилку компіляції.

Як і у випадку з var-змінними (див. п. 2) у мові Kotlin допускається оголошувати змінні, призначені тільки для читання, одним з двох способів:

  • без початкової ініціалізації;
  • з початковою ініціалізацією.

Загальна форма (синтаксис) оголошення змінної, призначеної тільки для читання, без початкової ініціалізації наступна

val VarName : Type

тут

  • VarName – ім’я оголошуваної змінної;
  • Type – тип оголошуваної змінної.

Після такого оголошення, змінній можна присвоїти нове значення тільки один раз

VarName = Value

тут Value – деяке значення, літерал, змінна, константа чи результат повернення з функції.

Відповідно, синтаксис оголошення змінної, призначеної тільки для читання, з початковою ініціалізацією наступний

val VarName : Type = Value

 

5. Приклад оголошення та використання змінних, доступних тільки для читання

 

fun main(args:Array<String>) {
  // Ключове слово val
  // 1. Оголошення без ініціалізації
  // 1.1. Для типу Long
  val a : Long
  a = 1_000_000_000_000_000_000

  //a = 300 // тут помилка, повторно змінювати змінну a заборонено

  // 1.2. Для типу Char
  val c : Char
  c = '&'

  println("a = " + a)
  println("c = " + c)

  // 2.1. Оголошення з ініціалізацією
  // 2.2. Для типу Byte
  val d : Byte = 15

  // 2.2. Для типу String
  val fileName = "myfile.txt"

  println("d = " + d)
  println("fileName = " + fileName)
}

Результат виконання програми

a = 1000000000000000000
c = &
d = 15
fileName = myfile.txt

Якщо у вищенаведеному коді спробувати змінити значення змінної a повторно

a = 300 // тут помилка, повторно змінювати змінну a заборонено

то компілятор видасть помилку

Error:(11, 5) Kotlin: Val cannot be reassigned

 

6. Синтаксис оголошення константи. Ключове слово const

У мові Kotlin допускається оголошувати константи – імена, що отримують незмінювані значення протягом виконання програми. Це значення, які ніколи не змінюються у програмі. Їх ще називають константи часу компіляції, тому що значення константам присвоюється під час компіляції (в момент, коли програма компілюється).

Константи можуть отримувати значення тільки базових типів: Int, Double, Float, Long, Short, Byte, Char, String, Boolean.

Для оголошення константи використовується модифікатор const.

Щоб у програмі оголосити константу потрібно, щоб ця константа була в глобальній області видимості. Оголосити константу в локальній області видимості (в тілі функції) не вдасться. На спробу оголошення константи в тілі функції (у межах фігурних дужок { }) компілятор видасть помилку.

Синтаксис оголошення константи має два різновиди:

  • з явним вказанням типу константи;
  • без явного задавання типу константи. У цьому випадку тип константи визначається типом отримуваного значення (літералу).

Синтаксис оголошення константи з явним вказанням типу наступний

const val ConstantName : Type = Value

тут

  • ConstantName – ім’я константи. При використанні цього імені у програмі, буде підставлятись значення Value;
  • Value – значення, яке отримує константа.

Синтаксис оголошення константи без явного задавання типу має вигляд

const val ConstantName = Value

 

7. Приклади оголошення констант

Константи оголошуються в глобальній області видимості, тобто за межами функції main() або будь-якої іншої функції.

 

// Оголошення константи - глобальна область видимості
// 1. Без явного вказання типу
const val Pi = 3.1415;        // константа типу Double
const val Language = "Kotlin" // константа типу String

// З вказанням типу
const val Max : Int = 200 // константа типу Int

//
fun MyFun() {
  // Тут заборонено оголошувати константи   
  // ...
}

fun main(args:Array<String>) {
  // В локальній області заборонено оголошувати константу

  // Використання констант Pi, Language, Max у функції main()
  println("Pi = " + Pi)
  println("Language = " + Language)
  println("Max = " + Max)
}

Результат виконання програми

Pi = 3.1415
Language = Kotlin
Max = 200

Якщо у вищенаведеному коді спробувати оголосити константу в тілі функції main()

fun main(args:Array<String>) {
  // В локальній області заборонено оголошувати константу
  const val Radius = 1.5 // помилка компіляції

  // ...
}

то компілятор видасть помилку

Error:(22, 5) Kotlin: Modifier 'const' is not applicable to 'local variable'

 

8. Що таке статична типізація?

У мові Kotlin реалізована статична типізація. Це є перевірка компілятором вихідного коду, написаного програмістом, на коректність та сумісність типів.

В контексті сказаного розрізняють статичну перевірку сумісності типів. Ця перевірка дозволяє побачити помилки ще до компіляції коду.

 

9. Що таке автоматичне визначення типів?

Автоматичне визначення типу – це визначення типу змінної чи константи на основі значення, яке вона отримує при її оголошенні.

Кожне значення, яке присвоюється змінній чи константі, має визначений тип. Якщо в оголошенні змінної чи константи не вказувати їх тип, то ця змінна або константа прийме тип значення яке вона отримує.

Приклад. Оголошуються змінні та константи які отримують різні типи на основі отримуваних значень.

// Оголошення константи типу Float
const val constFloat = 1.777F // 1.777F - значення типу Float

// Оголошення константи типу Long
const val Max = 10000000000L

...

// Оголошення змінної типу Char
var c1 = 'Z'
val c2 = 'X'

// Оголошення змінної типу Double
var a = 2.5
var b = 3.8
val c = 2.7

 


Споріднені теми