2012年2月28日火曜日

Dartで文字列リテラルを使う

このエントリーをはてなブックマークに追加
Dartで文字列リテラルは次のように使います。
String hoge1 = 'hoge';
String hoge2 = "hoge";
シングルクォートとダブルクォートはどちらも同じです。シングルクォートで囲まれた文字列にはダブルクォートを含むことができます。逆も可能です。

シングルクォート3つ、あるいはダブルクォート3つを続けると、複数行の文字列も表現できます。
String hoge3 = '''abc
def''';
String hoge4 = """ghi
jkl""";
これらは改行が含まれる文字列として扱われます。サンプルコード
main() {
  String block = '''
<div>
  <span class="xyz"/>
</div>
''';
  print('<body>' + block + '</body>');
}
実行結果は次のようになります。
<body>
<div>
  <span class="xyz"/>
</div>
</body>
文字列の中にはエスケープ シーケンスが使えます。\r(キャリッジリターン)、\n(改行)などのよく使われるものの他に、\uに16進数値4桁あるいは \u{16進数値} でユニコード文字を表せます。
String hoge5 = '\x0A'; // 改行
String hoge6 = '\u3042'; // 'あ'
文字列の先頭にアットマーク @ をつけると、エスケープ シーケンスとなる文字をエスケープせずに、そのままの文字として扱えます。サンプルコード
String hoge7 = @'\x0A'; // '\x0A'
String hoge8 = @'''a\n
b'''; // 'a\nb'('\n'のうしろ改行が入る)
また、文字列リテラル中にドルマーク $ で始まる表現を使って、変数名などの式とその値を使った文字列補間(String interpolation)が行えます。
int a = 5;
print('a=$a'); // a=5
式の区切りが明らかでない場合は、変数名をかっこ {} で囲います。
int b = 5;
print('b=${b}th'); // b=5th
文字列補間はネストできますので、こんな書き方もできます。サンプルコード
main() {
  for (int i = 1; i <= 5; i++) {
    print('${i == 1 ? "${i}st" : i == 2 ? "${i}nd" : i == 3 ? "${i}rd" : "${i}th"}');
  }
}
実行結果は次のようになります。
1st
2nd
3rd
4th
5th

0 件のコメント:

コメントを投稿