• ベストアンサー

複数の条件分岐の仕方

BASICを多少経験していますがプログラム初心者です。 JAVA Scriptで条件が複数ある場合の条件分岐の仕方を教えてください。 たとえば(先頭の数字は行数です) 1 a=0 then goto 5 2 b=1 then C="a" 3 b=2 then C="b" 4 break 5 b=1 then C="c" 6 b=2 then C="d" 7 break と言うような分岐を想定しています。 JAVAで行という概念は存在しますか? この辺も教えてください。 以上

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.6

★最初に JAVA Script では goto 文は使えませんでした。 ・ごめんなさい。→使うとエラーになりました。よって使えません。  他の言語(C/C++など)と同じだと思ってしまいました。 ・昔、BASIC 出身者は GOTO、GOSUB をやたらに使いすぎてプログラムが読めないという  話を聞きました。→N88-BASIC の時代です。ちなみに私はずっと C言語系です。 ・今ある Visual Basic、VBA(VBE)、VB Script の新しい言語では switch と同じ多分岐の  制御があるため if の多重分岐や break などの命令のお陰で goto を使わなくても色々  処理の流れを変えられます。→この方がプログラムを分かりやすくするのです。 ・それで goto 分の使い方は簡単です。→JAVA Script では使えませんが説明します。 サンプル: BOOL flag = FALSE; ←初期化 for ( int k = 0 ; k < 10 ; k++ ){  for ( int j = 0 ; j < 10 ; j++ ){   for ( int i = 0 ; i < 10 ; i++ ){    :    処理(ここで何かの条件で flag を TRUE にする)    :    if ( flag == TRUE ) goto ExitLoop; ←『flag』が『TRUE』ならば『ExitLoop』へ無条件ジャンプ   }  } } ExitLoop: ←最後は『:』文字です。 ↑ 3重のループ文を一気に抜けて、ここの場所にジャンプします。 最後に: ・C/C++ などでは行番号の代わりに任意のラベル名を利用して goto します。  BASIC では行番号ですがラベル名の方が分かりやすく自由に名前を付けられます。 ・また、BASIC の GOTO 文では繰り返し処理からその外へジャンプするとその後の動作に  悪影響が出ますが、C/C++ 言語などでは出ません。→昔の N88-BASIC などが悪影響が出る。 ・上記の3重ループから一気に抜ける場合には goto 文を活用する絶好の機会です。  でもそれ以外では goto 文で無条件に処理の流れを変えるのはお勧めできません。  for、while、if-else、switch の制御文と break、continue の組み合わせで制御をするのが  一般であり、分かりやすいプログラムを書くことに繋がります。ですので goto 文を使っての  無条件ジャンプの手法は上記のサンプルにあるように多重ループから一気に抜けるような場面  でしか活用法がないと思って下さい。→上手に使えばより分かりやすくなりますが、不用意に  多用してはいけません。ここが BASIC 出身者さんにとっては難しい点(考え方)ですね。 ・以上。おわり。→『goto xxxx;』でジャンプして『xxxx:』のラベル名に処理が移ります。

homma
質問者

お礼

Oh-Orange様。何度も回答いただきありがとうございました。私は現在50歳、まさにN88-BASICでコンピューターに最初に触ってきたものです。コンピューターはプログラムを考えれば大げさですけどなんでも出来ると喜んでプログラムを書いてきました。現在また必要に迫られてプログラムを書かなければならない状況になり昔の杵柄でがんばるつもりでしたが時代やシステムが大きく変わっていることをまさに実感しました。これにめげず考えを新しくしてプログラムしていくつもりです。Oh-Orange様はじめ皆様ありがとうございました。

その他の回答 (5)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

いわゆるプログラムの構造化についての考え方の問題ですね。 ちょうどWikipediaにもいい解説があったのでご覧になると よいでしょう。 http://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E5%8C%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0 全体の流れとしては「goto」を使うこと自体が流行ではないです。

homma
質問者

お礼

yambejp様。回答ありがとうございました。参考URLで勉強させてもらいます。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★JAVA Script での多分岐は switch 文で行います。 ・switch文の使い方は下のようになります。 switch (変数){ ←比較もとの変数  case 値1: 処理 break; ←『break』がないと次の case へ処理を移しますが、  case 値2: 処理 break;  『break』があると switch 文のブロックの抜けます。  :  case 値n: 処理 break;  default: 上記の『値1』~『値n』以外の処理(省略可能) } ←break 命令で switch ブロックを抜けると、ここに来ます。 ●本題 ・今回の分岐も switch が使えます。また条件演算子と組み合わせることも出来ます。 ・条件演算子の  『c = ((a < b) ? 1 : 2);』は  『if a<b then c=1 : else b=2』と同じ機能になります。 ・つまり、条件演算子は if-then-else のコンパクト版の演算子です。 ・それでは下に今回の多分岐処理のサンプルを載せます。 サンプル: switch ( b ){  case 1: c = (a == 0) ? 'c' : 'a'; break;  case 2: c = (a == 0) ? 'd' : 'b'; break; } 最後に: ・JAVA Script には『行』という概念は存在しません。  その代わりに『{』や『}』のブロックで上手に分岐処理などを行えます。 ・もちろん、goto 文とラベル文を使って無条件に処理の流れを変えることも可能です。  でも行の指定ではなくて、任意のラベル名です。 ・以上。おわり。

homma
質問者

お礼

Oh-Orange様。ありがとうございます。いろいろな手法があるということでしょうか。大変参考になりました。御礼のメールで申し訳ありませんが、よろしければgoto 文とラベル文を使って無条件に処理の流れを変える手法を教えていただければ幸いです。

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.3

レスありがとうございます。 ごめんなさい、ご質問の意味がちょっとはっきり分かりかねるのですが…。 正確には「イコールが成立すれば、その条件式が属する{ }内を実行したあと、それより下に次の命令があれば、それが順次実行される」となります。 私の書いたプログラムを、ことばで書けば以下のようになります: -------------------------------------------------------------------- もし a が 0 だったら、次の(ア)を実行する。 もしそうでないなら、次の(イ)を実行する。 つまり(ア)(イ)が同時に実行されることはない。 (ア) もし b が 1 だったら、c の値は「c」とする。これで処理終わり。 もし b が 2 だったら、c の値は「d」とする。これで処理終わり。 (もし b が 1 でも 2 でもなかったら、処理終わり。) (イ) もし b が 1 だったら、c の値は「a」とする。これで処理終わり。 もし b が 2 だったら、c の値は「b」とする。これで処理終わり。 (もし b が 1 でも 2 でもなかったら、処理終わり。) -------------------------------------------------------------------- つまり、変数 c に何らかの値が割り当てられるのは、b が 1 または 2 のときに限られるわけですね。

homma
質問者

お礼

hkd9001様。度重なる回答ありがとうございました。どうしてもBASICプログラムが頭から離れずGOTOでIF分を抜けることを考えてしまいます。しかし、上記の回答で大変よくわかりました。もっと頭をやわらかくして考えます。

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.2

#1 です。ごめんなさい。訂正です。 if(a == 0) { if(b == 1) { c = 'c'; } if(b == 2) { c = 'd'; } } else { if(b == 1) { c = 'a'; } if(b == 2) { c = 'b'; } }

homma
質問者

補足

hkd9001様お世話になります。 なんとなく書いていただいたプログラムはわかるのですが、ということは全てのIf文においてイコールが成立すれば{}と共にこの全ての条件式から抜け出すと考えてよいのでしょうか。 プログラムの基礎も知らずにプログラムを学んでいるもんで、申し訳ありませんが再度教えていただけますか。

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.1

こんにちは。 こんな感じかな。 if(a == 0) { if(b == 1) { c = 'c'; } if(b == 1) { c = 'd'; } } else { if(b == 1) { c = 'a'; } if(b == 1) { c = 'b'; } }

関連するQ&A