Kotlin: пометить аргумент функции после его очистки в новую переменную как «больше не использовать это»
Для начала: этот вопрос для меня уже как бы решен. Но дискуссия может быть интересной.
Мне нравится код, поэтому давайте посмотрим на эту функцию:
fun foo(path: Path) {
val absPath = path.normalize().absolute() // sanitizing
doSomethingWith(path) // this is unsafe use because path is not sanitized
doSomethingWith(absPath) // this is safe because we are using the sanitized absPath value
}
Параметры функции Kotlin всегдаval
, поэтому нам необходимо создать новую переменную, если мы хотим получить ее значение. Мы можем выбрать между использованием нового имени или использованием старого имени и аннотированием его с помощью@Suppress("NAME_SHADOWING")
чтобы не получитьName shadowed: ...
предупреждение.
Я ищу что-то вроде
fun foo(path: Path) {
val absPath = path.normalize().absolute()
@DoNotUseAnymore path
doSomethingWith(path) // should give a warning/error
doSomethingWith(absPath) // is fine
}
Вы знаете что-то подобное? Или вы думаете, что я ошибаюсь на неправильном конце уравнения и должен просто научиться не делать плохих вещей, используя@Suppress
-аннотация? Поскольку мне нравится кодировать, я имею в виду следующее:
fun foo(path: Path) {
@Suppress("NAME_SHADOWING")
val path = path.normalize().absolute() // sanitizing
doSomethingWith(path) // there is only one sanitized variable so we are safe
}
В некотором смысле этот метод является самым чистым... Я, вероятно, придерживаюсь этого... Должен ли я опубликовать этот вопрос сейчас? Ну, возможно :)