vala の文字列型など

さっそくp63のサンプルを試そうと思ったら、GLib.string で IndexOf (見つけた文字のオフセットを返す)を表現するには正規表現を駆使する必要があるみたいなので、ここではパスして、分かるところだけのサンプルです。

// string01.vala

class string01
{
	public static void main ()
	{
		string str = "今日はよい天気です";
		string mystr;
		unichar c;

		stdout.printf ("strは長さ%dです\n", (int)str.length);

		c = str[4];
		stdout.printf ("文字列の5番目の文字は 「%s」 です\n", c.to_string());

		mystr = str.dup ();
		stdout.printf ("mystr = %s\n", mystr);
	}
}

実行結果は以下のようになります。

$ ./string01 
strは長さ9です
文字列の5番目の文字は 「い」 です
mystr = 今日はよい天気です

GLib.string では Length ではなくて length という小文字のプロパティになります。メソッドの場合は len() を使います。また、str.length は long なので (int) にキャストしてます。

次に、文字列から文字を抜き出すと char ではなく unichar になります。書き忘れていましたが、これまでソースはutf-8で書いています。そして、unichar を printf では受けられないので、 unichar.to_string() で文字列に変換して表示しています。

vala での文字列のコピーは、 Copy() ではなく dup() になります。

それに続くis演算子とas演算子は、valaにはボックス・アンボックスの処理が無いため対応できないみたいです。

ということで、「第3章のまとめ」ですが、2 と 5 の一部が違う。 8 と 10 が対応できないということになりました。

やっと、第3章まで終わりましたが、できないことが多すぎで「猫でもできるvala」というには、難しい感じになってまいりました。

でも、少しずつ進めていきます。