1read 100read
2011年10月1期プログラムbreak文の是非について TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
こんな俺がプログラミング始めたいんだが
くだらないアルゴリズムを考えるスレ
俺がプログラミング始めるぞ
eachかわいいよeach


break文の是非について


1 :09/06/22 〜 最終レス :11/11/20
短期大学校にてプログラミングを学んでいるものです。
私の学校ではbreak文の使用が厳禁とされています(教師の個人的な規制だが)
また、メインループで0を返してループを抜け出すことも禁止されています(メインループの最後以外で)
このようにbreak文とは一般的には使用してはいけないもの、使用は控えるべきもの。と認識してもよろしいのでしょうか?

2 :
一定レベル以上の人では、そういうのはすごい少数派。
あと、広がりのない話題でスレを立てるのはマナー違反な。

3 :
>>2
スレ立てすいませんでした・・・
レスありがとうございます。

4 :
>>1
世の中というのは不条理な物で、意味が無くても従わないといけない事もあるのです。
コーディング規約としては意味は無いけど、
・単位が欲しいなら従うしか無いでしょ
・給料が欲しいなら従うしか無いでしょ
・コミットして欲しいなら従うしか無いでしょ
みたいなね。
break がダメなら代わりに goto を書きまくったら良いんじゃね。

5 :
>>1
あとで、ちゃんとした専門機関でもう一度勉強し直すことをお薦めします。
単位を取る以外のことは考えず、すべて受け流すように。

6 :
>>4
単位のためには従うしかないないですね・・・

7 :
>>5
今は単位を取ることだけに集中したいと思います。
>>6
ないない・・・

8 :
>>1
それを提唱したのはダイクストラですが、そのことに関しては教えてもらいましたか?
まだであれば、ダイクストラと構造化プログラミングについてググってみましょう。
一般的には、breakも関数の途中抜けも多用され、そしてそれは悪いことではありませんが、
悪い用法・文脈で使われてしまうこともあります。
そのような癖を付けさせないために、学習期間中はダイクストラの教えを厳守させるのも
一つの方法です。
breakを使いたくなったり、関数を途中抜けしたくなったり、インデントが深くなったりしたときは、
まず関数全体の構造をよりよくできないか考えましょう。
あるいは、大きな関数やインデントが深い関数は、関数分割やリファクタリングを考えましょう。
そのようなことを考えさせるために、ダイクストラの教えを強要するのではないかと思います。

9 :
ダイクストラが言っていたのは break ではなくて goto じゃないかな。
switch の中で break を使えない状況なんて、ちょっと理解出来ませんよね。
わざわざ無意味で不必要な制限を加えて、おかしな癖が付いたら逆効果です。

10 :
switchなんていらないだろif elseifで十分

11 :
構造化スキーで途中return禁止ってのはたまに出会うけど、break禁止ってのは珍しいな。
goto使いたくないっていうことで
do{...}while(0);
をbreakで抜ける技とか使うくらいなのに。

12 :
breakもgotoと同じだろ

13 :
continueも禁止ですな。
gotoと同じだし。

14 :
>>9
switchの中のbreakじゃなくて、ループ脱出のためのbreakの話でしょ。

15 :
マゾプログラミング講座では、現在 break, continue, goto, return が禁止されています。
switch の使用も意味をなさないので推奨されません。制限はこれからも増える予定です。

16 :
スマソ。規約は正確に書かないとな。
× return が禁止
○ 複数 return が禁止

17 :
スレ立てるまでもない質問はここで 97刷
http://pc12.2ch.net/test/read.cgi/tech/1240877154/

18 :
初心者には禁止するくらいでいい

19 :
初心者上級者関係ないです。

20 :
break禁止は大きな過ち
むしろwhileとbreak以外の全ての制御構文を禁止するべき
ifとかelseとかforとか存在自体が無駄

21 :
こんな30年前に終わった話題をいまさら蒸し返さなくてもいいよ

22 :
このスレッドは天才pンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
                  京都大学霊長類研究所

23 :
call/cc 使おうぜ!

24 :
>>1
ところでプログラミング言語は何?

25 :
学校の先生が禁止するのは、
必要もないところでむやみに使うやつがいるからだろう。
生半可な知識だと、とにかく動けばいいやってんで、
めちゃめちゃな使い方するやつがいるからね。
現実には、適切なところで、適切に使えばいいんだよ。
他人がそのプログラムを見たときに、
そのほうが分かりやすいかどうかが目安だ。

26 :
禁止すれば何かが解決すると思うのもなんだかなあ…

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

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

29 :
いくらなんでも無内容すぎる

30 :
breakの代わりに、goto文を多用すればいいだけwwwwww

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

32 :
goto文が悪いわけじゃない。
プログラムのコーディングができても設計ができない奴に問題がある。

33 :
C#のルールブックって本は break禁止だったな。
理由は分かりにくいってコトだったが、 サンプルどうみても
breakを使わないでかいたリストの方が分かりにくかったが。

34 :
>>26
いや、解決するでしょ

35 :
>>28
そういう理由なら、教えないってだけで、使うのは禁止しなくてもいい。
むしろ教えていない部分でも、自分で勉強して使う生徒は評価するくらいでなくては。

36 :
所詮、体育会系単細胞教師ってことだw

37 :
>>34
それは解決してる気になってるだけだよ。

38 :
>>37
安易にbreak, continue, returnする癖が付く問題は回避できるでしょ

39 :
break,continueを絶対使わない、returnは関数の最後に一個だけって
癖がつくのとどっちが有害だろうか。

40 :
>>38
安易に禁止する事で、breakの使い方を知らない子供たちを量産するんですね

41 :
>>39
使い所を知ってるからそういいたいんだろうけど、相手は初心者だよ?

42 :
>>39
適切なbreak, continue, returnの使用は、そのうち学習すればいい。
適切じゃない使い方をさせないための制限でしょ。
break, continue, return, gotoを最初から無制限に使いまくれとでも言いたいの?

43 :
古き良きPascalやLispを使わせれば問題ないんだよ。

44 :
よくある、配列の要素をfor文で巡回する様な処理の場合も、
必要な値が見つかってもbreakしないで最後の要素まで
延々と検査するんだろうな。
それは悪い癖じゃないのかな?

45 :
使いながらおぼえればいいだろ。
breakとかcontinueって、そんなに危険物なのか。
たいがいに入門書にはbreakやら、省略せずに教えてるけど、
そういう教科書で勉強した初心者は、すごいことになりそうだな。

46 :
breakが無い言語ではプログラミング出来ないんだろうなぁ

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

48 :
>>47
break禁止って言われるわけだから、一年後に存在に気づくなんてあり得ないだろ馬鹿

49 :
>>48
名前を知ってるのと、適切な使い方を知ってるのは雲泥の差だろ…

50 :
break禁止令を不自然だと思わない人間がム板にいる事が驚きだわあ

51 :
スポーツとかと違って、プログラミングの癖なんていくらでも修正きくんで、
どうでもいいっていえばどうでもいいけどな。
初心者のころにbreakは一般的でないって教えられて、以後、それを信じ込んで
考えを変えられないとかってのは、癖どうこう以前にダメだしな。
(じっさいそういうヤツ一杯いるけど)
こういう、怪しいスタイルを教えるやつって一杯いるんで、自分で自衛するか
ない。

52 :
出来る事ならば、学校の先生はそういう怪しいスタイルから
生徒を守る側に立って欲しいよな

53 :
こういうのは、教科書の問題も大きい。
世の中の本の中には、とりあえず、breakやgotoの文法だけ
教えればいいだろうってんで、非現実的なサンプルプログラムを
載せているものがある。極端な例だと、
for (i = 0; i < 10; i++) {
...
if (i == 7) goto label;
...
}
label:
なんてのを見たことがある。
こいうのは、break, continue, gotoだけじゃなくて、
switch, do-while もそうなんだけど、短くてしかもちゃんと
必然性のあるサンプルプログラムって作るのって、結構難しいんだよね。

54 :
例文はこういうので良いんじゃないの。
http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide77.html
ちょっとググってみたけど、確かにあまり意味無いなあと思う例文も多いですね。

55 :
>>54
普通は、配列を習うのは制御構造の後。

56 :
>>18-
>>17 が見えないか?
見えてるけど、語りたいのか?莫迦のくせに。

57 :
>>55
講師が↓このどちらかを言えば問題無いでしょ。
『breakについては配列を勉強してから再度詳しく取り上げます』
『配列については後で詳しく説明します』

58 :
breakとかcontinueとか、時間がないから省略するってのは、まだしも
難しいとかクセがつくから教えないってのはありえない。

59 :
この教師、フラグをガンガン使いまくってでも1個のbreakを避けることの方が重要なんだろうな。
まあ実社会でそういう害毒を撒き散らさないんなら、好きにやってていいよw

60 :
breakって、関数型言語でループ(もどき)を回した時の
ガードに相当するんじゃないの?

61 :
>>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 :
>>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 :
すまん.
途中 return も禁止だったね.

64 :
しかも, 呼び出し
targetIndex= searchTargetIndex(array, target);
だ.

65 :
なんで for? while 使えばいいじゃん

66 :
done = 0;
while (!done) {
}

67 :
そして余計なフラグが一個増えた

68 :
break禁止よりwhileの使い方をちゃんと教えた方が有益だな、と思いました

69 :
break禁止ってパフォーマンスに関わってくる気がする

70 :
課題の評価方法として、例えばbreakは減点1、gotoは減点50、
フラグ目的の変数は減点2、などとして評価するのはどうだろう。

71 :
使わなかったら点数が倍とか

72 :
なんでbreakやフラグで減点なんだ。

73 :
減点最小に最適化しろってことだろ。

74 :
goto/break憎しでそれを避けるコードやそういうコードを書く奴って糞ばっかりなんだけど。
経験的に言って。

75 :
>>74
そういうコードは大きく減点するようにすればいい。

76 :
>>65
for-breakを使うことを知って、それで思考停止する馬鹿が多いから、break禁止にも一理あると言うことですな。

77 :
一理もないような気がする。

78 :
無駄な思考は要らんだろ
他に頭回せよ馬鹿

79 :
気のせい

80 :
>>78
君プログラマに向いてないよ

81 :
>>80
お前が向いてない
金にならない

82 :
>>80
悔しいね〜

83 :
whileやdoを使うことを一ミリも考慮しない馬鹿

84 :
まだ頑張ってるのかw
break禁止が非難されると困るのはどんな人なんだろうね。

85 :
ifとgotoさえあれば他は要らない

86 :
>>85
それで各行に番号みたいのがついてれば、ラベル名考える手間がなくて便利じゃね

87 :
>>84
いやいや、誰かがbreakを禁止すると困る人が多いようだよ

88 :
>>84
別に困らないけど、breakを禁止にすることによって得られるメリットがあることを納得しない
人がさんざん反論するから相手してるだけ。

89 :
もうちょっとましな暇つぶししようぜ。
いくら時間をつぎ込んでも2chはお前を救ってはくれないぞ。

90 :
生産性の無いことするの好きなんだね

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

92 :
あり得ない話だが、仮にbreak禁止論が一般に広まったとしたら、
一番困るのは、>>1が行ってる短大の講師だろう。

93 :
break禁止論が一般に広まったとしたら、gotoで書くだけのような気がする。
goto駄目なら、例外とか、関数リターンとか、フラグ…
はっきりいって余計に悪い!

94 :
breakみたいなよく使われる機能は授業の中できちんと教えるべきですよね。
もしbreakの使い方で問題が起こるなら(勿論そんな事は稀ですが)、講義の中で
フォローしてあげるのが先生の仕事ではないでしょうか。
それがそんなに難しい話だとは思えません。

95 :
>>88
break を教えて貰えない事による、生徒の側のメリットって何よ?

96 :
文系短大のプログラミング入門の授業だったら、
break なんてちゃんと教えてる時間はなさそう。
禁止する理由にはならないけど。
というか、Cなんて教えるな、という話になる。

97 :
毎回規約が変わるのなら勉強としては良いかも知れない
今回はbreakやcontinueや途中return禁止、次回はelse禁止とか

98 :
勉強にはなるかも知れんが
仕事にならんなw

99 :
Java みたいに goto 禁止とか、
関数型言語みたいに破壊的代入禁止とか、
JavaScript みたいに sleep 禁止とか、
>>1 の話は全然レベルが違うか…

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
こんな俺がプログラミング始めたいんだが
くだらないアルゴリズムを考えるスレ
俺がプログラミング始めるぞ
eachかわいいよeach