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ページまで終わりました。