2014年6月18日水曜日

文字列について

本当はフレームワーク「AngularDart」の導入について書きたかったのですが、まとまった時間が取れなかったので、文字列について書きます。


いまさら文字列と言われてしまいそうですが、Dart の文字列を紹介している Web ページの多くは公式リリース前のものが多く、多少情報が古いものもありますので、あえてこのタイミングで記事にしてみました。


Dart で文字列を扱う場合、シングルクォート「'」かダブルクォート「"」で囲みます。
// シングルクォート
var str1 = 'dart_String';

// ダブルクォート
var str2 = "dart_String";

// シングルクォートを文字列として使用
var str3 = "Programming language 'Dart'";
上記例示の3つ目のように、ダブルクォートで囲った場合はシングルクォートを文字列として扱うことが可能です。(その逆もしかり)


エスケープシーケンスが使用可能です。
// "dart"と"String"の間で改行される
var str1 = 'dart\nString';

// エスケープシーケンスの"\"を文字列として表示する場合は
// "\\"と記述する
var str2 = '\\n';

// 今は使えないが、Dartドラフト版時代は
// "@"を使うことでエスケープさせなくすることができた
// var str3 = @'\n';


上の例では改行を表すためにエスケープシーケンスを用いましたが、シングルクォート(もしくはダブルクォート)を3つ重ねて囲むことで改行を含む文字列を記述することが可能です。
// HTMLの<PRE>タグのように使用できる
var str1 = '''dart

String''';


「$」を用いることで、文字列リテラル内に式の値を代入することが可能です。
var str1 = 'Dart';

// 式の値の代入
var str2 = 'Programming language $str1';

// 文字列と式の境界が分からない場合は「${式}」で記述する
var str3 = 'Programming language ${str1}!!';


文字列の比較は「==」を用いて行います。
var str1 = 'dart_String';

print("dart_String" == str1); // TRUE

Dart に厳密等価演算子「===」は存在せず、すべて「==」で比較します。
ですが、JavaScript へコンパイルした場合は、CoffeeScript などと同様に厳密等価演算子で比較しています。
#Dart ドラフト版時代は「===」も実装されていました


Dart の文字列リテラルはどれも String 型となるので、String のメソッドを使用可能です。
String は変更不可能なオブジェクトのため、String を返却するメソッドは全て新しいオブジェクトを生成して返却しています。
#Java と一緒ですね


今回はこんなところです。