Функции с единственным выражением. Тип Unit. Функции, возвращающие тип Unit. Примеры
Содержание
- 1. Общие понятия об использовании функций с единственным выражением
- 2. Примеры функций с единственным выражением
- 3. Пример использования функции с единственным выражением в сочетании с оператором when. Вычислить количество дней в месяце
- 4. Пример использования функции с единственным выражением в сочетании с оператором if
- 5. Тип Unit. Функции, возвращающие тип Unit
- 6. Примеры функций, возвращающих тип 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
⇑
Связанные темы
- Функции. Ключевое слово fun. Рефакторинг функции. Оператор return
- Область видимости функции. Локальная область видимости. Аргументы по умолчанию
⇑