Kotlin. Шаблонні рядки

Шаблонні рядки. Конструкції $ та ${}. Приклади конструювання шаблонних рядків


Зміст


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

1. Шаблонні рядки. Особливості використання для одиночних значень. Префікс $

У мові Kotlin існують різноманітні засоби створення рядків на основі поточних даних програми. З допомогою шаблонів, будь-який рядок може бути побудований зі значень змінних та результатів виразів.

Шаблон формується одним з двох способів:

  • на основі використання префіксу $, який слідує перед іменем змінної чи константи;
  • на основі використання конструкції ${}, яка дозволяє обчислювати результати виразів.

Шаблон, взятий в подвійні лапки, утворює шаблонний рядок. У найпростішому випадку шаблонний рядок, в якому отримується значення однієї змінної, має наступний вигляд:

"$var_name"

тут

  • var_name – ім’я змінної (val або var), значення якої підставляється у шаблонний рядок.

У шаблонному рядку допускається отримувати значення будь-якої кількості змінних.

 

2. Приклад конвертування змінних різних типів у шаблонні рядки та їх використання

У прикладі демонструється конвертування поодиночних змінних різних типів в шаблонні рядки.

// Шаблонні рядки

// Зчислення, що визначає дні тижня
enum class Days (vl : Int) {
  Sun(1),
  Mon(2),
  Tue(3),
  Wed(4),
  Thi(5),
  Fri(6),
  Sat(7)
}

// Константа
const val Pi = 3.1415

fun main(args:Array<String>)
{
  // Демонстрація використання шаблонних рядків

  // 1. Сформувати шаблонний рядок для цілого типу Int
  val d : Int
  d = 25
  var s : String = "$d"
  println("s = " + s) // s = 25

  // 2. Для значення з плаваючою комою
  var x : Double = 3.887
  s = "$x"
  println("s = " + s) // s = 3.887

  // 3. Для константи Pi
  s = "$Pi"
  println("s = " + s) // s = 3.1415

  // 4. Обчислити довжину кола радіусу 2.0
  //   та вивести її як шаблонний рядок
  val area : Float = Pi.toFloat() * 2.0F
  println("area = $area") // area = 6.283

  // 5. Вивести значення усіх змінних за один раз
  println("$d, $x, $Pi, $area") // 25, 3.887, 3.1415, 6.283

  // 6. Використання шаблонних рядків для зчислень
  val days : Days
  days = Days.Fri
  println("$days") // Fri
}

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

s = 25
s = 3.887
s = 3.1415
area = 6.283
25, 3.887, 3.1415, 6.283
Fri

 

3. Обчислення значень складних виразів. Конструкція ${ }. Використання оператора if-else в шаблонному рядку

Мова Kotlin має засоби обчислення результатів виразів всередині шаблонного рядка. Для цього використовується конструкція, яка має наступну загальну форму

${expression}

тут

  • expression – деякий вираз, який має сенс з точки зору синтаксису мови Kotlin.

Для виразу expression можна сформувати наступні твердження:

  • вираз допускає використання оператора умовного переходу if-else;
  • вираз допускає вкладення конструкцій ${} одна в одну при формуванні шаблонного рядка;
  • вираз не допускає використання інших операторів окрім оператора if-else.

Наприклад, наступний шаблонний рядок є коректним

"${if (a > b) "a>b" else "a<=b"}"

 

4. Приклад використання шаблонних рядків, які містять складні вирази

У прикладі, на основі введеного радіусу (radius) формується три шаблонні рядки, що містять результат обчислення:

  • довжини кола (змінна sLength);
  • площі круга (sArea);
  • об’єму кулі (sVolume).

 

// Шаблонні рядки

const val Pi = 3.1415

fun main(args:Array<String>)
{
  // Демонстрація використання оператора if-else
  // в шаблонному рядку

  // 1. Оголосити змінні
  val radius : Double

  // 2. Ввести радіус
  print("radius = ")
  radius = readLine().toString().toDouble()

  // 3. Сформувати шаблонні рядки
  // Довжина кола
  val sLength : String = "Circumference = ${2*Pi*radius}"

  // Площа круга
  val sArea : String = "Area = ${Pi*radius*radius}"

  // Об'єм кулі
  val sVolume : String = "Volume = ${4.0/3 * Pi*Math.pow(radius,3.0)}"

  // 4. Вивести сформовані шаблонні рядки
  println(sLength)
  println(sArea)
  println(sVolume)
}

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

radius = 3.5
Circumference = 21.9905
Area = 38.483375
Volume = 179.58908333333332

 

5. Приклад створення шаблонного рядка, що містить оператор if-else для обчислення результату розв’язку квадратного рівняння

У прикладі демонструється розв’язок квадратного рівняння. На основі введених значень a, b, c обчислюється дискримінант D. На основі дискримінанту формується шаблонний рядок str, що містить результат обчислення.

fun main(args:Array<String>)
{
  // Демонстрація використання оператора if-else
  // в шаблонному рядку

  // 1. Оголосити змінні
  val a : Double
  val b : Double
  val c : Double
  val x1 : Double
  val x2 : Double
  val D : Double

  // 2. Ввід даних
  print("a = ")
  a = readLine().toString().toDouble()
  print("b = ")
  b = readLine().toString().toDouble()
  print("c = ")
  c = readLine().toString().toDouble()

  // 3. Обчислення дискримінанту
  D = b*b - 4*a*c

  // 4. На основі дискримінанту формується шаблонний рядок
  val str : String
  str = "${
    if (D<0) "The equatin has no roots."
    else
    {
      x1 = (-b - Math.sqrt(D)) / (2*a)
      x2 = (-b + Math.sqrt(D)) / (2*a)
      "x1 = $x1; $x2"
    }
  }"

  // 5. Вивести сформований шаблонний рядок
  println(str)
}

При формуванні шаблонного рядка str, можна використати вкладені конструкції ${} за зразком нижче

...

// 4. На основі дискримінанту формується шаблонний рядок
val str : String
str = "${
  if (D<0) "The equatin has no roots."
  else
  {
    "x1 = ${(-b - Math.sqrt(D)) / (2*a)}; " +
    "${(-b + Math.sqrt(D)) / (2*a)}"
  }
}" 

...

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

a = -8
b = 3
c = 5
x1 = 1.0; -0.625

 


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