vala の変数とデータ型
昨日に引き続き、「猫でもわかるC#プログラミング(第2版)」の第3章を vala で書いてみようと思います。vala の型については、 http://www.vala-project.org/doc/vala/types.html を参照してください。
整数:
char uchar short ushort int uint long ulong size_t ssize_t int8 uint8 int16 uint16 int32 uint32 int64 uint64 unichar
浮動小数点:
float double
しかし、 vala の型には、MinValueやMaxValueが無いので、type01.cs や type04.cs は諦めました。
となると、前半は、文字列を数値に変換する Parse メソッドになるのですが、これも vala では GLib.string のメソッド(to_intなど)を使うので、Parse は 変換後の型のメソッドですが vala では string のメソッドになります。詳細は、http://valadoc.org/glib-2.0/string.html を参照してください。
ということで、36ページの type03.cs を vala にしてみます。
// type02.cs class type02 { public static void main () { stdout.printf ("整数を入力してください---"); string str = stdin.read_line(); int x = str.to_int(); stdout.printf ("今の数字を2倍すると%dですね。\n", x * 2); stdout.printf ("あなたの年齢を整数を入力してください---"); str = stdin.read_line (); ushort age = (ushort) str.to_int (); stdout.printf ("あと%d年で100歳ですね。\n", 100 - age); } }
string を stdin.read_line() で読み込んで、キャストすることで、対応できるけど、あまり美しくないですね。実行すると以下のようになります。
$ ./type02 整数を入力してください---2 今の数字を2倍すると4ですね。 あなたの年齢を整数を入力してください---40 あと60年で100歳ですね。
40ページの BMI を計算するのも同様です。Math.Pow は vala では Math.pow と小文字になります。詳細は http://www.valadoc.org/glib-2.0/GLib.Math.html を参照してください。
// type05.vala class type05 { public static void main () { stdout.printf ("身長(m)---"); string str = stdin.read_line (); double bl = str.to_double (); stdout.printf ("体重(kg)---"); str = stdin.read_line (); double bw = str.to_double (); stdout.printf ("BMI = %3.1f\n", bw / Math.pow (bl, 2.0)); } }
実行すると以下のようになります。
$ ./type05 身長(m)---1.7 体重(kg)---70 BMI = 24.2
続く Decimal は vala には無いみたいなので省略します。
文字型 char は vala では前出の整数に含まれているので、放置します。
論理型は、 printf では扱えないので、bool.to_string()だけ紹介します。詳細は、 http://valadoc.org/glib-2.0/bool.html を参照してください。
// bool01.vala class bool01 { public static void main () { bool a = true; bool b = false; stdout.printf ("a は文字列にすると「%s」\n", a.to_string ()); stdout.printf ("b は文字列にすると「%s」\n", b.to_string ()); } }
実行すると以下のようになります。
$ ./bool01 a は文字列にすると「true」 b は文字列にすると「false」
続くリテラルについては、 vala には GetType メソッドが無いため省略します。
その次の暗黙の型指定 var と dynamic です。はじめは var です。
// var01.vala class var01 { public static int main () { var mytext = "猫でも分かるC#プログラミング 第"; var no = 2; var myc = "版"; stdout.printf ("%s%s%s\n", mytext, no.to_string(), myc); return 0; } }
実行結果は以下のようになります。
$ ./var01 猫でも分かるC#プログラミング 第2版
次に、 dynamic (C# 4.0からサポート)ですが、これはまだサポートされていないようです。
急ぎ足で来ましたが、今日はここまで。53ページまで終わりました。