過去の桐井戸端BBS (桐ver.8)
13983 手続き実行、分岐、ケースなどはどのように使い分けたらいいのですか masa 2001/11/14-20:21
度々すみませんが、又よろしくお願いします。

未だによく解らないのですが、手続き実行と分岐とケースを一括処理で使う時、
どの場合も、こうだったらここへ処理を移るという事だと思うのですが
どう違うのでしょうか?(使い分けたらいいのでしょうか?)
まだ初心者部類の私としては、今後の初心者の為にも理解できる道場のようなものがあったらなー
と勝手に思っております。
よろしくお願い致します。

13984 Re:手続き実行、分岐、ケースについて 【多遊】 2001/11/14-20:55
記事番号13983へのコメント
masaさん、おもしろい質問ですね

別に道場ではないので、簡単に・・・・・例えば
勤務先の廊下をmasaさんが歩いていたとします。
ちょうど人事部の前にきたとき、

次の転勤は
「・・・・masaさん・・I Love NewYork ・・・・・」
ちょっと前後が聞き取れなかったとします。

ここで、
手続き実行・・・まあ、2〜3年向こうで頑張ってきてね
分岐・・・・・・そのまま、行きっぱなし。ご愁傷様
ケース・・・・・まだ誰かわかりません。
        「masaさんに、Aさんに伝え役を頼もうか」となるかも

そんな感じで、つかいわけください。

13986 Re:早速ありがとうございます。 masa 2001/11/14-21:43
記事番号13984へのコメント
【多遊】さん 今晩は。

>「・・・・masaさん・・I Love NewYork ・・・・・」
>ちょっと前後が聞き取れなかったとします。
>
>ここで、
>手続き実行・・・まあ、2〜3年向こうで頑張ってきてね
>分岐・・・・・・そのまま、行きっぱなし。ご愁傷様
>ケース・・・・・まだ誰かわかりません。
>        「masaさんに、Aさんに伝え役を頼もうか」となるかも
>
>そんな感じで、つかいわけください。
>

早速ありがとう御座います。
手続き実行は必ず元の場所に戻ってくる。
分岐は遠い所へ移る。
ケースは範囲の中でどれかが選ばれる
というような事でしょうか?

ちょっとひねくれると、せっかく教えて頂いてるのに怒られますが、

分岐も行った先で又、最後に分岐で元に戻れる事が出来るので手続き実行と似てますし、
ケースも分岐もだいたい条件が一緒について来ますが、
条件がつく事によって同じように思えてしょうがないのです。

でもおぼろげに解ってきました。ありがとう御座いました。
(ニューヨーク転勤は怖いです。現地の人には悪いですが。)
13989 Re:早速ありがとうございます。 KH 2001/11/14-22:41
記事番号13986へのコメント
masaさん、今晩は。
多遊さんのウイットにとんだ例でお解りになった事と思いますが、
余計なお節介ですが、ちょっと、気になったので投稿します。


>手続き実行は必ず元の場所に戻ってくる。

 ご存知でしょうが、該当の手続きを処理して、手続き実行コマンド
 の次の行に戻ります。

>ちょっとひねくれると、せっかく教えて頂いてるのに怒られますが、
>分岐も行った先で又、最後に分岐で元に戻れる事が出来るので手続き
>実行と似てますし、ケースも分岐もだいたい条件が一緒について来ますが、
>条件がつく事によって同じように思えてしょうがないのです。

 確かに仰ることは解りますが、分岐コマンドを多用すると、分岐で自由に戻る事は出来ますが、
必要もないところに名札が必要になったり、ラーメンプログラム(?)になったりしますので、
後でデバッグや見直しや改造する時、大変困ります。
また、他人が見る必要が出来た時には見るのだけでが嫌になってしまいます。

 自分で作ったものでも、1年経って見直してもさっぱり解らないで、解読まで時間がかかるようなプログラムだと非効率的でたまりません。
それで、できるだけ、ケースや手続き実行で構造化したものが必要になります。
 偉そうな事書いていますが、自分も改定が必要になり、えらい目にあうことがよくあります。
13990 Re:早速ありがとうございます。 masa 2001/11/15-08:47
記事番号13989へのコメント
KHさん おはよう御座います。

>>手続き実行は必ず元の場所に戻ってくる。
>
> ご存知でしょうが、該当の手続きを処理して、手続き実行コマンド
> の次の行に戻ります。
>
>>ちょっとひねくれると、せっかく教えて頂いてるのに怒られますが、
>>分岐も行った先で又、最後に分岐で元に戻れる事が出来るので手続き
>>実行と似てますし、ケースも分岐もだいたい条件が一緒について来ますが、
>>条件がつく事によって同じように思えてしょうがないのです。
>
> 確かに仰ることは解りますが、分岐コマンドを多用すると、分岐で自由
>に戻る事は出来ますが、必要もないところに名札が必要になったり、ラー
>メンプログラム(?)になったりしますので、後でデバッグや見直しや改造
>する時、大変困ります。また、他人が見る必要が出来た時には見るのだけ
>でが嫌になってしまいます。
> 自分で作ったものでも、1年経って見直してもさっぱり解らないで、解読
>まで時間がかかるようなプログラムだと非効率的でたまりません。それで、
>できるだけ、ケースや手続き実行で構造化したものが必要になります。
> 偉そうな事書いていますが、自分も改定が必要になり、えらい目にあうこ
>とがよくあります。

そうですね。長〜い一括処理を作る時は関係してくるのですね。
ありがとう御座いました。


13991 Re:もっと気楽に考えてはどうでしょう pokopon 2001/11/15-12:41
記事番号13990へのコメント
masaさん こんにちは

>そうですね。長〜い一括処理を作る時は関係してくるのですね。
>ありがとう御座いました。

いわば、構造化プログラミングという手法においては、「分岐」は必要ないというか、
使わない方が無難だということですね。
だって、「戻るための細工」をしなければなりませんので。
どこに戻るのか・・・・常に意識しなければなりません。

おそらく・・・・
手続き実行コマンドも「表記上」はBasic でいう「gosub return」なのでしょうけど、
内部的には(桐一括処理の実際の手順としては)、go to の羅列になっていると思います。

すなわち、「分岐だけで作れるけど(擬似gosubとして)」、複雑なコーディングになるのを、
手続き実行(gosub)で記述すれば「わかりやすい」「管理しやすい」となるだけではないでしょうか?

1.エラーが出れば、その手続き内だけのトレースで確認できる
2.同じ処理をする場合には、重複して記述することなく、同じ処理に飛ばせる。
また、他の一括処理に使いまわしできる(私はこれを多用しています)

汎用的に手続きを作成すれば、それは単なる「部品」となりますので、他の一括処理でも、
何も気にすることなく、すなわち、変更なく使えます。
もちろん、置く場所も関係なくなります。
手続き実行で飛ばせば、エラーが出ない限り、きちんと次の行まで戻ってきますので。
ブーメランみたいなものですかね。

分岐は・・・・凧? 糸が切れれば はいそれまで〜〜


ケースも同じです。

ケースを条件コマンドで記述すれば

条件(&A=1) 手続き実行 作業1
条件(&A=2) 手続き実行 作業2
・・・・・・・

と羅列されますが、ケースでこれを記述すると、「処理の場合分けが理解しやすい」
となるのではないでしょうか?

ようは、自分で(あるいは他人も)管理しやすいとかコントロールしやすい手法として、
構造化プログラミングが求められるのだと思います。
極論として、「正常に動けば、記述の方法はどうでも良い」ということですかね。
(とはいえ、管理のことを考えれば・・・・お〜〜大変)

ようは、考えかたというか、とらえ方の違いというか。

もう少し、気楽にとらえてみませんか?


13994 Re:度々ありがとうございます。 masa 2001/11/15-13:08
記事番号13991へのコメント
pokoponさん こんにちは。


皆様の解答を何度も読み返し理解できました。
これからは使い分けが出来ます。ありがとう御座いました。


13998 Re:もっと気楽に考えてはどうでしょう うにん 2001/11/15-14:26
記事番号13991へのコメント
pokoponさん


>ケースを条件コマンドで記述すれば
>
>条件(&A=1) 手続き実行 作業1
>条件(&A=2) 手続き実行 作業2
>・・・・・・・
>
>と羅列されますが、ケースでこれを記述すると、「処理の場合分けが理解しやすい」
>となるのではないでしょうか?

これに相当するケースは、

ケース開始
 ケース(&A=1)
  手続き実行 作業1
ケース終了
ケース開始
 ケース(&A=2)
  手続き実行 作業2
ケース終了

で、

ケース開始
 ケース(&A=1)
  手続き実行 作業1
 ケース(&A=2)
  手続き実行 作業2
ケース終了

のような場合は
条件(&A=1) 分岐 名札1
条件(&A=2) 分岐 名札2
名札 名札3

として、別の場所に
名札 名札1
手続き実行 作業1
分岐 名札3
名札 名札1
手続き実行 作業2
分岐 名札3
としないと「作業1」で&Aの値が変わった場合にまずいことになります。

条件コマンドとケースコマンドの根本的な違いは、ケースでは1つの条件について複数のコマンドを実行できるということです。

13999 Re:早速ありがとう御座いました。 masa 2001/11/15-16:15
記事番号13998へのコメント
うにんさん こんにちは。
具体的な記述を頂きありがとう御座います。
ちょっとまとめてみました。

&A=が、1か2か3しかない時

条件(&A=1) 手続き実行 作業1
条件(&A=2) 手続き実行 作業2
条件(&A=3) 手続き実行 作業3
名札 名札4
・・・・・・・
条件(&A=1) 分岐 名札1
条件(&A=2) 分岐 名札2
条件(&A=3) 分岐 名札3
名札 名札4
・・・・・・・
ケース開始
 ケース(&A=1)手続き実行 作業1
 ケース(&A=2)手続き実行 作業2
 ケース(&A=3)手続き実行 作業3
ケース終了
名札 名札4

いずれの場合も&A=1だったら1の行の処理で、それに対する作業1の処理が必要で、
2や3は条件に合わないので処理されなくていいので「名札 名札4」に行けば同じかなと初心者的には思えていたのです。

いろいろ教えて頂いてわかった事は
手続き実行は同じ処理がある時、その部分だけ別に作って、そこに飛ばして処理させて他でも再利用させれる。
分岐はそれだけで終る時。
ケースはいくつかある場合に使用するという使い分けをしようと思っています。

ありがとう御座いました。


14000 Re:だから、もっと気楽に考えては? pokopon 2001/11/15-19:14
記事番号13998へのコメント
うにんさん こんにちは

>としないと「作業1」で&Aの値が変わった場合にまずいことになります。
>条件コマンドとケースコマンドの根本的な違いは、ケースでは1つの条件について複数のコマ
>ンドを実行できるということです。

こちらが出した例は「あくまで例」でありまして、細かいことを言えば、うにんさんのおっしゃる記述に相当しますね。
例が悪かったようです。

伝えたかったことは、別のところにありまして、「ケースコマンドを忠実に条件コマンドで記述すると・・・」ということではなく、
ケースコマンドは条件によって場合分けができるということでした。
複数行コマンドを書けるかどうかとかではなく、イメージ的に「条件によって作業を振り分けられる」
ということを伝えたかった訳です。

ですので、もう少し、気軽に考えましょうよ。

14001 Re:度々ありがとうございます。 masa 2001/11/15-20:14
記事番号14000へのコメント
pokoponさん 今晩は。何度もありがとう御座います。


>ケースコマンドは条件によって場合分けができるということでした。
>イメージ的に「条件によって作業を振り分けられる」
>ということを伝えたかった訳です。
>
>ですので、もう少し、気軽に考えましょうよ。
>

「ケースコマンドは条件によって作業を振り分けられる」
はい。イメージは解りました。
ありがとう御座いました。

戻る