滅入るんるん

何か書きます

Kotlin使いのためのC#入門 Control Flow

> Top

If Expression

Kotlinではifはexpressionですが、C#ではifはstatementです。

class IfStatement
{
    public void Main()
    {
        int i = 0;
        if (i == 0)
        {

        }
        else if (i < 0)
        {

        }
        else
        {

        }

        // 真偽値 ? trueの時の値 : falseの時の値
        int j = i == 0 ? 1 : 10;
    }
}

C#ではifの評価式の中は必ず真偽値を返さなければいけません。またKotlinの1行if文はC#では三項演算子として表現するか、複数行で表現する必要があります。

When Expression

KotlinではC言語ファミリーのswitchはwhen expressionになっていました。C#ではC言語ファミリーと同じようにswitch statementです。

class SwitchStatement
{
    public void Switch(string value)
    {
        switch (value)
        {
            case "": break;
            case "12": break;
            default: break;
        }
    }

    public void PatternMatch(object value)
    {
        switch (value)
        {
            case string text:
                Console.WriteLine(text);
                break;
            case bool isFlag:
                if (isFlag)
                {
                    Console.WriteLine("true");
                }
                break;
        }
    }
}

C# 7.0よりパターンマッチングが導入されました、またC# 8.0以降パターンマッチングの機能強化も予定されています。 詳しい機能はドキュメントを参照してください。

For loops

Kotlinのfor文はC#のforeach文と同じと言うことがkotlinlangのリファレンスにも記載されています。 しかし、C#にはforeach文とは別にfor文が存在します。

class ForLoop
{
    public void Main()
    {
        for (int i = 0; i < 100; i++)
        {

        }

        foreach (int i in Enumerable.Range(0, 100))
        {

        }
    }
}

C#にはKotlnのRangeのような機能がないため(機能追加の予定はあります)、単純なループはC言語のようにfor文を使う必要があります。 逆に言うと、値を列挙する場合にのみforeach文を使用します。

While Loops

C#にもKotlin同様while文とdo-while文が用意されています。

class WhileLoop
{
    public void Main()
    {
        int i = 0;
        while (i < 100)
        {
            i++;
        }

        do
        {
            i--;
        } while (0 < i);
    }
}

Break and continue in loops

もちろんC#にもKotlin同様、breakcontinueがサポートされています。

class WhileLoop
{
    public void Main()
    {
        int i = 0;
        while (i < 100)
        {
            if (i % 2 == 0)
            {
                continue;
            }
            if (i % 50 == 0)
            {
                break;
            }
            i++;
        }
    }
}