![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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:』のラベル名に処理が移ります。
Oh-Orange様。何度も回答いただきありがとうございました。私は現在50歳、まさにN88-BASICでコンピューターに最初に触ってきたものです。コンピューターはプログラムを考えれば大げさですけどなんでも出来ると喜んでプログラムを書いてきました。現在また必要に迫られてプログラムを書かなければならない状況になり昔の杵柄でがんばるつもりでしたが時代やシステムが大きく変わっていることをまさに実感しました。これにめげず考えを新しくしてプログラムしていくつもりです。Oh-Orange様はじめ皆様ありがとうございました。
No.5
- 回答日時:
いわゆるプログラムの構造化についての考え方の問題ですね。
ちょうどWikipediaにもいい解説があったのでご覧になると
よいでしょう。
http://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0% …
全体の流れとしては「goto」を使うこと自体が流行ではないです。
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 文とラベル文を使って無条件に処理の流れを変えることも可能です。
でも行の指定ではなくて、任意のラベル名です。
・以上。おわり。
Oh-Orange様。ありがとうございます。いろいろな手法があるということでしょうか。大変参考になりました。御礼のメールで申し訳ありませんが、よろしければgoto 文とラベル文を使って無条件に処理の流れを変える手法を教えていただければ幸いです。
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 のときに限られるわけですね。
hkd9001様。度重なる回答ありがとうございました。どうしてもBASICプログラムが頭から離れずGOTOでIF分を抜けることを考えてしまいます。しかし、上記の回答で大変よくわかりました。もっと頭をやわらかくして考えます。
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';
}
}
この回答への補足
hkd9001様お世話になります。
なんとなく書いていただいたプログラムはわかるのですが、ということは全てのIf文においてイコールが成立すれば{}と共にこの全ての条件式から抜け出すと考えてよいのでしょうか。
プログラムの基礎も知らずにプログラムを学んでいるもんで、申し訳ありませんが再度教えていただけますか。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
FocusLostでイベント処理を中断...
-
JSP、サーブレットの初期処理
-
アコーディオンメニューをアン...
-
イベントとリスナーに関すること
-
ProgressBarが0%から動きません
-
PHPでDB処理中にプログレスバー...
-
Threadについて
-
[Java] while(true)の意味
-
演算子について
-
Javaアプリケーション実行の返...
-
SwingUtilities.invokeLater(ne...
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
EXCEL VBAにて動的にCheckBOXを...
-
private static という変数の修飾
-
【sendkeysメソッドが動かずに...
-
変数の参照でエラーが出てしま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
doGetとdoPostの違い
-
JavaScriptからJAVAクラスを呼...
-
Javaでのデバッグコード削除
-
WPF C#でF10のイベント取得方法...
-
数値の定数を付ける時
-
Tomcat高負荷時の設定について
-
Javaプログラムからポップアッ...
-
JavaでVBのDOEVENTSと同様の処...
-
JSP、サーブレットの初期処理
-
switch文の中に、throws new Ex...
-
ExcelVBA で文字列の特定の文字...
-
VBScriptでのWord印刷
-
ラジオボタンの選択判定
-
Javaアプリケーション実行の返...
-
C#で別スレッドの終了を知りたい
-
ftp 同時複数接続の負荷テスト...
-
ブラウザを閉じた後のサーバ側...
-
javaのプログラムが止まる
-
[Java] while(true)の意味
おすすめ情報