Комментарии 13
НЛО прилетело и опубликовало эту надпись здесь
В данном случае как раз для author. Но вообще сами по себе именованные аргументы весьма полезны. Так, например, если есть набор параметров, и у всех есть значения по умолчанию, то можно указывать значения только для нужных. Пример:
fun someAction(repeat: Int = 1, timeout: Long = 1000, log: Boolean = false, action: () -> Unit) {
// -----
}
//use 1
someAction(repeat = 3) {
println("Hi!")
}
//use 2
someAction(timeout = 5000, log = true) {
println("Message, after timeout")
}
0
Все хорошо, но именно так в java тоже уже не пишут. Есть ломбок, есть другие способы.
Кроме того, fluent API (в виде builder скажем) далеко не всегда такой простой и очевидный, как у вас в примере. И не заменяется просто именованными параметрами.
0
Kotlin позволяет убрать ненужные оборачивания в класс при помощи функций верхнего уровня.
А такие функции можно переиспользовать
0
А такие функции можно переиспользовать
Если под переиспользовать подразумевается переопределить, то ответ — нет.
Функция верхнего уровня в Kotlin:
fun test(): Unit {} // in file Test.kt
В Java будет выглядеть в виде следующего:
public final class TestKt {
public static final void test() {
}
}
А в Java статичные функции переопределять нельзя, как и в Kotlin.
0
извиняюсь, отправил раньше чем дописал, а отредактировать не могу, имел ввиду переиспользовать в других классах, где они явно не объявлены, например в классе A определили
могу ли я в классе B вызвать ее у какой либо строки?
fun String.countAmountOfX(): Int {
return length - replace("x", "").length
}
могу ли я в классе B вызвать ее у какой либо строки?
0
Если такая функция будет в классе A то это уже обычная функция класса (точнее в том виде как у вас это еще и функция расширение). В таком виде ее нельзя будет напрямую использовать в классе B.
Но если вы такую функцию объявите не в классе (или скажем в объекте или объекте компаньоне) то такую функцию можно будет вызвать:
Пример 1 с функцией верхнего уровня:
файл test/A.kt:
файл test/B.kt:
Пример 2 с объектом компаньоном:
файл test/A.kt:
файл test/B.kt:
Пример 3 с функцией в объекте:
файл test/A.kt:
файл test/B.kt:
Надеюсь что ответил на ваш вопрос.
Но если вы такую функцию объявите не в классе (или скажем в объекте или объекте компаньоне) то такую функцию можно будет вызвать:
Пример 1 с функцией верхнего уровня:
файл test/A.kt:
package test
fun String.countAmountOfX(): Int {
return length - replace("x", "").length
}
файл test/B.kt:
package test
class B {
fun testCall(): Unit {
"asdf".countAmountOfX()
}
}
Пример 2 с объектом компаньоном:
файл test/A.kt:
package test
class A {
companion object {
fun String.countAmountOfX(): Int {
return length - replace("x", "").length
}
}
}
файл test/B.kt:
package test
import test.A.Companion.countAmountOfX
class B {
fun testCall(): Unit {
"asdf".countAmountOfX()
}
}
Пример 3 с функцией в объекте:
файл test/A.kt:
package test
object A {
fun String.countAmountOfX(): Int {
return length - replace("x", "").length
}
}
файл test/B.kt:
package test
import test.A.countAmountOfX
class B {
fun testCall(): Unit {
"asdf".countAmountOfX()
}
}
Надеюсь что ответил на ваш вопрос.
0
deleted
0
Категорически поддерживаю:
Избегайте проверок типов
Вот только почему после этого идёт as?, ведь это и есть проверка типа.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Идиоматичный Kotlin, набор хороших практик