Kotlin:将函数参数清理成新变量后将其标记为“不再使用它”

Kotlin: mark function argument after sanitizing it into a new variable as "do not use this anymore"

提问人:Stefan 提问时间:10/27/2022 最后编辑:Stefan 更新时间:10/27/2022 访问量:60

问:

首先:这个问题对我来说已经解决了。但讨论可能很有趣。

我喜欢代码,所以让我们看看这个函数:

    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
}

你知道这样的事情吗?或者你认为我在等式的错误一端摆弄,应该学会在使用 -annotation 时不想做坏事?由于我喜欢编码,这就是我的意思:@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
    }

在某种程度上,这种方法是最干净的......我可能会坚持这一点......我现在应该发布这个问题吗?井。。。也许:)

Kotlin 注解 lint function-parameter val

评论

0赞 matt freake 10/27/2022
您是否担心将来有人编辑代码?你能把它重命名为类似的东西来明确它的目的吗?有时对我来说更简单似乎更好。pathunsanitizedPath
0赞 gidds 10/27/2022
@mattfreake 重命名参数的问题在于它对调用者可见,这并不总是有意义的。但是,我认为更好的解决方案需要更改语言。
0赞 Stefan 10/28/2022
@gidds没错!:)
0赞 Stefan 10/28/2022
我发现没有任何注释的最干净的解决方案是将实际代码重构为私有方法,并让公共方法只做清理工作......😬

答: 暂无答案