最後に、「文字列テンプレート」「複数行文字列リテラル」、そして「trimMargin」メソッドなど文字列周りの便利機能を紹介します。いずれも小粒ですが使うと便利さが伝わってくる機能です。
アプリケーションのメッセージなどで、文字列の中に変数の値を埋め込むコードを書く場面はよくあることでしょう。JavaであればString.formatメソッドなどを使ったり、あるいはチマチマと+演算子を使って文字列をひたすら結合したりしていく必要があります。
Kotlinには文字列テンプレートと呼ばれる機能があり、リスト14のように文字列リテラルに変数を直接埋め込めます。「$変数名」で変数の値をそのまま埋め込めますが、変数名をスペースなどで明示的に区切れない場合は「${変数名}」のように{}を使って変数名を指定します。また、{}の中でプロパティや配列の値などを参照して文字列に埋め込むこともできます。
val ar1: Array<String> = arrayOf("abc", "def", "ghi") val name = "田中" val age = 32; println("Name: $name, Age: $age") //「$変数名」で文字列に埋め込める //どこまでが変数名か分からないケースは{}で囲む println("${name}さんの年齢は${age}歳です") //変数だけでなく、プロパティや配列の値も表示可能。その場合は必ず{}で囲む println("配列の長さ: ${ar1.size}, 配列の値: ${ar1[2]}")
C#プログラマーであれば、C# 6.0で導入された文字列補間とほぼ同じ機能と考えれば理解しやすいですね。アプリ開発などで多用するであろう、Kotlinの大変有用な機能です。
文字列リテラルが複数行にわたる場合、Javaを含む幾つかの言語では、リスト15のように、改行文字を含めて文字列を連結するようなコードを書く必要があります。
String sql = "SELECT * \n" + "FROM MyTable \n" + "WHERE cond > 1\n";
こうしたコードは書くのが面倒なため、幾つかの言語では「ヒアドキュメント」と呼ばれる「特定の文字列を使って文字列リテラルを開始し、次に同じ文字列が出てくるまで、複数行にわたる文字列リテラルを作る」機能が搭載されています。Kotlinではリスト16のように「"""」(ダブルクオート3個)で文字列リテラルを開始し、次に「"""」が出てくるところまでまとめて、複数行文字列リテラルとして扱えます。
val sql = """ SELECT * FROM MyTable WHERE cond > 1 """ println(sql)
SELECT * FROM MyTable WHERE cond > 1
なお、コーディングルールに従ってインデントする場合、複数行リテラルの各行の先頭に無駄なスペースが付くのが気になるかもしれません。Kotlinの文字列クラスにはデフォルトで、「trimMargin」という、文字列の各行にある最初の空白文字列を「|」まで削除するメソッドがあります。これは言葉で説明するよりもリスト17、18を見た方が早いでしょう。
val sql2 = """ |SELECT * |FROM MyTable |WHERE cond > 1 """.trimMargin()
SELECT * FROM MyTable WHERE cond > 1
val sql3 = """ #SELECT * # FROM MyTable # WHERE cond > 1 """.trimMargin("#")
SELECT * FROM MyTable WHERE cond > 1
このように、複数行文字列リテラルはコードの書きやすさ、見やすさに確実に貢献してくれる、小粒ながら有用な機能です。ぜひ活用しましょう。
今回はデータ型や変数定義、制御構文などの基本的な機能について解説しました。次回はKotlinの「null安全」の仕組みについて解説します。多くのプログラマーが長年にわたって苦しみ続けてきたnullとの戦いに終止符を打つ(!?)とても魅力的な機能です。ご期待ください。
Copyright © ITmedia, Inc. All Rights Reserved.