何を今頃なのだが C# 4.0 を調べてみた。
なんと 4.0 では関数にデフォルト引数を指定できるようになっていた。
てか、今まで無かったのかよ…
Default argument
で可能とかウソを書いてしまった、はずかしい。
引数に数の差だけのためにオーバーロードをする必要はコレで無くなるわけだ。
それと、System.IO.File.ReadLines() というイテレーション関数も追加らしい。
StreamReader.ReadLine() じゃダメなの?と思うんだが…
他は興味がわかないので今回はパス。
ということで 3.5 と 4.0 の csc.exe で試しコードを書く。
default_param.cs
using System; class Test { public static int Func(int x=5, int y=7) { return x+y; } } class __main__ { [STAThread] public static void Main(string[] args) { int n = Test.Func(y:20); Console.WriteLine(n); } }
readlines.cs
using System; using System.IO; class __main__ { [STAThread] public static void Main(string[] args) { int n = 0; //foreach (var line in File.ReadAllLines(args[0])) foreach (var line in File.ReadLines(args[0])) { n++; Console.WriteLine("{0}: {1}", n.ToString("000"), line); } } }
ちなみに私がパスを通しているのは 3.5 のみなのでこうなる。
うん、やっぱりどちらも 4.0 でしかビルドできないや。
これだけではツマラナイので Ubuntu でもやってみる。
あれ?デフォルト引数のほうだけ問題なくビルドできちゃった。
どっちなんだよ Ubuntu に最初から入っている mono は。
Readlines は「そんなメソッドありません」ですね、そりゃそうだ。
ReadAlllines とコメントアウトを変更すれば普通にビルドできた。
StreamReader で while ループしたほうが圧倒的効率だけどテストです。
つまり何が言いたいかというと。
コンパイルするのがメンドイけど実用無視で遊ぶなら C# は最強。
Linux で Python は単なる実用ツールでしかないもの、私はだが。