Kotlin编程实战:创建优雅、富于表现力和高性能的JVM与Android应用程序
上QQ阅读APP看书,第一时间看更新

2.2 合理的警告

即使一段代码在语法上是有效的,也可能隐藏着一些潜在的问题。在编译期间获得早期警告可以帮助我们主动修复这些可能的问题。Kotlin编译器会查找代码中的一些潜在问题。

例如,如果函数或方法中接收到的参数未使用,则编译器将发出警告。在下面的脚本中,传递给compute()的参数没有使用。

当你运行这个脚本时,除了显示结果外,Kotlin还会报告对未使用参数的警告:

将警告视为错误是一种很好的软件开发实践,这是Practices of an Agile Developer [SH06]中强调的敏捷实践。通过使用-Werror选项,Kotlin可以很容易地做到这一点。要使用此选项,请在编译代码或作为脚本运行时将其放在命令行上,如下所示:

此选项将使构建或执行失败。不像之前没有该选项的运行,在运行脚本时没有输出,相反,会报告一个错误:

Kotlin编译器给出的警告是合理的。例如,程序忽略命令行参数并不少见。强迫我们使用给main()的参数被认为是非常苛刻的,因此Kotlin并不会抱怨main()的参数未被使用,正如我们在下一个示例中所看到的那样。但是,如果脚本(一个.kts文件而不是.kt文件)的main()中有一个未使用的参数,那么Kotlin将向你发出一个警告——它是根据上下文决定的。

当你使用kotlinc-jvm编译代码,然后使用java或kotlin运行它时,你将得到如下输出。这个警告来自kotlinc,输出来自所生成的jar文件的执行:

从Kotlin 1.3开始,如果不需要main()的参数,可以省略它们。

我们看到了Kotlin是如何对潜在的错误进行预先提示的。根据这些原则,语言要求你在不变性上有决定性权。接下来我们将探讨这个选择。