「猫でも分かるC#プログラミング」はValaで使えるか
Momonga Linux 7もリリースされたので、trunk環境はvala-0.10.0に上げてみました。そして、C#とvalaの違いをのんびり調べようと思ったのですが、ネタが見つからなかったので、「猫でも分かるC#プログラミング(第2版)」を買ってきて、サンプルコードを試して行くことにした。
残念ながら、最初のサンプルコード(7ページ(myname01.cs))から動かないため、vala 用に書き換えました。名前は、私の名前を使います。
// myname01.vala class myname01 { public static void main () { stdout.printf("私の名前は西尾太です\n"); } }
ビルド&実行結果は以下のとおりです。
$ valac myname01.vala $ ./myname01 私の名前は西尾太です
vala はビルドせずに実行することもできます。
$ vala myname01.vala 私の名前は西尾太です
では、違いを見ていきます。
まず、 using System; はvalaでは不要です。標準出力クラス stdout の printf メソッドを使います。
次に、エントリーポイントは Main ではなく main になります。
さて、 vala は C# と異なり、Cに変換してからビルドされ、ネイティブコードになります。
$ valac -C myname01.vala $ ls myname01 myname01.c myname01.vala
長いので、ここでは表示しませんが、気が向いたらmyname01.cの中身も見てください。glibプログラミングに役立つコードがあるかもしれません。
次は15ページ(text01.cs)です。
// text01.vala class text01 { public static void main () { int a = 10, b = 20, total; total = a + b; stdout.printf ("%d + %d = %d\n", a, b, total); } }
$ valac text01.vala $ ./text01 10 + 20 = 30
これも、 stdout を使うため、修正が必要です。 C# の Console class が使えないと、意外と不便です。16ページも以下のとおり。
// text02.vala class text02 { public static void main () { int a = 10, b = 20; stdout.printf ("%d + %d = %d\n", a, b, a + b); } }
$ valac text02.vala $ ./text02 10 + 20 = 30
17ページ(text03.cs)は Console.Write と Console.Writeline の違いなので省略します。18ページ(text04.cs)、19ページ(text05.cs)、21ページ(text06.cs)、23ページ(text07.cs)は、Console.WriteLine の使い方なので省略します。このへんからclass名とファイル名がずれてますね。
24ページ(readline01.cs)は、Console.ReadLineが無いので、stdin.read_lineを使います。http://live.gnome.org/Vala/InputSamples
// readline01.cs class readline01 { public static void main () { string name; stdout.printf ("あなたのお名前は何ですか---"); name = stdin.read_line (); stdout.printf ("あなたのお名前は%sさんですか\n", name); } }
$ valac readline01.vala $ ./readline01 あなたのお名前は何ですか---西尾太 あなたのお名前は西尾太さんですか
これで第2章が終わりです。25ページのまとめの2, 9, 10, 11, 12 が違うので、前途多難です。