亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

セミコロンレスC# を夢見て

酔っ払ってます(前置き)

セミコロンレス?

Javaの世界では最早常識だそうです。

要は、全くセミコロンを書かずにJavaを書くという、、、なんなんでしょ?

セミコロンレスC#

セミコロンレスの仕組みは、「式として評価されるけどセミコロン書かずに済む」という記述を使うってものです。

なにそれ?っていわれますと、 if文 でございます。 ほら、こう書けるっしょ?

        static void Main(string[] args)
        {
            if(Console.ReadLine() == null) { }
        }

そう、 返り値をもつメソッド ならば、等価評価することで実行できてしまうわけですよ。

んで、上記がReadLineなのは、C#のコンソール出力系かつvoid型以外を返す、っていうのがないから、なんです。

セミコロンレスC#Hello World

ところがどっこい。

Consoleへの出力は、Streamとしても取れます(Console.OpenStandardOutput())。 そして、Streamへの書き込み処理には、C# 4 付近の非同期アップデートにより、Async版 (WriteAsync) があります。Async版は当然、戻り値としてTaskを返しますから・・・

static void Main(string[] args)
{
    if(
        Console.OpenStandardOutput()
        .WriteAsync(Encoding.Default.GetBytes("Hello Semicolonless World !!"), 0, Encoding.Default.GetBytes("Hello Semicolonless World !!").Length) == null)
    { }

    if(Console.ReadLine() == null) { }
}

Gistおいときますね。

。。。ん?

これ、Task使えば何でもできるようにならね??