忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

out変数 C#7.0メモ

しばらくC#から遠ざかっていたので、C#7.0の最新機能で遊んで自信を回復してみます。今回はout変数の単純なコードを書いてみます。


これまで

using System;

class Program
{
    static void Main(string[] args)
    {
        int x;
        int y;
        GetPoint(out x, out y);
        Console.WriteLine(x + ", " + y);
    }

    static void GetPoint(out int x, out int y)
    {
        x = 2;
        y = 3;
    }
}

結果

2, 3

outキーワードは2つ(以上)の結果を返すのに便利ですが、わざわざ予め変数の宣言に二行も使わなければならないのがめんどうです。

1行で書く

C#7.0からは次のように書くことができます:

using System;

class Program
{
    static void Main(string[] args)
    {
        GetPoint(out int x, out int y);
        Console.WriteLine(x + ", " + y);
    }

    static void GetPoint(out int x, out int y)
    {
        x = 2;
        y = 3;
    }
}

結果

2, 3

すばらしい!これなら気軽にoutキーワードを使えます!今までは事前準備が数行必要だというのが心理的な障壁になってしまっていましたが、一行でできるというのは強いです!

var

なお、varを使うこともできます。

using System;

class Program
{
    static void Main(string[] args)
    {
        GetPoint(out var x, out var y);
        Console.WriteLine(x + ", " + y);
    }

    static void GetPoint(out int x, out int y)
    {
        x = 2;
        y = 3;
    }
}

結果

2, 3

メソッドの宣言を見れば変数の型が分かるので、varでもいいのです。

値を受け取らない

using System;

class Program
{
    static void Main(string[] args)
    {
        GetPoint(out var x, out var _);
        Console.WriteLine(x);
    }

    static void GetPoint(out int x, out int y)
    {
        x = 2;
        y = 3;
    }
}

結果

2

時としてすべての値が欲しいわけではないということもあるでしょう。その場合は「_」を使うことで変数宣言しなくても良くなります。使わない変数で名前空間が汚染されるのも嫌ですしね。

拍手[0回]

PR