連載
» 2018年02月01日 05時00分 公開

Javaプログラマーが使うと揶揄されなくなる「Kotlin」の基本構文 Android Studioで始めるKotlin入門(2)(3/3 ページ)

[土井毅(著)/山田祥寛(監修),WINGSプロジェクト]
前のページへ 1|2|3       

文字列周りの便利機能

 最後に、「文字列テンプレート」「複数行文字列リテラル」、そして「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]}") 
リスト14 文字列テンプレートのサンプル

 C#プログラマーであれば、C# 6.0で導入された文字列補間とほぼ同じ機能と考えれば理解しやすいですね。アプリ開発などで多用するであろう、Kotlinの大変有用な機能です。

複数行文字列リテラル

 文字列リテラルが複数行にわたる場合、Javaを含む幾つかの言語では、リスト15のように、改行文字を含めて文字列を連結するようなコードを書く必要があります。

String sql = "SELECT * \n" + 
  "FROM MyTable \n" +
  "WHERE cond > 1\n";
リスト15 Javaでの複数行文字列リテラル

 こうしたコードは書くのが面倒なため、幾つかの言語では「ヒアドキュメント」と呼ばれる「特定の文字列を使って文字列リテラルを開始し、次に同じ文字列が出てくるまで、複数行にわたる文字列リテラルを作る」機能が搭載されています。Kotlinではリスト16のように「"""」(ダブルクオート3個)で文字列リテラルを開始し、次に「"""」が出てくるところまでまとめて、複数行文字列リテラルとして扱えます。

val sql = """
SELECT *
FROM MyTable
WHERE cond > 1
"""
println(sql)
リスト16 文字列テンプレートのサンプル
SELECT *
FROM MyTable
WHERE cond > 1
実行結果

文字列の各行にある最初の空白文字列を「|」まで削除する「trimMargin」メソッド

 なお、コーディングルールに従ってインデントする場合、複数行リテラルの各行の先頭に無駄なスペースが付くのが気になるかもしれません。Kotlinの文字列クラスにはデフォルトで、「trimMargin」という、文字列の各行にある最初の空白文字列を「|」まで削除するメソッドがあります。これは言葉で説明するよりもリスト17、18を見た方が早いでしょう。

val sql2 = """
    |SELECT *
    |FROM MyTable
    |WHERE cond > 1
    """.trimMargin()
リスト17 trimMarginメソッドを使ったサンプル1(文字列リテラルもインデントする例)
SELECT *
FROM MyTable
WHERE cond > 1
実行結果(「|」までスペースが削除される)
val sql3 = """
    #SELECT *
    #  FROM MyTable
    #    WHERE cond > 1
    """.trimMargin("#")
リスト18 trimMarginメソッドを使ったサンプル2(「|」の代わりに「#」を使った例)
SELECT *
  FROM MyTable
    WHERE cond > 1
実行結果(リスト18の3、4行目にある「#」の後ろのスペースは削除されていない)

 このように、複数行文字列リテラルはコードの書きやすさ、見やすさに確実に貢献してくれる、小粒ながら有用な機能です。ぜひ活用しましょう。

次回は、nullとの戦いに終止符を打つ

 今回はデータ型や変数定義、制御構文などの基本的な機能について解説しました。次回はKotlinの「null安全」の仕組みについて解説します。多くのプログラマーが長年にわたって苦しみ続けてきたnullとの戦いに終止符を打つ(!?)とても魅力的な機能です。ご期待ください。

今回のサンプルコード

 今回のサンプルコードはこちらからダウンロードできます

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。