No.7ベストアンサー
- 回答日時:
私なりに質問の意図を汲み取り回答します。
continueを使うか入れ子にするかの2択を迫られた場合、どちらを選択しても論理的な構造は変わりません。これは絶対前提条件です。その上でcontinueを使うのが嫌いか、入れ子を嫌うかの違いにすぎません。
両者のメリットとデメリットを考えた場合、
continueを使う場合、入れ子が少なくできる
continueを使わない場合、使用する命令の種類を減らすことができる
位しかありません。
これ以外の理由で何か議論をしている場合、中身の無い屁理屈でしかないように思えます。
で、continueを使わないことと入れ子を減らすことのどちらがよりよいかと言う話になりますが、私はcontinueを使う方が好きです。私はcontinueを使うことに抵抗はありませんし、入れ子を減らすほうが表記上の構造がシンプルになり単純な可読性が向上しますので。
しかし、複数の人がかかわる開発などでは、優れた構造のプログラムが必ずしもよいわけではありません。
例えば正規表現は文字列操作のために用意された機能ですが、これを習得していない技術者も少なくありません。正規表現を使えば1行ですむ処理を何十行も書いて処理をする汚いソースはよく存在します。正規表現がわかる人にとっては正規表現を用いて1行で記述してくれたほうがずっとわかりやすいし、構造的にも優れていることは間違いありません。しかし、正規表現がわからない人にとっては、読めないソースになってしまいます。
それと同じようなことがこの件についても言えます。continueは全ての言語に共通する命令ではありません。また、違和感を感じる人や読みにくいと感じる人もいるでしょう。そのような人が読む可能性のあるチームであえてcontinueを使うのであれば、それは人が読めないソースを書いていることになります。
「人が読めないソース」がいいソースであるはずがありません(まぁ読めない人には少し勉強してほしいものですが…)。
ケースバイケースであると思います。
No.6
- 回答日時:
#1です。
回答は出ているようですが一応自分の回答に補足しときます。
補足要求した理由は、質問文だけでは「全くの初心者」なのか「少しは知ってる人」なのかの判断がつかなかったからです。
「初心者が Java の文法を勉強するために質問している場合」と「中級者が他者のソースのトレースをやりたがっている場合」とでは回答が全く変わってしまいます。
なので、あなたががある程度以上のレベルの人だと最初から分かっていたなら、俺も他の方と同じように「Java の条件判断文は if と switch しかありませんので、あとはフリーフォーマット方式を採用している関係で違って見えるくらいのバリエーションしかありません」と答えたでしょう。
ちなみに質問文の中に例として載せてある構文であれば、
while ( (data = get()) ) {
if ( !data ) continue;
process(data);
}
という書き方をします。
判定はできるだけイコールを使わずに判定し、ループ内で使用するデータは while 文の中で取得するように心がけています。また、ブロック文がいらないケースでは if に中括弧は使いません。
これは「何例かの決まりきった構文を使う場合、1文字でも少ない方がトレーサビリティは向上するはずだ」という俺のポリシーによるものです。
No.5
- 回答日時:
最初、質問を読んだときよく意味がわからなかったんですが、補足で意味がわかりました。
面白そうなので回答します。while(ループ条件){
if (判定条件==true) {
処理
}
}
私も、これに一票ですね。最初に実行条件に符合しないものを例外的に構文から外に出すやりかたはあまりとりません。
これがループだとどっちでもいい感じがしますけど、サブルーチン(メソッド)などの場合にはかなり印象が違ってきます。例えば、あっちこっちにreturnがいくつもあるような書き方は最悪でしょう。returnは常に最後に1つだけで済む形で書くのが基本ですね。
それと同じように、ループの場合も、例外がいくつもあちこちにある書き方は、後で修正などを行うことになったとき、取りこぼしを誘発する可能性があります。条件が最初にすべてまとめられるのならいいのですが、
while(ループ条件){
if (○○){ continue; }
・・・処理・・・
if (○○){ continue; }
・・・処理・・・
if (○○){ continue; }
・・・処理・・・
}
こんな具合に何かの処理をしてから条件に応じて構文を抜け出すような処理になってきた場合、後で条件などが変更されたとき、つい修正の取りこぼしを誘います。
ifでネストされた中に書く方法は、一見すると読みにくそうに思えますが、「どの処理がどの条件内で実行すべきか」が明確にわかり、条件変更などに伴う取りこぼしの可能性を抑制できるように思えます。
while(ループ条件){
if (○○){
・・・処理・・・
if (○○){
・・・処理・・・
if (○○){
・・・処理・・・
}
}
}
これなら、どの条件に符合するときどの処理をすべきかが直感的にわかります。条件の変更が必要となっても修正の取りこぼしをすることはまずありません。改変に伴う修正の取りこぼしなどを考えると、continueを使わないほうがコードとしては安全かな?と思ったりします。
No.4
- 回答日時:
私もその方法をとります。
つまり、本題としてやるべきことは、なるべくif文のNESTのなかでやるのではなく、素直な流れのなかでやる方が、ソースが見やすくなります。また、このようなループのなかで、良くあるケースを最初に除いておくことは、処理のスピードアップにもつながることがあります。
No.2
- 回答日時:
あまり良いほうほうではないでしょうが。
while(ループ条件){
if(判定条件==true){ flag=1;}
if(flag==0){ 処理A(falseのとき);}
else{ 処理B(trueのとき);}
flag=0;}
}
ムダみたいですが自分的には
頭に入りやすいのでつい。
ちゃんと紙にやりたいことを
書いてやればこんなことは
ないでしょう。
この回答への補足
すいません。説明が足りなかったでしょうか。
ループ処理で、
ある条件のときだけ処理をするときです。
^^^^^^^^^^
elseの処理がないときです。
他にも、
while(ループ条件){
if (判定条件==true) {
処理
}
}
という書き方があると思います。
No.1
- 回答日時:
補足をお願いします。
1.あなたは Java の勉強中ですか? だとすれば、どれくらい勉強しましたか?
2.なぜこのような質問をしなければならなかったのですか? もしくは単に興味本位であれば、なぜそのような興味が沸いたのですか?
この回答への補足
1.Javaは2年くらいやってます。現在も勉強中ですが・・・。
2.色々な人のコードをみてると同じ意味でも違う描き方をしてるので、もっと色々な人のコードを見てみたいと思って質問しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) beforecloseの中からの抜け出し方 1 2023/08/10 18:01
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- Java Java 南京錠 2 2023/02/04 11:46
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- PHP PHP・Wordpress preg_replaceを条件分岐で処理させる方法が知りたい 1 2023/05/01 14:25
- Java Javaの問題なのですが、 永久ループを使って以下に従って数値を出力するプログラムを作成する。 ・1 3 2023/06/06 18:43
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どなたかこのプログラミングを...
-
画面を強制的に再描画させる方法
-
再帰関数のインライン展開
-
エクセルの当番表を作っていま...
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
繰り返し処理で50音順にする方法
-
ループ内での条件処理
-
EXCEL VBA ユーザーフォームの...
-
ループ7回目の悪役令嬢は、元敵...
-
ループフリー
-
UWSCに制限時間を付けたいです
-
乱数の桁数指定、または範囲指定。
-
vb.netです。2次元配列の要素を...
-
これの名称なんて~の?ダッフ...
-
エクセル関数で1〜12の数字がル...
-
COBOLプログラム
-
アクティブセルから、A列最終行...
-
Java 南京錠
-
VBA msg=""の使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
ループ7回目の悪役令嬢は、元敵...
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
エクセルの当番表を作っていま...
-
GIFアニメをループさせたくない
-
VBAで3秒だけ時間を止めたい
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
-
DOSコマンドのループ内のTIMEコ...
-
ListBox 複数選択 で オートフ...
-
vbscriptでIE自動入力(途中で...
-
vb.netからエクセル関数書き込み
-
DoEventsが必要な理由について
-
Java 南京錠
-
アクティブセルから、A列最終行...
-
テキストボックスの名前に変数...
-
範囲指定したセルを1つずつ飛...
-
VBA Dir関数でファイルをループ...
おすすめ情報