電子書籍の厳選無料作品が豊富!

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で行という概念は存在しますか?
この辺も教えてください。
以上

A 回答 (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:』のラベル名に処理が移ります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/08 10:20

いわゆるプログラムの構造化についての考え方の問題ですね。



ちょうどWikipediaにもいい解説があったのでご覧になると
よいでしょう。

http://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0% …

全体の流れとしては「goto」を使うこと自体が流行ではないです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/08 10:22

★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 文とラベル文を使って無条件に処理の流れを変えることも可能です。
 でも行の指定ではなくて、任意のラベル名です。
・以上。おわり。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/07 22:15

レスありがとうございます。



ごめんなさい、ご質問の意味がちょっとはっきり分かりかねるのですが…。
正確には「イコールが成立すれば、その条件式が属する{ }内を実行したあと、それより下に次の命令があれば、それが順次実行される」となります。

私の書いたプログラムを、ことばで書けば以下のようになります:
--------------------------------------------------------------------
もし 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 のときに限られるわけですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/07 22:11

#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';
}
}

この回答への補足

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

補足日時:2007/03/07 20:18
    • good
    • 0

こんにちは。


こんな感じかな。

if(a == 0) {
if(b == 1) {
c = 'c';
}
if(b == 1) {
c = 'd';
}
} else {
if(b == 1) {
c = 'a';
}
if(b == 1) {
c = 'b';
}
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!