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同様、break
とcontinue
がサポートされています。
class WhileLoop { public void Main() { int i = 0; while (i < 100) { if (i % 2 == 0) { continue; } if (i % 50 == 0) { break; } i++; } } }