Kotlin. Функції з єдиним виразом. Тип Unit

Функції з єдиним виразом. Тип Unit. Функції, які повертають тип Unit. Приклади


Зміст


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

1. Поняття про функції з єдиним виразом

Тіло функції може містити довільну кількість операторів. Однак, бувають випадки, коли функція містить один вираз (рядок). Якщо функція містить один вираз, то у мові Kotlin її можна оформити особливим чином. Загальна форма оголошення функції з єдиним виразом наступна

fun FuncName(parameters) = expression

тут

  • FuncName – ім’я функції;
  • parameters – список параметрів функції;
  • expression – вираз, що визначає тіло функції.

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

 

2. Приклади функцій з єдиним виразом

Приклад 1. Функція, яка обчислює модуль комплексного числа. Функція отримує параметрами дійсну (re) та уявну (im) частини комплексного числа.

// Функція, що обчислює модуль комплексного числа
fun AbsComplex(re:Double, im:Double) =
  Math.sqrt(re*re+im*im)

fun main(args:Array<String>)
{
  // Демонстрація використання функції AbsComplex()
  var module : Double
  var re : Double
  var im : Double

  print("re = ")
  re = readLine().toString().toDouble()
  print("im = ")
  im = readLine().toString().toDouble()

  module = AbsComplex(re,im)
  print("module = " + module)
}

Результат роботи програми

re = 3
im = 4
module = 5.0

Приклад 2. Функція, яка обчислює об’єм кулі на основі заданого радіусу.

// Функція, що обчислює об'єм кулі на основі заданого радіусу
fun Volume(radius:Double) =
  4.0/3 * Math.PI * Math.pow(radius, 3.0)

fun main(args:Array<String>)
{
  // Демонстрація використання функції Volume()
  var volume : Double
  var radius : Double

  print("radius = ")
  radius = readLine().toString().toDouble()

  volume = Volume(radius)
  println("volume = " + volume)
}

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

radius = 2.5
volume = 65.44984694978736

 

3. Приклад використання функції з єдиним виразом у поєднанні з оператором when. Обчислити кількість днів у місяці

Умова задачі. Розробити функцію, яка за номером місяця (1..12) та номером року визначає кількість днів у цьому місяці.

Розв’язок.

// Функція, що визначає кількість днів у місяці
fun GetNDays(month : Int, year : Int) =
  when (month) {
    4, 6, 9, 11 -> 30
    1, 3, 5, 7, 8, 10, 12 -> 31
    2 -> {
      if (year % 400 == 0) 29
      else
      if (year % 100 == 0) 28
      else
      if (year % 4 == 0) 29
      else
        28
    }
    else -> -1
  }

fun main(args:Array<String>)
{
  // Демонстрація використання функції GetNDays()
  // 1. Ввід даних
  print("year = ")
  val year = readLine().toString().toInt()
  print("month = ")
  val month = readLine().toString().toInt()

  // 2. Виклик функції GetNDays()
  val nDays = GetNDays(month, year)

  // 3. Вивід результату
  if (nDays==-1)
    println("Incorrect input.")
  else
    println("days = " + nDays)
}

Тестовий приклад

year = 2008
month = 2
days = 29

 

4. Приклад використання функції з єдиним виразом у поєднанні з оператором if

Умова задачі.

Задано додатнє число від 0 до 999999. Розробити функцію з єдиним виразом, яка обчислює кількість цифр у числі.

Розв’язок.

// Функція, що повертає кількість цифр у числі
fun GetDigits(number : Int) =
  if (number < 0) -1
  else
  if (number<10) 1
  else
  if (number<100) 2
  else
  if (number<1000) 3
  else
  if (number<10000) 4
  else
  if (number<100000) 5
  else -1

fun main(args:Array<String>)
{
  // Демонстрація використання функції GetDigits()

  // 1. Ввід числа
  print("number = ")
  val number = readLine().toString().toInt()

  // 2. Виклик функції GetDigits()
  val nDigits = GetDigits(number)

  // 3. Вивід результату
  if (nDigits==-1)
    println("Incorrect input")
  else
    println("nDigits = " + nDigits)
}

Тестовий приклад

number = 5564
nDigits = 4

 

5. Тип Unit. Функції, які повертають тип Unit

Якщо функція не повертає значення, то в Kotlin ця функція визначається такою, що повертає тип Unit. Якщо в тілі функції не використовується ключове слово return, то вважається що функція повертає значення типу Unit.

У мові Kotlin тип Unit вказує функцію, яка нічого не повертає, але може застосовуватись до узагальнених функцій. В узагальнених функціях повернення хоча б якогось типу є обов’язковим.

У найбільш загальному випадку, функція що повертає тип Unit має вигляд

fun FuncName(parameters) : Unit {
  // ...
}

тут

  • FuncName – ім’я функції;
  • parameters – параметри функції.

 

6. Приклади функцій, які повертають тип Unit
6.1. Вивести представлення десяткового числа у двійковій системі числення

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

Розв’язок.

// Функція, що повертає тип Unit.
// Функція виводить двійковий еквівалент цілого числа.
fun Print_10_to_2(number : Int) : Unit {
  var t = number
  var s = ""

  while (t>0) {
    s = (t%2).toString() + s
    t = t/2
  }

  println(number.toString() + " => " + s)
}

fun main(args:Array<String>)
{
  // Демонстрація використання функції Print_10_to_2()

  // 1. Ввід числа
  print("number = ")
  val number = readLine().toString().toInt()

  // 2. Виклик функції
  Print_10_to_2(number)
}

Тестовий приклад

number = 78
78 => 1001110

 

6.2. Функція, що виводить число у зворотному порядку (1234 => 4321)

Задача. Розробити функцію, яка виводить на екран ціле число, представлене у зворотному порядку.

Розв’язок.

// Функція, що повертає тип Unit.
// Функція виводить число у зворотному порядку
fun Print_Reverse_Number(number : Int) : Unit {
  var t = number
  var s = ""

  while (t>0) {
    s += (t%10).toString()
    t = t/10
  }

  println(number.toString() + " => " + s)
}

fun main(args:Array<String>)
{
  // Демонстрація використання функції Print_Reverse_Number()

  // 1. Ввід числа
  print("number = ")
  val number = readLine().toString().toInt()

  // 2. Виклик функції
  Print_Reverse_Number(number)
}

Тестовий приклад

number = 1234
1234 => 4321

 


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