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

4.3.3 when和变量的作用域

在前面的示例中,用于匹配的变量来自when表达式或语句的外部。但这不是必需的。用于匹配的变量可能仅限于when的作用域内。在可能的情况下,使用这种限制来设计代码是一件好事,因为它可以防止变量的作用域溢出,并使代码更易于维护。

让我们通过一个例子来看看如何限制变量的作用域。这里有一个函数,它使用when来检查系统上核的数量。

systemInfo()函数根据核的数量返回响应,但是代码有点儿混乱。该函数必须首先调用Runtime的availableProcessors()方法来确定核的数量。然后将该变量传递给when进行求值。我们可以通过重写代码来减少混乱,并将变量numberOfCores的作用域限制在when块内:

把val放在when的参数中会给我们带来一些好处。首先,我们可以直接返回when的结果,删除外部块{}和return,这样混乱更少,代码行数也更少。其次,如果我们想得到when的结果,并做进一步的处理,变量numberOfCores将无法在所需的范围之外使用。限制变量的作用域是一个很好的设计。