
上QQ阅读APP看书,第一时间看更新
2.6.2 多行字符串
臭名昭著的+运算符通常用于创建多行字符串,这会导致难以维护的糟糕代码。Kotlin使用一个多行字符串(包含换行符的原始字符串)删除了这个仪式。多行字符串也可以用作字符串模板。
让我们创建一个跨多行运行的字符串,但不使用+运算符。


多行字符串以三个双引号开始,包含用于计算变量name的字符串模板表达式,并以三个双引号结束。这段代码的输出是计算嵌入表达式的多行字符串。

这工作得很好,但是——总是有一个但是——如果多行字符串在一个函数中,或许在一个if中,会怎么样?嵌套会把事情搞砸吗?让我们来看看。

如果传递的参数等于Eve,createMemoFor()函数返回一个多行字符串。让我们看看输出结果是什么:

结果字符串保留了缩进——呀。谢天谢地,摆脱它并不难。让我们重做这个例子:

我们做了两个改变。首先,从第二行开始,在多行字符串的每一行上放置一个|。其次,使用trimMargin()方法,这是一个扩展函数(我们将在第12章中讨论),从字符串中去掉边界。如果没有参数,trimMargin()方法将删除空格,直到开头的|字符为止。不在开头位置的|字符没有任何影响。下面显示的是修复完后的输出。

如果你不想使用|作为开头的分隔符,因为文本可能在任意位置包含该字符,包括新行的第一个字符,那么你可以选择其他字符——例如,让我们继续并选择~:

在多行字符串中,我们使用~作为分隔符,而不是默认的|,并且在对trimMargin()的调用中将这个特别选择的分隔符作为参数传递。此版本的输出与使用默认分隔符的输出相同。
到目前为止,在本章中,我们已经看到了与Java等语言相比,Kotlin在表达式和语句方面的改进。但是Kotlin更喜欢表达式而不是语句。我们接下来将讨论这个问题。