Обычно вы можете и должны опираться на компилятор, чтобы сделать вывод обнуляемости.Это не всегда возможно, и в надуманном примере, если внутренний цикл выполняется, но один раз d
не равен нулю.Это гарантированно произойдет, если dataArray
имеет хотя бы одного члена.
Используя эти знания, вы можете слегка изменить рефакторинг кода, используя , требующий для проверки аргументов (хотя бы для одного членамассив) и checkNotNull для подтверждения состояния dataArray
в качестве пост-условия.
fun testGetLowest (dataArray: List<Data>) : Data {
require(dataArray.size > 0, { "Expected dataArray to have size of at least 1: $dataArray")
var d: Data? = null
for (i in dataArray.indecs) {
if (d == null) {// first run
d = dataArray[i]
} else if {
d.level < dataArray[i].level
d = dataArray[i]
}
}
return checkNotNull(d, { "Expected d to be non-null through dataArray having at least one element and d being assigned in first iteration of loop" })
}
Помните, что вы можете вернуть результат checkNotNull
(и аналогичные операторы):
val checkedD = checkNotNull(d)
См. Предварительные условия для Google Guava для получения информации о подобном.