break文の是非について
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/06/22(月) 17:13:20私の学校ではbreak文の使用が厳禁とされています(教師の個人的な規制だが)
また、メインループで0を返してループを抜け出すことも禁止されています(メインループの最後以外で)
このようにbreak文とは一般的には使用してはいけないもの、使用は控えるべきもの。と認識してもよろしいのでしょうか?
0002デフォルトの名無しさん
2009/06/22(月) 17:19:23あと、広がりのない話題でスレを立てるのはマナー違反な。
0003デフォルトの名無しさん
2009/06/22(月) 17:26:29スレ立てすいませんでした・・・
レスありがとうございます。
0004デフォルトの名無しさん
2009/06/22(月) 17:26:29世の中というのは不条理な物で、意味が無くても従わないといけない事もあるのです。
コーディング規約としては意味は無いけど、
・単位が欲しいなら従うしか無いでしょ
・給料が欲しいなら従うしか無いでしょ
・コミットして欲しいなら従うしか無いでしょ
みたいなね。
break がダメなら代わりに goto を書きまくったら良いんじゃね。
0005デフォルトの名無しさん
2009/06/22(月) 17:29:33あとで、ちゃんとした専門機関でもう一度勉強し直すことをお薦めします。
単位を取る以外のことは考えず、すべて受け流すように。
0006デフォルトの名無しさん
2009/06/22(月) 17:29:34単位のためには従うしかないないですね・・・
0007デフォルトの名無しさん
2009/06/22(月) 17:34:10今は単位を取ることだけに集中したいと思います。
>>6
ないない・・・
0008デフォルトの名無しさん
2009/06/22(月) 17:41:42それを提唱したのはダイクストラですが、そのことに関しては教えてもらいましたか?
まだであれば、ダイクストラと構造化プログラミングについてググってみましょう。
一般的には、breakも関数の途中抜けも多用され、そしてそれは悪いことではありませんが、
悪い用法・文脈で使われてしまうこともあります。
そのような癖を付けさせないために、学習期間中はダイクストラの教えを厳守させるのも
一つの方法です。
breakを使いたくなったり、関数を途中抜けしたくなったり、インデントが深くなったりしたときは、
まず関数全体の構造をよりよくできないか考えましょう。
あるいは、大きな関数やインデントが深い関数は、関数分割やリファクタリングを考えましょう。
そのようなことを考えさせるために、ダイクストラの教えを強要するのではないかと思います。
0009デフォルトの名無しさん
2009/06/22(月) 17:52:58switch の中で break を使えない状況なんて、ちょっと理解出来ませんよね。
わざわざ無意味で不必要な制限を加えて、おかしな癖が付いたら逆効果です。
0010デフォルトの名無しさん
2009/06/22(月) 17:57:350011デフォルトの名無しさん
2009/06/22(月) 18:07:44goto使いたくないっていうことで
do{...}while(0);
をbreakで抜ける技とか使うくらいなのに。
0012デフォルトの名無しさん
2009/06/22(月) 18:18:260013デフォルトの名無しさん
2009/06/22(月) 18:20:03gotoと同じだし。
0014デフォルトの名無しさん
2009/06/22(月) 18:20:58switchの中のbreakじゃなくて、ループ脱出のためのbreakの話でしょ。
0015デフォルトの名無しさん
2009/06/22(月) 18:26:45switch の使用も意味をなさないので推奨されません。制限はこれからも増える予定です。
0016デフォルトの名無しさん
2009/06/22(月) 18:30:06× return が禁止
○ 複数 return が禁止
0017デフォルトの名無しさん
2009/06/22(月) 19:43:17http://pc12.2ch.net/test/read.cgi/tech/1240877154/
0018デフォルトの名無しさん
2009/06/23(火) 10:37:120019デフォルトの名無しさん
2009/06/23(火) 10:51:070020デフォルトの名無しさん
2009/06/23(火) 10:58:33むしろwhileとbreak以外の全ての制御構文を禁止するべき
ifとかelseとかforとか存在自体が無駄
0021デフォルトの名無しさん
2009/06/23(火) 11:03:200022デフォルトの名無しさん
2009/06/23(火) 14:16:40言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0023デフォルトの名無しさん
2009/06/23(火) 14:48:590024デフォルトの名無しさん
2009/06/23(火) 23:25:52ところでプログラミング言語は何?
0025デフォルトの名無しさん
2009/06/24(水) 08:22:01必要もないところでむやみに使うやつがいるからだろう。
生半可な知識だと、とにかく動けばいいやってんで、
めちゃめちゃな使い方するやつがいるからね。
現実には、適切なところで、適切に使えばいいんだよ。
他人がそのプログラムを見たときに、
そのほうが分かりやすいかどうかが目安だ。
0026デフォルトの名無しさん
2009/06/24(水) 08:45:530027デフォルトの名無しさん
2009/06/24(水) 09:13:18「いや、これは初心者(ヘタクソ)に有効な書き方なんだ」っていいわけ
するやつがいるけど、コーディングスタイルに上級者むけとかヘタクソむけ
とかないから。
0028デフォルトの名無しさん
2009/06/24(水) 10:14:05へたくそには「使わせない」ってことだから、ちょっと違う。
学校の先生は、数十人以上を同時に相手にしていて、
短大なら来プログラミングをする職業に就く人も少なそう。
いちいちきめ細かな指導をしていられる状況じゃない。
単に、一般教養の一種としてプログラミングの入門を
教えているなら、使わせないという発想もありだと思う。
0029デフォルトの名無しさん
2009/06/24(水) 10:14:510030デフォルトの名無しさん
2009/06/24(水) 10:16:060031デフォルトの名無しさん
2009/06/24(水) 10:44:00文系素人にコンピュータの仕組みを教えるなら、
BASICでいいと思うよ。もちろん、GOTO使いまくりで。
関数とかサブルーチンとか教えても無理だから。
0032デフォルトの名無しさん
2009/06/24(水) 10:58:06プログラムのコーディングができても設計ができない奴に問題がある。
0033デフォルトの名無しさん
2009/06/24(水) 11:50:46理由は分かりにくいってコトだったが、 サンプルどうみても
breakを使わないでかいたリストの方が分かりにくかったが。
0034デフォルトの名無しさん
2009/06/24(水) 11:55:48いや、解決するでしょ
0035デフォルトの名無しさん
2009/06/24(水) 12:03:28そういう理由なら、教えないってだけで、使うのは禁止しなくてもいい。
むしろ教えていない部分でも、自分で勉強して使う生徒は評価するくらいでなくては。
0036デフォルトの名無しさん
2009/06/24(水) 13:10:200037デフォルトの名無しさん
2009/06/24(水) 14:40:44それは解決してる気になってるだけだよ。
0038デフォルトの名無しさん
2009/06/24(水) 15:00:39安易にbreak, continue, returnする癖が付く問題は回避できるでしょ
0039デフォルトの名無しさん
2009/06/24(水) 15:27:25癖がつくのとどっちが有害だろうか。
0040デフォルトの名無しさん
2009/06/24(水) 15:27:50安易に禁止する事で、breakの使い方を知らない子供たちを量産するんですね
0041デフォルトの名無しさん
2009/06/24(水) 15:45:33使い所を知ってるからそういいたいんだろうけど、相手は初心者だよ?
0042デフォルトの名無しさん
2009/06/24(水) 15:50:20適切なbreak, continue, returnの使用は、そのうち学習すればいい。
適切じゃない使い方をさせないための制限でしょ。
break, continue, return, gotoを最初から無制限に使いまくれとでも言いたいの?
0043デフォルトの名無しさん
2009/06/24(水) 15:53:020044デフォルトの名無しさん
2009/06/24(水) 15:54:04必要な値が見つかってもbreakしないで最後の要素まで
延々と検査するんだろうな。
それは悪い癖じゃないのかな?
0045デフォルトの名無しさん
2009/06/24(水) 15:56:23breakとかcontinueって、そんなに危険物なのか。
たいがいに入門書にはbreakやら、省略せずに教えてるけど、
そういう教科書で勉強した初心者は、すごいことになりそうだな。
0046デフォルトの名無しさん
2009/06/24(水) 15:57:460047デフォルトの名無しさん
2009/06/24(水) 15:58:46一年間の講義を終えた後でbreakの存在を知った生徒はどう思うんだろうね。
独自にbreakの使い方を勉強して、結局は悪い癖を身に付けちゃう子も居るだろうね。
授業で教えてくれなかったし…
0048デフォルトの名無しさん
2009/06/24(水) 16:01:01break禁止って言われるわけだから、一年後に存在に気づくなんてあり得ないだろ馬鹿
0049デフォルトの名無しさん
2009/06/24(水) 16:02:25名前を知ってるのと、適切な使い方を知ってるのは雲泥の差だろ…
0050デフォルトの名無しさん
2009/06/24(水) 16:04:220051デフォルトの名無しさん
2009/06/24(水) 16:09:36どうでもいいっていえばどうでもいいけどな。
初心者のころにbreakは一般的でないって教えられて、以後、それを信じ込んで
考えを変えられないとかってのは、癖どうこう以前にダメだしな。
(じっさいそういうヤツ一杯いるけど)
こういう、怪しいスタイルを教えるやつって一杯いるんで、自分で自衛するか
ない。
0052デフォルトの名無しさん
2009/06/24(水) 16:14:52生徒を守る側に立って欲しいよな
0053デフォルトの名無しさん
2009/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 もそうなんだけど、短くてしかもちゃんと
必然性のあるサンプルプログラムって作るのって、結構難しいんだよね。
0054デフォルトの名無しさん
2009/06/24(水) 18:44:43http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide77.html
ちょっとググってみたけど、確かにあまり意味無いなあと思う例文も多いですね。
0055デフォルトの名無しさん
2009/06/24(水) 18:54:39普通は、配列を習うのは制御構造の後。
0056デフォルトの名無しさん
2009/06/24(水) 20:18:26>>17 が見えないか?
見えてるけど、語りたいのか?莫迦のくせに。
0057デフォルトの名無しさん
2009/06/24(水) 20:40:04講師が↓このどちらかを言えば問題無いでしょ。
『breakについては配列を勉強してから再度詳しく取り上げます』
『配列については後で詳しく説明します』
0058デフォルトの名無しさん
2009/06/24(水) 22:06:33難しいとかクセがつくから教えないってのはありえない。
0059デフォルトの名無しさん
2009/06/24(水) 22:53:21まあ実社会でそういう害毒を撒き散らさないんなら、好きにやってていいよw
0060デフォルトの名無しさん
2009/06/24(水) 23:27:42ガードに相当するんじゃないの?
0061デフォルトの名無しさん
2009/06/25(木) 11:15:06先生!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;
}
}
0062デフォルトの名無しさん
2009/06/25(木) 15:07:43↓も 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();
006362
2009/06/25(木) 15:09:08途中 return も禁止だったね.
006462
2009/06/25(木) 15:10:13targetIndex= searchTargetIndex(array, target);
だ.
0065デフォルトの名無しさん
2009/06/25(木) 21:04:330066デフォルトの名無しさん
2009/06/25(木) 21:09:29while (!done) {
}
0067デフォルトの名無しさん
2009/06/25(木) 21:13:400068デフォルトの名無しさん
2009/06/25(木) 23:17:410069デフォルトの名無しさん
2009/06/26(金) 03:18:360070デフォルトの名無しさん
2009/06/26(金) 09:36:41フラグ目的の変数は減点2、などとして評価するのはどうだろう。
0071デフォルトの名無しさん
2009/06/26(金) 10:10:370072デフォルトの名無しさん
2009/06/26(金) 10:28:580073デフォルトの名無しさん
2009/06/26(金) 10:51:470074デフォルトの名無しさん
2009/06/26(金) 10:54:20経験的に言って。
0075デフォルトの名無しさん
2009/06/26(金) 11:01:28そういうコードは大きく減点するようにすればいい。
0076デフォルトの名無しさん
2009/06/26(金) 12:46:38for-breakを使うことを知って、それで思考停止する馬鹿が多いから、break禁止にも一理あると言うことですな。
0077デフォルトの名無しさん
2009/06/26(金) 12:56:150078デフォルトの名無しさん
2009/06/26(金) 14:46:39他に頭回せよ馬鹿
0079デフォルトの名無しさん
2009/06/26(金) 14:46:420080デフォルトの名無しさん
2009/06/26(金) 14:47:35君プログラマに向いてないよ
0081デフォルトの名無しさん
2009/06/26(金) 15:02:44お前が向いてない
金にならない
0082デフォルトの名無しさん
2009/06/26(金) 15:51:59悔しいね〜
0083デフォルトの名無しさん
2009/06/26(金) 15:52:540084デフォルトの名無しさん
2009/06/26(金) 16:39:04break禁止が非難されると困るのはどんな人なんだろうね。
0085デフォルトの名無しさん
2009/06/26(金) 16:47:590086デフォルトの名無しさん
2009/06/26(金) 16:51:33それで各行に番号みたいのがついてれば、ラベル名考える手間がなくて便利じゃね
0087デフォルトの名無しさん
2009/06/26(金) 17:36:05いやいや、誰かがbreakを禁止すると困る人が多いようだよ
0088デフォルトの名無しさん
2009/06/26(金) 17:41:14別に困らないけど、breakを禁止にすることによって得られるメリットがあることを納得しない
人がさんざん反論するから相手してるだけ。
0089デフォルトの名無しさん
2009/06/26(金) 17:44:45いくら時間をつぎ込んでも2chはお前を救ってはくれないぞ。
0090デフォルトの名無しさん
2009/06/26(金) 17:50:230091デフォルトの名無しさん
2009/06/26(金) 18:41:26そりゃ困るだろ。
breakの使い方も知らない人間とコーディングするのは誰だって嫌だぜ。
歪んだ知識を持った奴がおかしな理屈を振りかざすのも面倒だし。
0092デフォルトの名無しさん
2009/06/26(金) 19:02:35一番困るのは、>>1が行ってる短大の講師だろう。
0093デフォルトの名無しさん
2009/06/26(金) 19:20:15goto駄目なら、例外とか、関数リターンとか、フラグ…
はっきりいって余計に悪い!
0094デフォルトの名無しさん
2009/06/26(金) 20:02:36もしbreakの使い方で問題が起こるなら(勿論そんな事は稀ですが)、講義の中で
フォローしてあげるのが先生の仕事ではないでしょうか。
それがそんなに難しい話だとは思えません。
0095デフォルトの名無しさん
2009/06/26(金) 20:04:38break を教えて貰えない事による、生徒の側のメリットって何よ?
0096デフォルトの名無しさん
2009/06/26(金) 20:48:26break なんてちゃんと教えてる時間はなさそう。
禁止する理由にはならないけど。
というか、Cなんて教えるな、という話になる。
0097デフォルトの名無しさん
2009/07/01(水) 08:57:06今回はbreakやcontinueや途中return禁止、次回はelse禁止とか
0098デフォルトの名無しさん
2009/07/01(水) 13:19:03仕事にならんなw
0099デフォルトの名無しさん
2009/07/01(水) 20:13:27関数型言語みたいに破壊的代入禁止とか、
JavaScript みたいに sleep 禁止とか、
>>1 の話は全然レベルが違うか…
0100デフォルトの名無しさん
2009/07/02(木) 15:21:14break のかわりに例外投げれば良いじゃない。 throw ELoopBroken みたいな。
途中 return のかわりに例外投げて関数の最後で補足すれば良いじゃない。throw EReturn(戻り値) みたいな。
0101デフォルトの名無しさん
2009/07/02(木) 17:42:230102デフォルトの名無しさん
2009/07/02(木) 17:49:030103デフォルトの名無しさん
2009/07/02(木) 18:47:300104デフォルトの名無しさん
2009/07/02(木) 19:47:280105デフォルトの名無しさん
2009/07/02(木) 20:32:50while(1){
0106デフォルトの名無しさん
2009/07/02(木) 20:34:11}
ミスった
0107デフォルトの名無しさん
2009/08/05(水) 19:20:010108デフォルトの名無しさん
2009/08/05(水) 21:13:18それってどんな goto
0109デフォルトの名無しさん
2009/08/06(木) 00:24:060110デフォルトの名無しさん
2009/08/07(金) 14:34:25はーじーまーるよー
0111デフォルトの名無しさん
2009/08/08(土) 01:43:20NTT西日本は大学校持ってないよ。
0112デフォルトの名無しさん
2009/10/08(木) 04:58:45優秀な人間ならどう考えたって教員なんかよりソフトウェアエンジニアリングの方が儲かるもん。
break禁止とか現場的枝葉に拘るところからして、コンピュータサイエンスとかのアカデミズムとも無縁だろう。
プログラミング教えるってそれ自体そもそも学問じゃないので大学職員としても底辺だし。
そんなダメなやつが break禁止って生意気だろ?
おまえは、Scott Mayerより偉いのか? K&Rより偉いのか?
『何様ですか?』と2chで人格攻撃されてましたと、どうかお伝えください。
0113デフォルトの名無しさん
2009/10/08(木) 10:56:450114デフォルトの名無しさん
2009/10/30(金) 16:40:450115デフォルトの名無しさん
2010/07/29(木) 16:31:070116デフォルトの名無しさん
2011/05/05(木) 11:08:52.080117デフォルトの名無しさん
2011/05/10(火) 07:17:14.970118uy
2011/05/15(日) 01:23:01.67こういう使い方はヤバイ
begin
print "test"
print "test"
print "test"
print "test"
print "test"
break if flag
print "aaaa"
print "aaaa"
print "aaaa"
print "aaaa"
print "aaaa"
print "aaaa"
end until false
こうやってbreakの後ろにもソースコードがある場合、
これは本来、ソースが冗長しようとbreakの前にある処理と、 breakの後ろにある処理を
別関数に分けるべき、
0119uy
2011/05/15(日) 01:27:49.18each.do |n|
break if test
処理
end
こうかくのは全然あり
これをしないと
each.do |n|
unless test
処理
end
end
こうかね。
しかも無駄なループが発生する
0120デフォルトの名無しさん
2011/05/15(日) 08:18:33.30関数は意味のあるまとまりができたときに、その処理に名前をつけるために作るもの。
文法的にこういう記述ができたから関数にしよう
……なんて発想で関数を作ると思いっきり読みにくくなる。
冗長とか言う問題じゃなくて、関数の間の結合度が上がる。
0121uy
2011/05/17(火) 15:23:59.69このヤバさがわからないとは、このケースの問題に当たった事がないだろ
俺が今まで読んだどこかの本にも書かれていた内容だと思ったけどな
returnや、breakは、その処理ブロックの最初か最後に書くべきであって、
中盤にやたらかいてはいけない
print "aaaa" ←例えばこれが、百行くらいだったりした場合の可読性の低下は、やばい
そしてこのかき方をゆるすと、その百行の中にもさらに複数のbreakの発生を許す事にもなるよね
俺がつい最近>>118みたいなコードを「仕方なく」書いたから、例として出したんだけど後で書き直すつもりだよ
そのせいで関数の数が二つ増える事になるけど、そうする予定
んで、関数の名前についてだけど
別に関数を2個に分裂させるわけじゃなく、
共通処理を抜き出してSub関数を作るんだよ、この部分の関数分けは表には現われない
もしかしたらyieldが無いと出来ないタイプの芸当な感じがするけどな
0122uy
2011/05/17(火) 15:47:14.41lambda、クロージャでググレカス
オブジェクト指向ではなく、関数型プログラミングのほうで関数というものは
とにかく細かい単位にまで処理を分けるもの、OOではクラスでやってる役割も関数型ではlambdaで受け持つ事がある
OOでも118はダメだと思う
118が許されるのはC言語による手続き型のプログラミングまでです
0123デフォルトの名無しさん
2011/05/22(日) 14:52:19.38> print "aaaa" ←例えばこれが、百行くらいだったりした場合の可読性の低下は、やばい
> そしてこのかき方をゆるすと、その百行の中にもさらに複数のbreakの発生を許す事にもなるよね
同じような記述が100行もある時点でおかしい。breakがどうこう言う以前の問題だよ。
お前は関数型言語だとかラムダだとかを知る前に、サブルーチンの作り方とかループを知れ。
0124デフォルトの名無しさん
2011/05/23(月) 11:35:40.610125uy
2011/05/24(火) 22:35:01.12知的障害者の方ですか?
ボケで言ってるんじゃなければ、病院いけ それか休め
煽りじゃなく、 たぶん、お前以外の奴は全員理解してる
> print "aaaa"
> print "aaaa"
> print "aaaa" これ 同じ記述が続くって意味じゃないことを
0126uy
2011/05/24(火) 22:45:15.49知的障害者は言い過ぎたか、素の初心者か君。
流石に、俺はあちこちで痛いこと書き込んでるけど そこまでではない
とりあえず、学生の君にも分かりやすくいうと、学生時代にC/C++で数万行のソースかいてたレベル
当然学内では1位だったよ
井の中の蛙とかおやまのたいしょうとか、思うならそれでもいいけれど
流石に君のような頭の悪そうな学生以下ではないので
0127デフォルトの名無しさん
2011/05/25(水) 02:47:03.190128デフォルトの名無しさん
2011/05/25(水) 07:30:09.64マ板の例外スレ見てみ。
こいつキ○ガイだから。
0129デフォルトの名無しさん
2011/05/25(水) 07:47:09.880130uy
2011/05/27(金) 21:29:42.92このスレこわ
大学1年生がみても、程度が低いと分かるレベル
笑っていいよ、 >>ここみてる大学生 これが日本のレベルです。。。。
0131デフォルトの名無しさん
2011/05/30(月) 08:49:10.680132uy ◆yyC0rYWEq2
2011/05/30(月) 17:18:20.79どうせ35でプログラマ続けるのが限界になって
ひっそりと自殺するゴミに何を言っても無駄か・・・
0133デフォルトの名無しさん
2011/05/30(月) 19:53:46.310134デフォルトの名無しさん
2011/06/04(土) 17:13:39.910135デフォルトの名無しさん
2011/06/04(土) 22:24:38.600136デフォルトの名無しさん
2011/06/05(日) 02:37:05.33クロージャ使いまくって不具合を追えなくなるパターンを経験してないんだな
0137デフォルトの名無しさん
2011/06/06(月) 22:00:09.78http://logsoku.com/thread/pc11.2ch.net/prog/1261972475/
0138デフォルトの名無しさん
2011/11/20(日) 11:31:56.45■ このスレッドは過去ログ倉庫に格納されています