Перевантаження функцій. Імена функцій у зворотніх лапках
Зміст
- 1. Поняття про перевантаження функції
- 2. Приклади перевантаження функцій
- 2.1. Функція Min(). Пошук мінімального значення між різною кількістю чисел
- 2.2. Функція ConcatStrings(). Об’єднання різної кількості рядків
- 2.3. Функція Average(). Обчислення середнього арифметичного для різної кількості цілих та дійсних чисел
- 2.4. Функція AscSequence(). Визначає, чи числа утворюють зростаючу послідовність
- 3. Функції у зворотніх лапках. Необхідність застосування
- 4. Приклади функцій, імена яких формуються у зворотніх лапках
- Споріднені теми
Пошук на інших ресурсах:
1. Поняття про перевантаження функції
У мові програмування Kotlin функція може бути перевантажена. Перевантаження функції означає оголошення функції з тим самим іменем декілька разів але з різними параметрами.
У найбільш загальному випадку перевантаження функції виглядає наступним чином:
fun FuncName(list_of_parameters1) : return_type1 { // ... } fun FuncName(list_of_parameters2) : return_type2 { // ... } ... fun FuncName(list_of_parametersN) : return_typeN { // ... }
тут
- FuncName – перевантажене ім’я функції;
- list_of_parameters1, list_of_parameters2, list_of_parametersN – список параметрів відповідного варіанту перевантаженої функції з іменем FuncName. Кожен список параметрів повинен відрізнятись або кількістю або порядком слідування типів параметрів;
- return_type1, return_type2, return_typeN – тип, що повертається відповідним варіантом функції FuncName. Компілятор не вважає тип, що повертається, як засіб перевантаження функції.
Важливо. Щоб перевантажити ім’я функції (функцію) потрібно, щоб сигнатура її параметрів відрізнялась в оголошенні кожного перевантаженого варіанту функції. В противному випадку компілятор буде видавати помилку.
⇑
2. Приклади перевантаження функцій
2.1. Функція Min(). Пошук мінімального значення між різною кількістю чисел
Оголошується перевантажена функція Min(), яка обчислює мінімальне значення між двома, трьома, чотирма, п’ятьма числами типу Double.
// Перевантаження функції з іменем Min // Функція знаходить мінімальне значення між різною кількістю чисел. // Між 2-ма числами fun Min(num1:Double, num2:Double):Double { if (num1<num2) return num1 return num2 } // Між трьома числами fun Min(num1:Double, num2:Double, num3:Double):Double { var min = num1 if (min>num2) min=num2 if (min>num3) min=num3 return min } // Між чотирма числами fun Min(num1:Double, num2:Double, num3:Double, num4:Double):Double { var min = num1; if (min>num2) min = num2 if (min>num3) min = num3 if (min>num4) min = num4 return min } // Між п'ятьма числами fun Min(num1:Double, num2:Double, num3:Double, num4:Double, num5:Double):Double { var min = num1 if (min>num2) min = num2 if (min>num3) min = num3 if (min>num4) min = num4 if (min>num5) min = num5 return min } fun main(args:Array<String>) { // Демонстрація виклику функції Min // 1. Викликається функція Min() з 2-ма параметрами var min = Min(2.5, 3.8) println(min) // 2. Виклик функції Min() з 3 параметрами min = Min(2.6, 3.8, 1.2) println(min) // 3. Виклик функції Min() з 4 параметрами println(Min(1.7, 3.2, 0.8, -3.5)) // 4. Виклик функції Min() з 5 параметрами println(Min(7.2, 8.1, 6.5, 4.4, 2.8)) }
Результат виконання програми
2.5 1.2 -3.5 2.8
⇑
2.2. Функція ConcatStrings(). Об’єднання різної кількості рядків
У прикладі наводиться перевантаження функції ConcatStrings(), яка здійснює конкатенацію (об’єднання) різної кількості рядків. Реалізовано 3 перевантаження функції.
// Перевантаження функції з іменем ConcatStrings // Функція об'єднує різну кількість рядків // 2 рядки fun ConcatStrings(s1:String, s2:String):String { return s1+s2 } // 3 рядки, варіант функції з єдиним виразом fun ConcatStrings(s1:String, s2:String, s3:String) : String = s1+s2+s3 // 4 рядки, варіант функції з єдиним виразом // без явного вказання типу результату, що повертається fun ConcatStrings(s1:String, s2:String, s3:String, s4:String) = s1+s2+s3+s4 fun main(args:Array<String>) { // Демонстрація виклику функції ConcatStrings() // 1. Викликається функція ConcatStrings() з 2-ма параметрами var resStr:String resStr=ConcatStrings("Hello", " world!") println(resStr) // 2. Виклик функції ConcatStrings() з 3 параметрами resStr = ConcatStrings("bestprog",".","net") println(resStr) // 3. Виклик функції ConcatStrings() з 4 параметрами println(ConcatStrings("Red-","Green-","Blue-","Yellow")) }
Результат виконання програми
Hello world! bestprog.net Red-Green-Blue-Yellow
⇑
2.3. Функція Average(). Обчислення середнього арифметичного для різної кількості цілих та дійсних чисел
У прикладі продемонстровано перевантаження функції Average(), в якій вхідними параметрами є різна кількість різнотипних чисел типів Int, Double, Float, Long.
// Функція Average() // Обчислення середнього арифметичного для різної кількості чисел // 1. Варіант, де вхідними параметрами є типи Int, Double fun Average(a:Int, b:Double) = (a+b)/2.0 // 2. Варіант для випадку Double, Int fun Average(a:Double,b:Int):Double { return (a+b)/2.0 } // 3. Варіант для випадку Long, Float fun Average(a:Long, b:Float):Double = (a+b)/2.0 // 4. Варіант для випадку Int, Float, Double fun Average(a:Int, b:Float, c:Double) = (a+b+c)/3 fun main(args:Array<String>) { // Демонстрація використання функції Average // 1. Типи Int, Double val avg1 = Average(5, 6.8) println("avg1 = " + avg1) // 2. Типи Double, Int val avg2 = Average(7.2, 8) println("avg2 = " + avg2) // 3. Типи Long, Float val avg3 = Average(70L, 3.8f) println("avg3 = " + avg3) // 4. Типи Int, Float, Double val avg4 = Average(10, 20.0f, 15.0) println("avg4 = " + avg4) }
Результат виконання програми
avg1 = 5.9 avg2 = 7.6 avg3 = 36.900001525878906 avg4 = 15.0
⇑
2.4. Функція AscSequence(). Визначає, чи числа утворюють зростаючу послідовність
Приклад демонструє оголошення та використання 4-х перевантажень функції, яка визначає, чи декілька чисел утворюють зростаючу послідовність.
// Функція AscSequence() // Визначити, чи числа утворюють зростаючу послідовність // 1. Варіант, де вхідними параметрами є типи Int, Int, Int fun AscSequence(a:Int, b:Int, c:Int) : Boolean { return (a<b)and(b<c) } // 2. Варіант для випадку Double, Double, Double fun AscSequence(a:Double,b:Double, c:Double):Boolean { return (a<b)and(b<c) } // 3. Варіант для випадку Int, Int, Int, Int fun AscSequence(a:Int,b:Int,c:Int,d:Int):Boolean = (a<b)and(b<c)and(c<d) // 4. Варіант для випадку Float, Int, Double, Double fun AscSequence(a:Float,b:Int,c:Double,d:Double) = (a<b)and(b<c)and(c<d) fun main(args:Array<String>) { // Демонстрація використання функції AscSequence() // 1. Випадок AscSequence(Int, Int, Int) println("5<6<8 => " + AscSequence(5, 6, 8)) // 2. Випадок AscSequence(Double, Double, Double) val res = AscSequence(2.8, 3.5, 1.7) println("2.8<3.5<1.7 => " + res) // 3. Випадок AscSequence(Int, Int, Int, Int) println("6<8<9<7 = " + AscSequence(6,8,9,7)) // 4. Випадок AscSequence(Float, Int, Double, Double) println("7.5f<2<3.4<5.0 => " + AscSequence(7.5f,2,3.5,5.0)) }
Результат виконання програми
5<6<8 => true 2.8<3.5<1.7 => false 6<8<9<7 = false 7.5f<2<3.4<5.0 => false
⇑
3. Функції у зворотніх лапках. Необхідність застосування
У мові Kotlin існує засіб задавання імені функції в зворотніх лапках – ` `. У цьому випадку, ім’я функції може містити символи пробіл чи інші нестандартні символи.
У найбільш загальному застосуванні оголошення такої функції має вигляд:
fun `set_of_characters`(list_of_parameters):return_type { // ... }
тут
- set_of_characters – набір символів, що визначають ім’я функції. Тут допускається задавати символи “пробіл” чи інші нестандартні символи;
- list_of_parameters – список параметрів функції;
- return_type – тип, що повертається функцією.
Виклик вищенаведеного оголошення функції може бути приблизно таким
`set_of_characters`(...)
тут … означають перелік аргументів, що передаються у функцію.
Задавання імен функцій у зворотніх лапках “ необхідно з наступних причин:
- для підтримки сумісності з Java. Це можуть бути випадки, коли викликаються методи Java з коду у файлі на мові Kotlin. Прикладом цього застосування може бути використання різних зарезервованих ключових слів мови Java, які не можна застосовувати в якості імен для функцій у мові Kotlin (наприклад ключове слово is);
- задавання більшої наочності використання функцій з допомогою цілих речень, взятих у зворотніх лапках.
⇑
4. Приклади функцій, імена яких формуються у зворотніх лапках
Нижче наводяться приклади функцій, імена яких взяті у зворотні лапки. Імена деяких функцій більш красномовно пояснюють їхнє призначення.
// Функції, взяті в зворотні лапки `` // Функція, яка обчислює суму трьох параметрів: a+b+c fun `a + b + c`(a:Int, b:Int, c:Int) = a+b+c // Функція, яка повертає реверсований рядок fun `abc = cba`(s:String) : String { var s2 : String = "" for (c : Char in s) s2 = c + s2 return s2 } // Функція повертає добуток двох чисел fun `a*b`(a:Double, b:Double) = a*b fun main(args:Array<String>) { // Виклик функції `a + b + c`() val res1 = `a + b + c`(6, 5, 9) println("res1 = " + res1) // Виклик функції `abc = cba`() val res2 = `abc = cba`("abcdef") println("res2 = " + res2) // Виклик функції множення двох чисел типу Double println(`a*b`(9.5, 3.2)) }
Результат виконання програми
res1 = 20 res2 = fedcba 30.400000000000002
⇑
Споріднені теми
- Функції. Ключове слово fun. Рефакторинг функції Оператор return
- Функції. Область видимості функції. Локальна область видимості. Аргументи за замовчуванням
- Функції з єдиним виразом. Тип Unit. Функції, які повертають тип Unit. Приклади
- Іменовані аргументи функцій. Тип Nothing. Перевантаження функцій
⇑