Kotlinには以下のジャンプ命令がありました。
- return
- break
- continue
また、これらは式として利用できました。
C#ではこれらに追加でgoto
があります。また、C#ではジャンプ命令はStatementのため、val s = person.name ?: return
のような式中での早期リターンはできません。
Break and Continue Labels
Kotlinではラベルを指定して、指定したラベルのループをbreak
やcontinue
でジャンプすることができました。
C#ではbreak
とcontinue
ではこの機能を提供せず、goto
で提供しています。
class WhileLoop { public void Main() { int i = 0; while (i < 100) { if (i % 2 == 0) { continue; } if (i % 50 == 0) { goto Break; } i++; } // No Operationのため空のブロックを書いてる Break: { } } }
C/C++を使ったことがある方なら、わかると思いますが、悪名高いあのgotoです。
サンプルではネスト無しのループで使用しましたが、本来ならばbreak
かcontinue
を使いgoto
は使用するべき箇所ではありません。
gotoは好きなところにジャンプできる分、可読性が悪化するとして使用は避けるべき機能として有名です。gotoはネストされたループなどで、外側のループを抜けるなど局所的なところでは可読性を上げますが、それ以外のところでは安易な利用を勧めません。
Return at Labels
該当の機能はないので割愛。