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

 


Связанные темы