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」というには、難しい感じになってまいりました。
でも、少しずつ進めていきます。