Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Stand!!.channell!!.stream!!.act()
Компилятор не будет проверять данное выражение. Как не будет проверять и в случае компиляции совместного проекта c Java. Спрашивается, в чем тогда преимущество?!
В том, что этот код дурно пахнет и должен быть завёрнут на ревью.!!! для исключительных ситуаций, когда разрулить по-другому нельзя или слишком сложно.
private fun checkConnections(silently: Boolean = false): Boolean {
var isNotFailed = true
mqToClearTable.items.filter { isMqValid(it) }.forEach { mq -> if (mq.queue.isNotEmpty()) {
isNotFailed = isNotFailed && checkMqConnection(MQContainer(mq.host, mq.port.toInt(), mq.channel, mq.queue, mq.manager), silently)
}
}
return isNotFailed
}
легко заменяется на
private fun checkConnections(silently: Boolean = false) = mqToClearTable.items
.filter { isMqValid(it) }
.filter { it.queue.isNotEmpty() }
.fold(true) { isNotFailed, mq ->
isNotFailed && checkMqConnection(MQContainer(mq.host, mq.port.toInt(), mq.channel, mq.queue, mq.manager), silently)
}
Кто это пропустил на ревью:
testInfo.also {
it.endDateProperty.onChange { it?.let { update(Tests.endDate, it) } }
}
Реализация наследования организована лучше именно в последней, где в отличии от Kotlin все классы изначально открыты, и при наследовании от них, мы можем спокойно их переопределять.
Best practice считается делать классы, не предназначенные для наследования, final. Т.о. создатель, например, библиотеки, должен явно подумать как будут использовать его классы и что будет при наследовании от них.
Примитивных типов данных, таких как int, boolean и т.д., в языке не наблюдается
А зачем вам про них думать? В тех местах, где это возможно, используются именно они (в реализации на JVM).
Из Балтийского моря в Индийский океан