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

2.5 字符串模板

在程序中,我们经常创建带有表达式内嵌值的字符串。使用+运算符将值连接来创建字符串会使代码冗长且难以维护。字符串模板通过提供优雅的解决方案解决了这个问题。

在双引号字符串中,$符号可以作为任何变量的前缀来将其转换为表达式。如果表达式比简单变量更复杂,则使用${}包装表达式。

没有后跟变量名或表达式的$符号被视为字面量。你还可以使用反斜杠转义$符号,以便将其用作字面量。

下面是一个字符串模板的示例。此外,它还包含一个纯字符串,其中嵌入了用作字面量的$符号。

在分配给output的字符串模板中,第一个$符号用作表达式的分隔符,该表达式后面跟着变量名。第二个$符号是一个字面量,因为后面跟着另外一个$,它不是变量或表达式。第三个$符号是包装在{}中的表达式的前缀。代码中的其他$符号用作字面量。让我们看看代码的输出:

早期对选择val而不是var的提醒也适用于此。让我们使用前面看到的带有var的代码并稍加修改以使用字符串模板。

同样,不要运行代码,而是要仔细观察并搞清楚这段代码的输出。它是否与下面的输出一致?

函数doubleIt()中的变量factor绑定到其直接作用域(即词法作用域)之外的变量。使用函数调用时的factor值。字符串模板是在创建变量message时计算的,而不是在输出其值时计算的。这些差异增加了认知负荷,使代码难以维护,也容易出错。没有必要使用这样的代码来折磨其他程序员。这是不人道的。同样,尽可能选择val而不是var。

接下来,让我们看看如何使用原始字符串来消除一些混乱,并创建多行字符串。