同僚の皆さん、そして単に興味がある皆さん、こんにちは。
今日は、Java プログラミング言語の機能である Break 演算子について見ていきます。これは遷移演算子をテーマにした最初の記事です。気に入っていただけましたら、喜んで続きを書きます。この記事は主に初心者の開発者を対象としており、上級の学生にとってはここで何も新しいことは見つからない可能性があることに注意してください。じゃ、行こう。Java では、プログラム命令の実行順序を変更するには、ジャンプ ステートメントと例外処理メカニズムの 2 つの方法があります。Java には、break、 continue、return という 3 つのジャンプ演算子があります。今日は、オペレーターについて詳しく見てみましょう
break
。例外処理は非常に広範なトピックであるため、この記事の範囲を超えています。Javaでbreak文を使用するには3つの方法があります。最初の最も一般的な方法は、break
ループを早期に終了するために使用することです。次に例を示します。
public class SimpleExample {
public static void main(String[] args) {
findNumberInLoop(3);
}
public static void findNumberInLoop(int number){
for (int i = 0; i < 10; i++) {
if (i == number) {
break;
}
System.out.println(i);
}
System.out.println("cycle was finished");
}
}
この例では次のように表示されます。
1
2
cycle was finished
これは、ループ カウンタが渡されたパラメータ、つまり数値 3i
と等しくなると、ループの実行が早期に終了することを意味します。number
プログラムに複数のネストされたループがある場合は、最も内側のループからの出力のみをブレークします。次に例を示します。
public class SimpleExample {
public static void main(String[] args) {
findNumberInLoop(3);
}
public static void findNumberInLoop(int number){
for(int i = 0; i < 5; i++) {
for (int j =0; j < 10; j++) {
if(j == number) {
break;
}
System.out.print(j);
}
System.out.println();
}
System.out.println("cycles was finished");
}
}
この例では、次の出力が生成されます。
012
012
012
012
012
cycles was finished
この例からわかるように、内側のループは番号 3 (パラメータnumber
) で毎回中断され、外側のループは意図どおり 5 回実行されます。Java では、ループ内で複数の Break ステートメントを使用できますが、コードの可読性と構造が大幅に低下するため、これはお勧めできません。2 番目の用途は、break
branch 内のステートメントの実行を中断するために使用することですswitch
。次に例を示します。
public class SimpleExample {
public static void main(String[] args) {
square(2);
}
public static void square(int number){
switch (number){
case 1:
System.out.println(number*number);
break;
case 2:
System.out.println(number*number);
break;
case 3:
System.out.println(number*number);
break;
}
System.out.println("after switch");
}
}
この例を実行すると、次の出力が生成されます。
4
after switch
Break ステートメントは、ブロック全体に続くコードに制御を渡しましたswitch
。この例で break
in を指定しない場合:switch
public class SimpleExample {
public static void main(String[] args) {
square(2);
}
public static void square(int number){
switch (number){
case 1:
System.out.println(number*number);
case 2:
System.out.println(number*number);
case 3:
System.out.println(number*number);
}
System.out.println("after switch");
}
}
出力は期待どおりにはなりません。
4
4
after switch
これは、ブロックが実行された後、case 2
プログラムが後続のすべてのcaseブロックの実行を継続し、対応する出力が得られたために発生しました。場合によっては、オペレーターのこの機能がswitch
有益になることがあります。たとえば、次のとおりです。
public class SimpleExample {
public static void main(String[] args) {
compare(2);
compare(7);
compare(12);
}
public static void compare(int number){
switch (number){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("number is less than 5 or equal 5");
break;
case 6:
case 7:
case 8:
case 9:
System.out.println("number is greater than 5");
break;
default:
System.out.println("number is less than 0 or greater than 9");
}
System.out.println("after switch");
}
}
このプログラムは、指定された数値を数値 5 と比較し、次の出力を返します。
after switch
number is greater than 5
after switch
number is less than 0 or greater than 9
after switch
メソッドが初めて呼び出されるとき、オペレーターはswitch
制御をオペレーターに移しcase 2
、次に のオペレーターにbreak
移しますcase 5
。2 番目の呼び出しは最初の呼び出しと似ていますが、 c で始まりますcase 7
。3 番目の呼び出しでは、すべてのケースで適切な値が見つからないため、演算子が実行されますdefault
。break
3 番目の方法は、C 演算子の代わりに演算子を使用することです。これを行うには、ラベル付きで呼び出されるgoto
特殊な形式の演算子を使用します。この形式はラベルのように見えます。これは通常、コードのブロックの前にある Java 名前空間の適切な名前です。さらに、ラベル付きのこのコード ブロックを適用した後、コードは対応するラベル付きのブロックの後の場所から実行され続けます。次に例を示します。 break
break
break метка;
break
public class SimpleExample {
public static void main(String[] args) {
howWeUseLabels(true);
System.out.println();
howWeUseLabels(false);
}
public static void howWeUseLabels(boolean bool) {
firstBlock:{
secondBlock:{
thirdBlock:{
System.out.println("We will see it always");
if(bool) {
break secondBlock;
}
System.out.println("We won't see it if bool == true");
}
System.out.println("We won't see it if bool == true");
}
System.out.println("We will see it always");
}
}
}
この例では、次の出力が生成されます。
We will see it always
We will see it always
We will see it always
We won't see it if bool == true
We won't see it if bool == true
We will see it always
最初のメソッド呼び出しの後、オペレーターはbreak
ブロックの最後に制御を移しsecondBlock
、終了してsecondBlock
、thirdBlock
最後println()
に別のオペレーターを実行しますfirstBlock
。2 回目の通話後、すべての回線が画面に表示されます。ラベルはサイクルを示すために使用することもできます。ラベルに移動できるのは、そのラベルで示されたコード ブロック内からのみであることに注意してください。たとえば、次のようなコードはコンパイルされません。
public class SimpleExample {
public static void main(String[] args) {
label:{
System.out.println("inside label");
}
if(true) {
break label;
}
System.out.println("This is error");
}
}
コードとステートメントのクリーンさに関する注意事項break
: ステートメントを使用するとループがより理解しにくくなりbreak
、プログラマはその操作のニュアンスを理解するためにループ内を調べる必要があるためbreak
、ステートメントを非常に慎重に使用するというアドバイスが一般的に受け入れられています。短いループではより自信を持って使用でき、長く深くネストされたループではより慎重に使用できるヒューリスティック ルールがありますbreak
。これにより、エラーの可能性が高まり、他のプログラマによるコードの読み取りと理解が複雑になるためです。break
上で書いたように、コード全体に散在する多数の . の使用は、プログラマがなぜそのようにコードを書いたのかを十分に理解していないことを示しています。このようなループをいくつかの小さなループに分割してリファクタリングすることを検討する価値があるかもしれません。コード構造が複雑になるため、break
の代わりにラベルを使用する場合は注意してください。goto
Java の演算子について今日お話ししたかったのはこれだけですbreak
。建設的な批判は喜んでさせていただきます。また、ご興味があれば、 演算子continue
とについての続きを書く準備もできています。return
GO TO FULL VERSION