短期大学校にてプログラミングを学んでいるものです。 私の学校ではbreak文の使用が厳禁とされています(教師の個人的な規制だが) また、メインループで0を返してループを抜け出すことも禁止されています(メインループの最後以外で) このようにbreak文とは一般的には使用してはいけないもの、使用は控えるべきもの。と認識してもよろしいのでしょうか?
一定レベル以上の人では、そういうのはすごい少数派。 あと、広がりのない話題でスレを立てるのはマナー違反な。
>>2 スレ立てすいませんでした・・・
レスありがとうございます。
>>1 世の中というのは不条理な物で、意味が無くても従わないといけない事もあるのです。
コーディング規約としては意味は無いけど、
・単位が欲しいなら従うしか無いでしょ
・給料が欲しいなら従うしか無いでしょ
・コミットして欲しいなら従うしか無いでしょ
みたいなね。
break がダメなら代わりに goto を書きまくったら良いんじゃね。
>>1 あとで、ちゃんとした専門機関でもう一度勉強し直すことをお薦めします。
単位を取る以外のことは考えず、すべて受け流すように。
>>4 単位のためには従うしかないないですね・・・
>>5 今は単位を取ることだけに集中したいと思います。
>>6 ないない・・・
>>1 それを提唱したのはダイクストラですが、そのことに関しては教えてもらいましたか?
まだであれば、ダイクストラと構造化プログラミングについてググってみましょう。
一般的には、breakも関数の途中抜けも多用され、そしてそれは悪いことではありませんが、
悪い用法・文脈で使われてしまうこともあります。
そのような癖を付けさせないために、学習期間中はダイクストラの教えを厳守させるのも
一つの方法です。
breakを使いたくなったり、関数を途中抜けしたくなったり、インデントが深くなったりしたときは、
まず関数全体の構造をよりよくできないか考えましょう。
あるいは、大きな関数やインデントが深い関数は、関数分割やリファクタリングを考えましょう。
そのようなことを考えさせるために、ダイクストラの教えを強要するのではないかと思います。
ダイクストラが言っていたのは break ではなくて goto じゃないかな。 switch の中で break を使えない状況なんて、ちょっと理解出来ませんよね。 わざわざ無意味で不必要な制限を加えて、おかしな癖が付いたら逆効果です。
switchなんていらないだろif elseifで十分
構造化スキーで途中return禁止ってのはたまに出会うけど、break禁止ってのは珍しいな。 goto使いたくないっていうことで do{...}while(0); をbreakで抜ける技とか使うくらいなのに。
breakもgotoと同じだろ
continueも禁止ですな。 gotoと同じだし。
>>9 switchの中のbreakじゃなくて、ループ脱出のためのbreakの話でしょ。
マゾプログラミング講座では、現在 break, continue, goto, return が禁止されています。 switch の使用も意味をなさないので推奨されません。制限はこれからも増える予定です。
スマソ。規約は正確に書かないとな。 × return が禁止 ○ 複数 return が禁止
初心者には禁止するくらいでいい
初心者上級者関係ないです。
break禁止は大きな過ち むしろwhileとbreak以外の全ての制御構文を禁止するべき ifとかelseとかforとか存在自体が無駄
こんな30年前に終わった話題をいまさら蒸し返さなくてもいいよ
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
call/cc 使おうぜ!
25 :
デフォルトの名無しさん :2009/06/24(水) 08:22:01
学校の先生が禁止するのは、 必要もないところでむやみに使うやつがいるからだろう。 生半可な知識だと、とにかく動けばいいやってんで、 めちゃめちゃな使い方するやつがいるからね。 現実には、適切なところで、適切に使えばいいんだよ。 他人がそのプログラムを見たときに、 そのほうが分かりやすいかどうかが目安だ。
禁止すれば何かが解決すると思うのもなんだかなあ…
コーディングスタイルの話題で、そんな書き方ないだろうって言われると、 「いや、これは初心者(ヘタクソ)に有効な書き方なんだ」っていいわけ するやつがいるけど、コーディングスタイルに上級者むけとかヘタクソむけ とかないから。
28 :
デフォルトの名無しさん :2009/06/24(水) 10:14:05
この場合は、へたくそに「有効」なんじゃなくて、 へたくそには「使わせない」ってことだから、ちょっと違う。 学校の先生は、数十人以上を同時に相手にしていて、 短大なら来プログラミングをする職業に就く人も少なそう。 いちいちきめ細かな指導をしていられる状況じゃない。 単に、一般教養の一種としてプログラミングの入門を 教えているなら、使わせないという発想もありだと思う。
いくらなんでも無内容すぎる
30 :
デフォルトの名無しさん :2009/06/24(水) 10:16:06
breakの代わりに、goto文を多用すればいいだけwwwwww
正直言って、将来プログラマにならない 文系素人にコンピュータの仕組みを教えるなら、 BASICでいいと思うよ。もちろん、GOTO使いまくりで。 関数とかサブルーチンとか教えても無理だから。
32 :
デフォルトの名無しさん :2009/06/24(水) 10:58:06
goto文が悪いわけじゃない。 プログラムのコーディングができても設計ができない奴に問題がある。
C#のルールブックって本は break禁止だったな。 理由は分かりにくいってコトだったが、 サンプルどうみても breakを使わないでかいたリストの方が分かりにくかったが。
>>28 そういう理由なら、教えないってだけで、使うのは禁止しなくてもいい。
むしろ教えていない部分でも、自分で勉強して使う生徒は評価するくらいでなくては。
所詮、体育会系単細胞教師ってことだw
>>37 安易にbreak, continue, returnする癖が付く問題は回避できるでしょ
break,continueを絶対使わない、returnは関数の最後に一個だけって 癖がつくのとどっちが有害だろうか。
>>38 安易に禁止する事で、breakの使い方を知らない子供たちを量産するんですね
>>39 使い所を知ってるからそういいたいんだろうけど、相手は初心者だよ?
>>39 適切なbreak, continue, returnの使用は、そのうち学習すればいい。
適切じゃない使い方をさせないための制限でしょ。
break, continue, return, gotoを最初から無制限に使いまくれとでも言いたいの?
古き良きPascalやLispを使わせれば問題ないんだよ。
よくある、配列の要素をfor文で巡回する様な処理の場合も、 必要な値が見つかってもbreakしないで最後の要素まで 延々と検査するんだろうな。 それは悪い癖じゃないのかな?
使いながらおぼえればいいだろ。 breakとかcontinueって、そんなに危険物なのか。 たいがいに入門書にはbreakやら、省略せずに教えてるけど、 そういう教科書で勉強した初心者は、すごいことになりそうだな。
breakが無い言語ではプログラミング出来ないんだろうなぁ
>>39 一年間の講義を終えた後でbreakの存在を知った生徒はどう思うんだろうね。
独自にbreakの使い方を勉強して、結局は悪い癖を身に付けちゃう子も居るだろうね。
授業で教えてくれなかったし…
>>47 break禁止って言われるわけだから、一年後に存在に気づくなんてあり得ないだろ馬鹿
>>48 名前を知ってるのと、適切な使い方を知ってるのは雲泥の差だろ…
break禁止令を不自然だと思わない人間がム板にいる事が驚きだわあ
スポーツとかと違って、プログラミングの癖なんていくらでも修正きくんで、 どうでもいいっていえばどうでもいいけどな。 初心者のころにbreakは一般的でないって教えられて、以後、それを信じ込んで 考えを変えられないとかってのは、癖どうこう以前にダメだしな。 (じっさいそういうヤツ一杯いるけど) こういう、怪しいスタイルを教えるやつって一杯いるんで、自分で自衛するか ない。
出来る事ならば、学校の先生はそういう怪しいスタイルから 生徒を守る側に立って欲しいよな
53 :
デフォルトの名無しさん :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 もそうなんだけど、短くてしかもちゃんと 必然性のあるサンプルプログラムって作るのって、結構難しいんだよね。
>>18-
>>17 が見えないか?
見えてるけど、語りたいのか?莫迦のくせに。
>>55 講師が↓このどちらかを言えば問題無いでしょ。
『breakについては配列を勉強してから再度詳しく取り上げます』
『配列については後で詳しく説明します』
breakとかcontinueとか、時間がないから省略するってのは、まだしも 難しいとかクセがつくから教えないってのはありえない。
この教師、フラグをガンガン使いまくってでも1個のbreakを避けることの方が重要なんだろうな。 まあ実社会でそういう害毒を撒き散らさないんなら、好きにやってていいよw
breakって、関数型言語でループ(もどき)を回した時の ガードに相当するんじゃないの?
>>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;
}
}
>>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 :2009/06/25(木) 15:09:08
すまん. 途中 return も禁止だったね.
64 :
62 :2009/06/25(木) 15:10:13
しかも, 呼び出し targetIndex= searchTargetIndex(array, target); だ.
なんで for? while 使えばいいじゃん
done = 0; while (!done) { }
そして余計なフラグが一個増えた
break禁止よりwhileの使い方をちゃんと教えた方が有益だな、と思いました
break禁止ってパフォーマンスに関わってくる気がする
課題の評価方法として、例えばbreakは減点1、gotoは減点50、 フラグ目的の変数は減点2、などとして評価するのはどうだろう。
使わなかったら点数が倍とか
なんでbreakやフラグで減点なんだ。
減点最小に最適化しろってことだろ。
goto/break憎しでそれを避けるコードやそういうコードを書く奴って糞ばっかりなんだけど。 経験的に言って。
>>74 そういうコードは大きく減点するようにすればいい。
>>65 for-breakを使うことを知って、それで思考停止する馬鹿が多いから、break禁止にも一理あると言うことですな。
一理もないような気がする。
無駄な思考は要らんだろ 他に頭回せよ馬鹿
気のせい
whileやdoを使うことを一ミリも考慮しない馬鹿
まだ頑張ってるのかw break禁止が非難されると困るのはどんな人なんだろうね。
ifとgotoさえあれば他は要らない
>>85 それで各行に番号みたいのがついてれば、ラベル名考える手間がなくて便利じゃね
>>84 いやいや、誰かがbreakを禁止すると困る人が多いようだよ
>>84 別に困らないけど、breakを禁止にすることによって得られるメリットがあることを納得しない
人がさんざん反論するから相手してるだけ。
もうちょっとましな暇つぶししようぜ。 いくら時間をつぎ込んでも2chはお前を救ってはくれないぞ。
生産性の無いことするの好きなんだね
>>87 そりゃ困るだろ。
breakの使い方も知らない人間とコーディングするのは誰だって嫌だぜ。
歪んだ知識を持った奴がおかしな理屈を振りかざすのも面倒だし。
あり得ない話だが、仮にbreak禁止論が一般に広まったとしたら、
一番困るのは、
>>1 が行ってる短大の講師だろう。
break禁止論が一般に広まったとしたら、gotoで書くだけのような気がする。 goto駄目なら、例外とか、関数リターンとか、フラグ… はっきりいって余計に悪い!
breakみたいなよく使われる機能は授業の中できちんと教えるべきですよね。 もしbreakの使い方で問題が起こるなら(勿論そんな事は稀ですが)、講義の中で フォローしてあげるのが先生の仕事ではないでしょうか。 それがそんなに難しい話だとは思えません。
>>88 break を教えて貰えない事による、生徒の側のメリットって何よ?
文系短大のプログラミング入門の授業だったら、 break なんてちゃんと教えてる時間はなさそう。 禁止する理由にはならないけど。 というか、Cなんて教えるな、という話になる。
毎回規約が変わるのなら勉強としては良いかも知れない 今回はbreakやcontinueや途中return禁止、次回はelse禁止とか
勉強にはなるかも知れんが 仕事にならんなw
Java みたいに goto 禁止とか、
関数型言語みたいに破壊的代入禁止とか、
JavaScript みたいに sleep 禁止とか、
>>1 の話は全然レベルが違うか…
goto のかわりに例外投げれば良いじゃない。 break のかわりに例外投げれば良いじゃない。 throw ELoopBroken みたいな。 途中 return のかわりに例外投げて関数の最後で補足すれば良いじゃない。throw EReturn(戻り値) みたいな。
それ C じゃ通用しないお
phpだと break 2 とか break 3 って、複数ループジャンプできなかったっけ
もうsetjump(3)とlongjmp(3)でいいじゃない
Java は break や continue にラベルを指定できる
out: while(1){
break out; } ミスった
\\
しかし、大学校なんて防衛大ぐらいだと思ってたけど他にもあるのか。
でーこーぼーこ大学校ー はーじーまーるよー
つーか、学校でプログラミング教えているようなやつなんか終わってるんだよ。 優秀な人間ならどう考えたって教員なんかよりソフトウェアエンジニアリングの方が儲かるもん。 break禁止とか現場的枝葉に拘るところからして、コンピュータサイエンスとかのアカデミズムとも無縁だろう。 プログラミング教えるってそれ自体そもそも学問じゃないので大学職員としても底辺だし。 そんなダメなやつが break禁止って生意気だろ? おまえは、Scott Mayerより偉いのか? K&Rより偉いのか? 『何様ですか?』と2chで人格攻撃されてましたと、どうかお伝えください。
保守すんな阿呆
プログラムは単なる手段です。
115 :
デフォルトの名無しさん :2010/07/29(木) 16:31:07
116 :
デフォルトの名無しさん :2011/05/05(木) 11:08:52.08
117 :
デフォルトの名無しさん :2011/05/10(火) 07:17:14.97
ヽ(`Д´)ノボッキアゲ!!
118 :
uy :2011/05/15(日) 01:23:01.67
breakは、アレだろ こういう使い方はヤバイ 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の後ろにある処理を 別関数に分けるべき、
119 :
uy :2011/05/15(日) 01:27:49.18
あとは何かイテレータで廻してるときとか、 each.do |n| break if test 処理 end こうかくのは全然あり これをしないと each.do |n| unless test 処理 end end こうかね。 しかも無駄なループが発生する
>>119 はともかく、
>>118 は駄目な発想だな。
関数は意味のあるまとまりができたときに、その処理に名前をつけるために作るもの。
文法的にこういう記述ができたから関数にしよう
……なんて発想で関数を作ると思いっきり読みにくくなる。
冗長とか言う問題じゃなくて、関数の間の結合度が上がる。
121 :
uy :2011/05/17(火) 15:23:59.69
>>120 このヤバさがわからないとは、このケースの問題に当たった事がないだろ
俺が今まで読んだどこかの本にも書かれていた内容だと思ったけどな
returnや、breakは、その処理ブロックの最初か最後に書くべきであって、
中盤にやたらかいてはいけない
print "aaaa" ←例えばこれが、百行くらいだったりした場合の可読性の低下は、やばい
そしてこのかき方をゆるすと、その百行の中にもさらに複数のbreakの発生を許す事にもなるよね
俺がつい最近
>>118 みたいなコードを「仕方なく」書いたから、例として出したんだけど後で書き直すつもりだよ
そのせいで関数の数が二つ増える事になるけど、そうする予定
んで、関数の名前についてだけど
別に関数を2個に分裂させるわけじゃなく、
共通処理を抜き出してSub関数を作るんだよ、この部分の関数分けは表には現われない
もしかしたらyieldが無いと出来ないタイプの芸当な感じがするけどな
122 :
uy :2011/05/17(火) 15:47:14.41
なんか概念を色々しらなそうだから付け足しておいてる lambda、クロージャでググレカス オブジェクト指向ではなく、関数型プログラミングのほうで関数というものは とにかく細かい単位にまで処理を分けるもの、OOではクラスでやってる役割も関数型ではlambdaで受け持つ事がある OOでも118はダメだと思う 118が許されるのはC言語による手続き型のプログラミングまでです
>>121 > print "aaaa" ←例えばこれが、百行くらいだったりした場合の可読性の低下は、やばい
> そしてこのかき方をゆるすと、その百行の中にもさらに複数のbreakの発生を許す事にもなるよね
同じような記述が100行もある時点でおかしい。breakがどうこう言う以前の問題だよ。
お前は関数型言語だとかラムダだとかを知る前に、サブルーチンの作り方とかループを知れ。
頭でっかちで実装技術が伴っていない悪寒。
125 :
uy :2011/05/24(火) 22:35:01.12
>>123 知的障害者の方ですか?
ボケで言ってるんじゃなければ、病院いけ それか休め
煽りじゃなく、 たぶん、お前以外の奴は全員理解してる
> print "aaaa"
> print "aaaa"
> print "aaaa" これ 同じ記述が続くって意味じゃないことを
126 :
uy :2011/05/24(火) 22:45:15.49
知的障害者は言い過ぎたか、素の初心者か君。 流石に、俺はあちこちで痛いこと書き込んでるけど そこまでではない とりあえず、学生の君にも分かりやすくいうと、学生時代にC/C++で数万行のソースかいてたレベル 当然学内では1位だったよ 井の中の蛙とかおやまのたいしょうとか、思うならそれでもいいけれど 流石に君のような頭の悪そうな学生以下ではないので
>>123 の是非はともかく、少なくとも匿名掲示板で延々とコテ付けてる人が頭が良いとは言えないぞ
>>127 マ板の例外スレ見てみ。
こいつキ○ガイだから。
gotoと例外の区別もつかないのか。だから、breakとgotoの区別もついてないんだな。
130 :
uy :2011/05/27(金) 21:29:42.92
知的障害は知的障害を呼ぶ このスレこわ 大学1年生がみても、程度が低いと分かるレベル 笑っていいよ、 >>ここみてる大学生 これが日本のレベルです。。。。
自分で言っちゃったね。
どうせ35でプログラマ続けるのが限界になって ひっそりと自殺するゴミに何を言っても無駄か・・・
うんこにラベルつけてもうんこはうんこですよ
ruby厨っておもしれーな
Perlにも変なのがいたぞ。PHPが嫌いらしい。
本読みかじった知識だけ振り回して細かく分けすぎて破綻するパターンとか クロージャ使いまくって不具合を追えなくなるパターンを経験してないんだな
138 :
デフォルトの名無しさん :
2011/11/20(日) 11:31:56.45 へえ