break文の是非についてat TECH
break文の是非について - 暇つぶし2ch1:デフォルトの名無しさん
09/06/22 17:13:20
短期大学校にてプログラミングを学んでいるものです。
私の学校ではbreak文の使用が厳禁とされています(教師の個人的な規制だが)
また、メインループで0を返してループを抜け出すことも禁止されています(メインループの最後以外で)

このようにbreak文とは一般的には使用してはいけないもの、使用は控えるべきもの。と認識してもよろしいのでしょうか?


2:デフォルトの名無しさん
09/06/22 17:19:23
一定レベル以上の人では、そういうのはすごい少数派。

あと、広がりのない話題でスレを立てるのはマナー違反な。

3:デフォルトの名無しさん
09/06/22 17:26:29
>>2
スレ立てすいませんでした・・・
レスありがとうございます。

4:デフォルトの名無しさん
09/06/22 17:26:29
>>1
世の中というのは不条理な物で、意味が無くても従わないといけない事もあるのです。

コーディング規約としては意味は無いけど、

・単位が欲しいなら従うしか無いでしょ
・給料が欲しいなら従うしか無いでしょ
・コミットして欲しいなら従うしか無いでしょ

みたいなね。

break がダメなら代わりに goto を書きまくったら良いんじゃね。

5:デフォルトの名無しさん
09/06/22 17:29:33
>>1
あとで、ちゃんとした専門機関でもう一度勉強し直すことをお薦めします。
単位を取る以外のことは考えず、すべて受け流すように。

6:デフォルトの名無しさん
09/06/22 17:29:34
>>4
単位のためには従うしかないないですね・・・

7:デフォルトの名無しさん
09/06/22 17:34:10
>>5
今は単位を取ることだけに集中したいと思います。

>>6
ないない・・・

8:デフォルトの名無しさん
09/06/22 17:41:42
>>1
それを提唱したのはダイクストラですが、そのことに関しては教えてもらいましたか?
まだであれば、ダイクストラと構造化プログラミングについてググってみましょう。

一般的には、breakも関数の途中抜けも多用され、そしてそれは悪いことではありませんが、
悪い用法・文脈で使われてしまうこともあります。
そのような癖を付けさせないために、学習期間中はダイクストラの教えを厳守させるのも
一つの方法です。

breakを使いたくなったり、関数を途中抜けしたくなったり、インデントが深くなったりしたときは、
まず関数全体の構造をよりよくできないか考えましょう。
あるいは、大きな関数やインデントが深い関数は、関数分割やリファクタリングを考えましょう。
そのようなことを考えさせるために、ダイクストラの教えを強要するのではないかと思います。

9:デフォルトの名無しさん
09/06/22 17:52:58
ダイクストラが言っていたのは break ではなくて goto じゃないかな。
switch の中で break を使えない状況なんて、ちょっと理解出来ませんよね。

わざわざ無意味で不必要な制限を加えて、おかしな癖が付いたら逆効果です。

10:デフォルトの名無しさん
09/06/22 17:57:35
switchなんていらないだろif elseifで十分

11:デフォルトの名無しさん
09/06/22 18:07:44
構造化スキーで途中return禁止ってのはたまに出会うけど、break禁止ってのは珍しいな。
goto使いたくないっていうことで
do{...}while(0);
をbreakで抜ける技とか使うくらいなのに。

12:デフォルトの名無しさん
09/06/22 18:18:26
breakもgotoと同じだろ

13:デフォルトの名無しさん
09/06/22 18:20:03
continueも禁止ですな。
gotoと同じだし。

14:デフォルトの名無しさん
09/06/22 18:20:58
>>9
switchの中のbreakじゃなくて、ループ脱出のためのbreakの話でしょ。

15:デフォルトの名無しさん
09/06/22 18:26:45
マゾプログラミング講座では、現在 break, continue, goto, return が禁止されています。
switch の使用も意味をなさないので推奨されません。制限はこれからも増える予定です。

16:デフォルトの名無しさん
09/06/22 18:30:06
スマソ。規約は正確に書かないとな。

× return が禁止
○ 複数 return が禁止

17:デフォルトの名無しさん
09/06/22 19:43:17
スレ立てるまでもない質問はここで 97刷
スレリンク(tech板)

18:デフォルトの名無しさん
09/06/23 10:37:12
初心者には禁止するくらいでいい

19:デフォルトの名無しさん
09/06/23 10:51:07
初心者上級者関係ないです。

20:デフォルトの名無しさん
09/06/23 10:58:33
break禁止は大きな過ち
むしろwhileとbreak以外の全ての制御構文を禁止するべき
ifとかelseとかforとか存在自体が無駄

21:デフォルトの名無しさん
09/06/23 11:03:20
こんな30年前に終わった話題をいまさら蒸し返さなくてもいいよ

22:デフォルトの名無しさん
09/06/23 14:16:40
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所

23:デフォルトの名無しさん
09/06/23 14:48:59
call/cc 使おうぜ!

24:デフォルトの名無しさん
09/06/23 23:25:52
>>1
ところでプログラミング言語は何?

25:デフォルトの名無しさん
09/06/24 08:22:01
学校の先生が禁止するのは、
必要もないところでむやみに使うやつがいるからだろう。
生半可な知識だと、とにかく動けばいいやってんで、
めちゃめちゃな使い方するやつがいるからね。

現実には、適切なところで、適切に使えばいいんだよ。
他人がそのプログラムを見たときに、
そのほうが分かりやすいかどうかが目安だ。

26:デフォルトの名無しさん
09/06/24 08:45:53
禁止すれば何かが解決すると思うのもなんだかなあ…

27:デフォルトの名無しさん
09/06/24 09:13:18
コーディングスタイルの話題で、そんな書き方ないだろうって言われると、
「いや、これは初心者(ヘタクソ)に有効な書き方なんだ」っていいわけ
するやつがいるけど、コーディングスタイルに上級者むけとかヘタクソむけ
とかないから。

28:デフォルトの名無しさん
09/06/24 10:14:05
この場合は、へたくそに「有効」なんじゃなくて、
へたくそには「使わせない」ってことだから、ちょっと違う。

学校の先生は、数十人以上を同時に相手にしていて、
短大なら来プログラミングをする職業に就く人も少なそう。
いちいちきめ細かな指導をしていられる状況じゃない。
単に、一般教養の一種としてプログラミングの入門を
教えているなら、使わせないという発想もありだと思う。

29:デフォルトの名無しさん
09/06/24 10:14:51
いくらなんでも無内容すぎる

30:デフォルトの名無しさん
09/06/24 10:16:06
breakの代わりに、goto文を多用すればいいだけwwwwww


31:デフォルトの名無しさん
09/06/24 10:44:00
正直言って、将来プログラマにならない
文系素人にコンピュータの仕組みを教えるなら、
BASICでいいと思うよ。もちろん、GOTO使いまくりで。
関数とかサブルーチンとか教えても無理だから。

32:デフォルトの名無しさん
09/06/24 10:58:06
goto文が悪いわけじゃない。

プログラムのコーディングができても設計ができない奴に問題がある。


33:デフォルトの名無しさん
09/06/24 11:50:46
C#のルールブックって本は break禁止だったな。
理由は分かりにくいってコトだったが、 サンプルどうみても
breakを使わないでかいたリストの方が分かりにくかったが。

34:デフォルトの名無しさん
09/06/24 11:55:48
>>26
いや、解決するでしょ

35:デフォルトの名無しさん
09/06/24 12:03:28
>>28
そういう理由なら、教えないってだけで、使うのは禁止しなくてもいい。
むしろ教えていない部分でも、自分で勉強して使う生徒は評価するくらいでなくては。

36:デフォルトの名無しさん
09/06/24 13:10:20
所詮、体育会系単細胞教師ってことだw

37:デフォルトの名無しさん
09/06/24 14:40:44
>>34
それは解決してる気になってるだけだよ。

38:デフォルトの名無しさん
09/06/24 15:00:39
>>37
安易にbreak, continue, returnする癖が付く問題は回避できるでしょ

39:デフォルトの名無しさん
09/06/24 15:27:25
break,continueを絶対使わない、returnは関数の最後に一個だけって
癖がつくのとどっちが有害だろうか。


40:デフォルトの名無しさん
09/06/24 15:27:50
>>38
安易に禁止する事で、breakの使い方を知らない子供たちを量産するんですね

41:デフォルトの名無しさん
09/06/24 15:45:33
>>39
使い所を知ってるからそういいたいんだろうけど、相手は初心者だよ?

42:デフォルトの名無しさん
09/06/24 15:50:20
>>39
適切なbreak, continue, returnの使用は、そのうち学習すればいい。
適切じゃない使い方をさせないための制限でしょ。
break, continue, return, gotoを最初から無制限に使いまくれとでも言いたいの?

43:デフォルトの名無しさん
09/06/24 15:53:02
古き良きPascalやLispを使わせれば問題ないんだよ。

44:デフォルトの名無しさん
09/06/24 15:54:04
よくある、配列の要素をfor文で巡回する様な処理の場合も、
必要な値が見つかってもbreakしないで最後の要素まで
延々と検査するんだろうな。

それは悪い癖じゃないのかな?

45:デフォルトの名無しさん
09/06/24 15:56:23
使いながらおぼえればいいだろ。
breakとかcontinueって、そんなに危険物なのか。
たいがいに入門書にはbreakやら、省略せずに教えてるけど、
そういう教科書で勉強した初心者は、すごいことになりそうだな。

46:デフォルトの名無しさん
09/06/24 15:57:46
breakが無い言語ではプログラミング出来ないんだろうなぁ

47:デフォルトの名無しさん
09/06/24 15:58:46
>>39
一年間の講義を終えた後でbreakの存在を知った生徒はどう思うんだろうね。
独自にbreakの使い方を勉強して、結局は悪い癖を身に付けちゃう子も居るだろうね。
授業で教えてくれなかったし…

48:デフォルトの名無しさん
09/06/24 16:01:01
>>47
break禁止って言われるわけだから、一年後に存在に気づくなんてあり得ないだろ馬鹿


49:デフォルトの名無しさん
09/06/24 16:02:25
>>48
名前を知ってるのと、適切な使い方を知ってるのは雲泥の差だろ…

50:デフォルトの名無しさん
09/06/24 16:04:22
break禁止令を不自然だと思わない人間がム板にいる事が驚きだわあ

51:デフォルトの名無しさん
09/06/24 16:09:36
スポーツとかと違って、プログラミングの癖なんていくらでも修正きくんで、
どうでもいいっていえばどうでもいいけどな。
初心者のころにbreakは一般的でないって教えられて、以後、それを信じ込んで
考えを変えられないとかってのは、癖どうこう以前にダメだしな。
(じっさいそういうヤツ一杯いるけど)

こういう、怪しいスタイルを教えるやつって一杯いるんで、自分で自衛するか
ない。

52:デフォルトの名無しさん
09/06/24 16:14:52
出来る事ならば、学校の先生はそういう怪しいスタイルから
生徒を守る側に立って欲しいよな

53:デフォルトの名無しさん
09/06/24 18:33:26
こういうのは、教科書の問題も大きい。
世の中の本の中には、とりあえず、breakやgotoの文法だけ
教えればいいだろうってんで、非現実的なサンプルプログラムを
載せているものがある。極端な例だと、

for (i = 0; i < 10; i++) {
...
if (i == 7) goto label;
...
}
label:

なんてのを見たことがある。
こいうのは、break, continue, gotoだけじゃなくて、
switch, do-while もそうなんだけど、短くてしかもちゃんと
必然性のあるサンプルプログラムって作るのって、結構難しいんだよね。

54:デフォルトの名無しさん
09/06/24 18:44:43
例文はこういうので良いんじゃないの。

URLリンク(okuyama.mt.tama.hosei.ac.jp)

ちょっとググってみたけど、確かにあまり意味無いなあと思う例文も多いですね。

55:デフォルトの名無しさん
09/06/24 18:54:39
>>54
普通は、配列を習うのは制御構造の後。

56:デフォルトの名無しさん
09/06/24 20:18:26
>>18-
>>17 が見えないか?
見えてるけど、語りたいのか?莫迦のくせに。

57:デフォルトの名無しさん
09/06/24 20:40:04
>>55
講師が↓このどちらかを言えば問題無いでしょ。

『breakについては配列を勉強してから再度詳しく取り上げます』
『配列については後で詳しく説明します』

58:デフォルトの名無しさん
09/06/24 22:06:33
breakとかcontinueとか、時間がないから省略するってのは、まだしも
難しいとかクセがつくから教えないってのはありえない。

59:デフォルトの名無しさん
09/06/24 22:53:21
この教師、フラグをガンガン使いまくってでも1個のbreakを避けることの方が重要なんだろうな。
まあ実社会でそういう害毒を撒き散らさないんなら、好きにやってていいよw

60:デフォルトの名無しさん
09/06/24 23:27:42
breakって、関数型言語でループ(もどき)を回した時の
ガードに相当するんじゃないの?

61:デフォルトの名無しさん
09/06/25 11:15:06
>>44
先生!break使わずに早や抜け出来ました!

int i, targetIndex = INT_MAX;
int count = countOfArray(array);
for(i = 0; i < count; i++) {
if(a[i] == target && targetIndex != INT_MAX) {
targetIndex = i;
count = i;
}
}


62:デフォルトの名無しさん
09/06/25 15:07:43
>>61 break 使わないと 可読性がますます下がるな...
↓も break 使ってないがマダマシ?

int searchTargetIndex(int* array, int target)
{
 int i;
 int count = countOfArray(array);
 for (i = 0; i < count; i++) {
  if (array[i] == target) {
   return i;
  }
 }
 return INT_MAX;
}

targetIndex = searchTargetIndex();



63:62
09/06/25 15:09:08
すまん.
途中 return も禁止だったね.


64:62
09/06/25 15:10:13
しかも, 呼び出し
targetIndex= searchTargetIndex(array, target);
だ.


65:デフォルトの名無しさん
09/06/25 21:04:33
なんで for? while 使えばいいじゃん

66:デフォルトの名無しさん
09/06/25 21:09:29
done = 0;
while (!done) {

}

67:デフォルトの名無しさん
09/06/25 21:13:40
そして余計なフラグが一個増えた

68:デフォルトの名無しさん
09/06/25 23:17:41
break禁止よりwhileの使い方をちゃんと教えた方が有益だな、と思いました

69:デフォルトの名無しさん
09/06/26 03:18:36
break禁止ってパフォーマンスに関わってくる気がする

70:デフォルトの名無しさん
09/06/26 09:36:41
課題の評価方法として、例えばbreakは減点1、gotoは減点50、
フラグ目的の変数は減点2、などとして評価するのはどうだろう。

71:デフォルトの名無しさん
09/06/26 10:10:37
使わなかったら点数が倍とか

72:デフォルトの名無しさん
09/06/26 10:28:58
なんでbreakやフラグで減点なんだ。

73:デフォルトの名無しさん
09/06/26 10:51:47
減点最小に最適化しろってことだろ。

74:デフォルトの名無しさん
09/06/26 10:54:20
goto/break憎しでそれを避けるコードやそういうコードを書く奴って糞ばっかりなんだけど。
経験的に言って。

75:デフォルトの名無しさん
09/06/26 11:01:28
>>74
そういうコードは大きく減点するようにすればいい。

76:デフォルトの名無しさん
09/06/26 12:46:38
>>65
for-breakを使うことを知って、それで思考停止する馬鹿が多いから、break禁止にも一理あると言うことですな。

77:デフォルトの名無しさん
09/06/26 12:56:15
一理もないような気がする。

78:デフォルトの名無しさん
09/06/26 14:46:39
無駄な思考は要らんだろ
他に頭回せよ馬鹿

79:デフォルトの名無しさん
09/06/26 14:46:42
気のせい

80:デフォルトの名無しさん
09/06/26 14:47:35
>>78
君プログラマに向いてないよ

81:デフォルトの名無しさん
09/06/26 15:02:44
>>80
お前が向いてない
金にならない

82:デフォルトの名無しさん
09/06/26 15:51:59
>>80
悔しいね~

83:デフォルトの名無しさん
09/06/26 15:52:54
whileやdoを使うことを一ミリも考慮しない馬鹿

84:デフォルトの名無しさん
09/06/26 16:39:04
まだ頑張ってるのかw
break禁止が非難されると困るのはどんな人なんだろうね。

85:デフォルトの名無しさん
09/06/26 16:47:59
ifとgotoさえあれば他は要らない

86:デフォルトの名無しさん
09/06/26 16:51:33
>>85
それで各行に番号みたいのがついてれば、ラベル名考える手間がなくて便利じゃね

87:デフォルトの名無しさん
09/06/26 17:36:05
>>84
いやいや、誰かがbreakを禁止すると困る人が多いようだよ

88:デフォルトの名無しさん
09/06/26 17:41:14
>>84
別に困らないけど、breakを禁止にすることによって得られるメリットがあることを納得しない
人がさんざん反論するから相手してるだけ。

89:デフォルトの名無しさん
09/06/26 17:44:45
もうちょっとましな暇つぶししようぜ。
いくら時間をつぎ込んでも2chはお前を救ってはくれないぞ。

90:デフォルトの名無しさん
09/06/26 17:50:23
生産性の無いことするの好きなんだね

91:デフォルトの名無しさん
09/06/26 18:41:26
>>87
そりゃ困るだろ。
breakの使い方も知らない人間とコーディングするのは誰だって嫌だぜ。
歪んだ知識を持った奴がおかしな理屈を振りかざすのも面倒だし。

92:デフォルトの名無しさん
09/06/26 19:02:35
あり得ない話だが、仮にbreak禁止論が一般に広まったとしたら、
一番困るのは、>>1が行ってる短大の講師だろう。

93:デフォルトの名無しさん
09/06/26 19:20:15
break禁止論が一般に広まったとしたら、gotoで書くだけのような気がする。
goto駄目なら、例外とか、関数リターンとか、フラグ…
はっきりいって余計に悪い!

94:デフォルトの名無しさん
09/06/26 20:02:36
breakみたいなよく使われる機能は授業の中できちんと教えるべきですよね。
もしbreakの使い方で問題が起こるなら(勿論そんな事は稀ですが)、講義の中で
フォローしてあげるのが先生の仕事ではないでしょうか。

それがそんなに難しい話だとは思えません。

95:デフォルトの名無しさん
09/06/26 20:04:38
>>88
break を教えて貰えない事による、生徒の側のメリットって何よ?

96:デフォルトの名無しさん
09/06/26 20:48:26
文系短大のプログラミング入門の授業だったら、
break なんてちゃんと教えてる時間はなさそう。
禁止する理由にはならないけど。
というか、Cなんて教えるな、という話になる。

97:デフォルトの名無しさん
09/07/01 08:57:06
毎回規約が変わるのなら勉強としては良いかも知れない
今回はbreakやcontinueや途中return禁止、次回はelse禁止とか

98:デフォルトの名無しさん
09/07/01 13:19:03
勉強にはなるかも知れんが
仕事にならんなw

99:デフォルトの名無しさん
09/07/01 20:13:27
Java みたいに goto 禁止とか、
関数型言語みたいに破壊的代入禁止とか、
JavaScript みたいに sleep 禁止とか、

>>1 の話は全然レベルが違うか…

100:デフォルトの名無しさん
09/07/02 15:21:14
goto のかわりに例外投げれば良いじゃない。
break のかわりに例外投げれば良いじゃない。 throw ELoopBroken みたいな。
途中 return のかわりに例外投げて関数の最後で補足すれば良いじゃない。throw EReturn(戻り値) みたいな。

101:デフォルトの名無しさん
09/07/02 17:42:23
それ C じゃ通用しないお

102:デフォルトの名無しさん
09/07/02 17:49:03
phpだと break 2 とか break 3 って、複数ループジャンプできなかったっけ


103:デフォルトの名無しさん
09/07/02 18:47:30
もうsetjump(3)とlongjmp(3)でいいじゃない

104:デフォルトの名無しさん
09/07/02 19:47:28
Java は break や continue にラベルを指定できる

105:デフォルトの名無しさん
09/07/02 20:32:50
out:
while(1){


106:デフォルトの名無しさん
09/07/02 20:34:11
    break out;
}

ミスった

107:デフォルトの名無しさん
09/08/05 19:20:01
\\

108:デフォルトの名無しさん
09/08/05 21:13:18
>>105-106
それってどんな goto

109:デフォルトの名無しさん
09/08/06 00:24:06
しかし、大学校なんて防衛大ぐらいだと思ってたけど他にもあるのか。

110:デフォルトの名無しさん
09/08/07 14:34:25
でーこーぼーこ大学校ー
はーじーまーるよー

111:デフォルトの名無しさん
09/08/08 01:43:20
>>110
NTT西日本は大学校持ってないよ。

112:デフォルトの名無しさん
09/10/08 04:58:45
つーか、学校でプログラミング教えているようなやつなんか終わってるんだよ。
優秀な人間ならどう考えたって教員なんかよりソフトウェアエンジニアリングの方が儲かるもん。
break禁止とか現場的枝葉に拘るところからして、コンピュータサイエンスとかのアカデミズムとも無縁だろう。
プログラミング教えるってそれ自体そもそも学問じゃないので大学職員としても底辺だし。
そんなダメなやつが break禁止って生意気だろ?
おまえは、Scott Mayerより偉いのか? K&Rより偉いのか?
『何様ですか?』と2chで人格攻撃されてましたと、どうかお伝えください。



113:デフォルトの名無しさん
09/10/08 10:56:45
保守すんな阿呆

114:デフォルトの名無しさん
09/10/30 16:40:45
プログラムは単なる手段です。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch