【嫌儲プログラミング部】ゲームプログラミングで if文 や for文 を使う情弱はいないよな?
1 :
番組の途中ですがアフィサイトへの転載は禁止です:
SIGGRAPHの直後に、ロスで一般層向けのワークショップを開催した。
参加者は6歳から60歳代と幅広く、ほとんどがプログラミングの素人といった内容だ。<中略>
実は子供は、「if」などの条件分岐は比較的すんなり受け入れるのだけど、大人になればなるほど、「if文」といった単純な制御構造でさえ、
「これはいつ使うのだ、なんのために使うのだ、どうして使うのだ」と悩み込んでしまう原因になってしまうらしい。
ここが障害になると、およそゲームらしいものにたどり着く前に学習をやめてしまう。
そこでcode9leapではif文が登場するタイミングをできるだけ遅らせている。
さらにループも問題だ。
なぜループが必要なのかわからない。
確かに、僕も最初にループを学んだときはなぜ必要なのか全くわからなかった。
けど、そのときはまだ6歳だったので、ループという遊びなんだと解釈することで消化できた。
しかし大人になればなるほど、そうした解釈は難しいのだということに最近気づかされた。
実際にループが必要な場面を列挙してみると、たとえばゲームでは初期配置とメインループと当たり判定くらいがループで処理できれば、
あとのたいていの処理はループが必要ない。
そこで思い切ってループとif文を使わずにイベント駆動だけでゲームが作れないかやってみた。
内部的にはループやifはもちろん多用しているが、ゲームを定義する部分にifやループを使わない。
プログラミングの究極の形が、仕様書を入れるとコードができあがることだとすれば、まさしくゲームの仕様を定義するとゲームができあがるようにしたかった。
ある程度の段階まで、ビヘイビアの組み合わせだけでとりあえず動くようにする。ループやifといった制御構造を使わずにプログラミングをさせて、その楽しさを理解したあとなら、
ループやifといった高度な制御構造も楽しく使えるのではないか、という仮説を立て、それをビジュアル言語化した。
それが前田ブロックだ。
そしてロサンゼルスワークショップが始まった。
会場は飛び入り参加がでるほどの人気で、様々な年齢層の人がひしめいていた。
ソース: 2012-08-11 UEI社長 清水亮
http://d.hatena.ne.jp/shi3z/20120811/1344699616
ええな
せやせや
4 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:21:39.16 ID:BNkxJRWl0
ループが必要なのはループなしだとコンピューターはプログラムを
先頭か最後まで処理をしたらプログラムを終わらせちゃうからだよw
ノイマン型共通の話
5 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:24:18.25 ID:IOn8QZXj0
初学者とはいえ分岐やループもすんなり受け入れられないって
脳みそどうかしてるだろ
寧ろ一番使う
if文が受け入れられないって信じられないんだが
8 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:27:35.45 ID:uFwsWv7O0
その心は?
9 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:28:07.58 ID:CVDw/Ht30
オブジェクト指向やモナドならともかく,分岐やループがわからないならプログラミングまず諦めたほうがいい
ゲームなんかメンテしにくくても速く動けばいいんじゃね?
11 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:29:31.36 ID:BNkxJRWl0
>>7 日常的に判断に慣れすぎて今度はなれとか惰性で物事を大人は決めるから
いちいち条件式を設定するのが苦痛に感じるんじゃないかな?
まあ大人ならではかも
12 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:30:34.34 ID:Z4MG5x2J0
gotoの出番だな
13 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:31:07.73 ID:24zf6jT70
所詮はJS世界のお話し
14 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:31:15.37 ID:KR9aKFSR0
foreachが便利過ぎて辛い
15 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:31:46.54 ID:7h4TFey00
それでどうやってプログラム書くんだよ
16 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:32:30.74 ID:R2R6z4vl0
せやな。forよりwhileやな
IFがなきゃイベントとか入れらんねーだろ
18 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:32:44.83 ID:dse1NtPg0
20 モシ A=2 ナラバ イケ 80
20 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:34:02.52 ID:7I2zH/TV0
caseや
21 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:34:15.46 ID:6100meAa0
flagって使わないほうがいいの?
22 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:34:52.12 ID:4SKZM/Fx0
またおまえらド素人相手に勝ち誇ってるのか
23 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:35:11.37 ID:d8nuSnRd0
>内部的にはループやifはもちろん多用しているが
意味が分からん死ね
24 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:35:54.67 ID:3E9UDoyV0
ツクールを更に簡単にしたようなもん
25 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:39:36.43 ID:5c246s5G0
そこで輝くGOTO
switchだもんな
27 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:40:29.79 ID:VNgJqQ1y0
ベーマガでは常識
28 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:40:58.11 ID:cLfbkEHr0
10 cls
20 for i=1 to 7:color i:print "バーカ ";:next
30 if inkey$<>"" then end
40 goto 20
29 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:41:57.72 ID:T6jczfQ80
関数ポインタとか活用すればメインループ的な所では使わなくとも結構行けるのかな
30 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:42:30.27 ID:7dxxlXBq0
inkey$とか20年ぶりにみた
31 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:44:42.77 ID:lormcezy0
N88日本語BASICが火を噴く時が来ましたか?
いいえ、来ていません
プログラムって終わらないループにハマったらどうなんの?爆発すんの?
XNA入れてみたけどさっぱりわからなかったからやめた。
C#はわかるのに本当にさっぱりなんだ。ドキュメントは画像の表示とかしか示してないからゲームの流れはどうやって組み立てればいいのかわからない。
ゴミ
34 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:51:54.39 ID:thoZP0lFP
ゲームプログラミングは敷居が高いと思うぞ
ゲームは遊ぶだけにしときなさい
35 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:52:29.17 ID:g09WHI3F0
それが前田ブロックだ。
じゃねえよGoogleのBlocklyそのままじゃないか
36 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:53:11.18 ID:NE1MavpOP
そういう概念はもう語りつくされてるんだがな
カス土方ホイホイ糞スレ
javascriptから始めたから意味もなくswitch文を多用してしまう(´・ω・`)
もしもピアノがひけたなら
ifがだめならswitch文をつかえばいいじゃない
gotoの亜種みたいなものだ
41 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:56:26.14 ID:YC3WxmhK0
バカが真似して再帰しまくってスタックオーバーフローさせるからこういうのやめろ
42 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:56:31.02 ID:5dPqLPAy0
>>33 XNAはゲームループをすでに用意してくれててループの中に組み込まれる
特定の箇所へコードを書く構造だからなあ
COBOLでゲーム作るくらいしろ
44 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:57:51.95 ID:vXiHNfB80
Cじゃswitchが一番使ったら駄目な物らしいのに何でWinのメッセージ処理はswitchが基本なんだ
do-while使ったことない
46 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:58:03.36 ID:NE1MavpOP
エクセルマクロでMMO作れない奴はカスだからな
PG名乗るな
47 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 14:59:31.61 ID:REKh1b4G0
とうとう時代がgotoに追いついたか
GOTOバカにすんな!
CじゃGOTO必須なんだよバカ!
FILE *fp=NULL;
unsigned char *buf1=NULL,*buf2=NULL;
if((buf1=calloc(1024,sizeof(char))==NULL) goto done;
if((buf2=calloc(1024*100,sizeof(char))==NULL) goto done;
…
if((fp=fopen("hoge.bin","rb"))==NULL) goto done;
if(fread(buf1, sizeof(char), 1024, fp)<1024) goto done;
if(何かエラー) goto done;
if(何かエラー) goto done;
…
done:
if(fp) fclose(fp);
if(buf2) free(buf2);
if(buf1) free(buf1);
こんな感じ。
三項演算子でも使うの?
50 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:01:12.54 ID:cYxgc73x0
ゲームのプログラミングって業務系のシステムとやっぱ違うもんなの?
フラグ地獄だと想像してるんだけど
51 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:02:30.22 ID:vXiHNfB80
52 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:02:59.13 ID:CZbcO8830
goto全否定するやつは多重ループとかどうやって抜け出すんだ
53 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:03:49.93 ID:NE1MavpOP
コスト高い処理無駄に入れてる奴ってカスだろ
コンパイラの挙動すら推測できてないというかコンパイラも作ったことないゴミ
54 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:03:53.03 ID:5dPqLPAy0
55 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:05:43.39 ID:6100meAa0
56 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:06:21.84 ID:MNlqhd+90
まさかゲームプログラムで高級言語を使ってる情弱はいないよな?
57 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:06:46.55 ID:JeWNOZ130
58 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:07:19.68 ID:3E9UDoyV0
ゲーム系はコンパイラやOS作れるレベルの人材がいる恐い世界
59 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:08:04.80 ID:Bzm0V0BD0
マシン語で書けよ
60 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:08:25.60 ID:XLCwQHEVP
do loop文ばっかり使ってる
61 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:08:29.56 ID:J+8Y+R2n0
62 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:09:31.62 ID:NE1MavpOP
エディタ
コンパイラ
OS
とか1回は自作して挙動学ぶのが普通だろ
なんちゃっては知らん
63 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:09:33.83 ID:5dPqLPAy0
gotoを使いすぎたプログラムって意思決定ができない日本人ぽいんだよな
gotoを極力減らしたプログラムは特定ブロック毎に処理が完結してるから
思考が中断されない
64 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:10:07.94 ID:C/o6klPWP
むしろDo LoopとSelect Caseのみで生きていける。
if
うん百行
else
うん百行
みたいなコード見ると気が狂いそうになる
いやあのそのね、みたいな
全く何の知識も持ってない初心者が
ヨコスクロールゲーム作ろうとしたら何ヵ月位かかるん?
67 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:12:58.83 ID:NE1MavpOP
JQueryがコピペでグリグリ動くから
JavaScript使えますとか言ってくる勘違いのアホが増えすぎ
68 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:13:00.61 ID:5dPqLPAy0
>>66 見た目のクオリティを気にしなければ1日〜永遠と幅広い
結局使う環境とその人次第
>>66 絵素材あれば半年で3面ぐらい作れるんじゃね
プログラミング知識ゼロなら1年以上かかりそう
無限ループはwhile(1)が主流だけどfor(;;)を押していきたい
72 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:18:14.71 ID:kKge5goG0
>>71 泣いてるみたいで悲しいじゃん
bool _=true;
for
(;_;)
お前らなんでプログラミングやってる奴多いの
パソコン好きなやつ多いのはわかるけど
難しい上需要ないよね
好きなことやりたいのはわかるが、我慢してその努力を勉強に向けていい大学行ったほうが人生充実してたよ君ら
74 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:19:57.77 ID:2KCWOfBy0
どの言語でもforの構文設計って、数学のΣの書き方をうっすら意識した構文設計じゃね?
だから大人なら、理解に難儀するはず無いんだがな。逆に。子供よりも。だって微分積分くらい大人ならば常識でしょ?
>>70 ドット絵とか描けるからちょっと趣味で始めようと思ったけど、相当厳しいな
絵を少し動かしたりするだけで頭破裂しそうだわ
例外処理で発狂するお仕事です。
>>73 人生の充実というものほどくだらないものはない。
そういう価値観だろ。
78 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:21:48.59 ID:DnOo1fY30
趣味でする分にはいいけど仕事にはしたくないわな
if文無使用縛りでゲームは出来る気がしないんだがどうやるんだ
80 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:22:34.09 ID:CZbcO8830
>>73 今時プログラミングもできないとかどんな大学通ってるんだよ
Cぐらい教わるだろ
81 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:22:42.65 ID:DbVU7eZ00
82 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:23:40.23 ID:vLODyOj10
情強はgoto
83 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:24:11.36 ID:5dPqLPAy0
>>79 Cだと関数ポインタの配列を作って0の時呼び出す関数1の時呼び出す関数・・・と
登録しておいてやればできる
>>80 どこのFランだよ
プログラミングは努力のわりに見返り悪いだろ
85 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:24:38.83 ID:bUoki3/aP
PRINT, IF〜THEN, GOTO, LET, LOCATE, INKEY$
コレだけでアクションゲームなら何でも作れるだろ(´・ω・`)
86 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:24:44.98 ID:iETjPHBj0
え?普通に使いまくるけど?
コーダー様に分投げればできるらしい
88 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:27:17.28 ID:HwgxH3wTO
世の中ではifも禁止なのか
>>71 while(1) だと、コンパイラによっては警告がでるからうざい
91 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:31:48.70 ID:xYyXDvqT0
特定の窓を手前から二番目、フォーカスを奪わずに持ってくるにはどうしたら良いんだ
何やっても思い通りにならない
SetWindowPos(hWnd, GetForegroundWindow(), 0, 0, 0, 0, SWP_NOMOVE |SWP_NOSIZE |SWP_NOACTIVATE | SWP_NOSENDCHANGING);
これじゃ駄目なのか
92 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:31:56.99 ID:5dPqLPAy0
93 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:32:59.49 ID:CZbcO8830
プログラミングは絵と同じだから
出来る奴と出来ない奴の差が激しい
売り物レベルのゲームなり組み込みなり作るとなるとかなりの経験が必要
自分でやって出来ないと思ったら手を出さない方がいい
95 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:35:16.14 ID:DJ970WZF0
全てsetでまかなえる
96 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:35:18.97 ID:aRXmOrwS0
だいじょうぶ
俺はちゃんとswitch文で対処してるよ
97 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:37:07.55 ID:c1z0EA7oP
子供の頃眺めてたBASICのコードはGOTOばっかでわけわからんかったな
ゴトーって誰だろうと思ってた
98 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:37:38.40 ID:ZmLy8v1m0
未だにbreakの綴り間違える事あるんだが。。
99 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:38:16.20 ID:z6DRQ7lQ0
>>1 天才であるがゆえの苦悩とか、自虐風に頭いいアピールする人か。
こんな記事でさえさりげなく自分は6歳でプログラミングやってたとか入れてぬかりないな。
101 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:42:21.57 ID:JKtr2Inw0
>>84 ちょっとプログラミングかじってるやつが余計な専門用語使ってドヤ顔するためのスレだから
そんなに目くじら立てる必要ないよ
0xF0 とか 0xD0 を使うけど
103 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:46:18.44 ID:Y3x03Prw0
forは末尾再帰でかけばいい
まさか末尾再帰が最適化されないコンパイラや処理系つかってないよな?
104 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:46:46.44 ID:DbVU7eZ00
>>1 ゲームでイベントドリブンな設計は安易に使うな
適当に作ったものはどうせ破綻する
105 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:47:42.67 ID:A/qMTM8A0
状態遷移を書くためにgotoか再帰のどちらかは必要になると思うんだよ
使わなければ地獄のようなコードかfiberみたいなのを使うことになる
それで結局シンプルなgotoに回帰する
昔は無限ループ仕込んでバカのPCハングさせるのが楽しかったのにな
今のはちょっとやそっとじゃびくともしないからつまらん
108 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:53:40.64 ID:WuNMwxC+0
なんでifやfor使っちゃいけないの?
まじめに
109 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:54:36.68 ID:gC/VhqLH0
>>84 宮廷の研究所にロンダしたときプログラミングできないのは俺だけ
学部時はプログラミング必修だったけど
110 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:56:47.15 ID:b1w4vlyn0
プログラムなんて動きゃあいいんだよ
人に説明するために作ってるわけじゃないんだから
112 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 15:59:26.41 ID:SDkNrj8a0
forループぐらいつかわせろや
113 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:01:29.51 ID:xYyXDvqT0
以前vtuneでコンパイラの吐き出すコード眺めたらfor使う位ならdo while使えって事になった
>内部的にはループやifはもちろん多用しているが、ゲームを定義する部分にifやループを使わない。
どういうこと。制御構造のないスクリプトみたいなものでも作ったの?
もちろん分岐予測キャッシュミスのペナルティを回避する為に
全ての条件分岐やループはswitch文かインデックスジャンプに置き換えている
常識だな
117 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:04:20.83 ID:/EQDpyv30
ドラクエ3ばりのRPG作りたいなと思ってるけど
なんか面倒で放置中
118 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:07:59.32 ID:DbVU7eZ00
120 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:10:55.63 ID:jPfgP0L40
>>48 て何がそんな駄目なの
エラー処理にgoto使ってるソースって大抵こんな感じじゃないか
goto使いやがった
>>1が居ると聞いてやってきました
122 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:11:43.57 ID:m4T9xiCt0
むしろif文とfor文しか使わない
>>115 >>118 linusの書いたgitのコードを見たら、エラー処理を最後にまとめて
エラーが起きたらgotoで飛ばすって流儀だったけど。
124 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:13:18.81 ID:2GPRQIrX0
>>48を批判するだけじゃなくてすれたいに沿って書き直せよ
>>123 リーナスが頭が悪いってだけだろ
何も矛盾しない
126 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:14:52.68 ID:CiqV7K85P BE:534017164-PLT(12001)
minecraftってもっと軽くできないのか
skyrimより重いんだが
127 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:14:59.95 ID:2Lhmw9QU0
if then else
128 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:15:07.35 ID:uLyH0kph0
プロはPERFORM使うよな
129 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:15:33.61 ID:lfQKs1cg0
ゲームプログラミングで挫折するのは素材作り
おれは諦めた
IDENTIFICATION DIVISION.
CONFIGURATION SECTION.
iPhoneアプリで糞みたいなゲーム作って儲けたいのに
MAC買う敷居が高すぎるwwwwwwwwww
132 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:16:43.22 ID:uLyH0kph0
>>120 全然ダメじゃないから心配すんな
批判してるのはむしろニワカだから
133 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:17:34.45 ID:juM5bArh0
forは他の繰り返し構文で代用できるとして
if無しでどうやってプログラムを組めと?
?で全て済ませろと言うのかw
134 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:19:00.78 ID:pZfLtXBC0
ちょ、じゃあ何使ったらいいんだよ
>>120 このエラー処理にgoto使ってわざわざコード見難くしてどうすんだよ
そもそもCなら関数分けして
>>48のgotoをreturnにしたほうがよっぽどわかりやすいから必須でもなんでもない
136 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:19:45.06 ID:uLyH0kph0
try cacheが使えない言語でマジメにエラー処理やろうとしたら
goto使うのが一番シンプルでわかりやすいんだよ
gotoをつかっちゃいけないって思い込んでるのは
そういうまともなプログラムを組んだことがない奴なんだよ
FileResult fileLoad()
{
ウィルスコード張るなよ?
139 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:21:03.40 ID:T6BY/WZO0
エラー処理が必用になる時点でクソコードだよ
140 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:21:24.00 ID:J+8Y+R2n0
>>126 最適化がどれぐらい進んでるのかしらんが、java製だからな
今さらネイティブコードに書き直すとは思えないし、諦めたほうがいい
141 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:22:07.40 ID:b1w4vlyn0
ifはforでもdo〜whileでも代用しようと思えばできるじゃん
繰り返し構文のなかに論理的に組み込まれてるから
goto文がよろしくないってんで新しくできたのがsato文
んでその次にできたのがkato文
覚えんの大変だわ
143 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:22:36.46 ID:uLyH0kph0
>>135 わかってないな、その関数で始めた処理の回収は、その関数内でやるのがベストなんだよ
returnで帰った先で回収させるなんてド素人もいいところだ
144 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:23:14.24 ID:jPfgP0L40
>>135 意味解らん
gotoで飛んだ先は後処理だろ 関数分けしてreturnした所で何がどうなるの?
145 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:23:32.86 ID:juM5bArh0
>>136 使う変数に初期値を設定してwhile(true)〜スコープ最後とエラー処理でbreak
初期値のままの変数は、ループを抜けたら解放処理
その場合多重ループは使わず、必要なら関数に逃がす
これで大体すっきりしたコードになる
146 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:23:35.59 ID:Brs/TmE30
(´・ω・`)フラグ立たないじゃない
148 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:25:14.01 ID:uLyH0kph0
>>145 シンプルだけど、そんなコーディングしてる人めったにいないから
パッと目になんのためにループしてんの?って思われてしまうのが欠点
プログラム初心者に向けた教則本でのスパゲッティコードの説明で
goto乱用を例にしているせいでgoto=癌だという刷り込みがなされてるよね
150 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:26:46.42 ID:b1w4vlyn0
>>139 頭の悪い奴がよくこういうこと言うけど
実際はエラー処理をきれいに組み込むことで行数を圧倒的に削減できることも少なくないんだよ
151 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:26:53.83 ID:juM5bArh0
>>148 while(true){ //ここからエラー処理用のスコープ。繰り返しではない
とか書いておけば十分じゃない
152 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:28:05.69 ID:T6BY/WZO0
>>150 110 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/08/12(日) 15:56:47.15 ID:b1w4vlyn0 [1/3]
プログラムなんて動きゃあいいんだよ
人に説明するために作ってるわけじゃないんだから
{
}
Result loadFile(const char* aFileName, size_t aSize)
{
Result result = {};
result.buffer = calloc(aSize);
if (result.buffer) {
FILE* fp = fopen(aFileName, "rb");
if (fp) {
}
else {
result.code = Result::Error_1;
}
return result;
}
154 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:29:45.31 ID:b1w4vlyn0
>>152 別に行数誇りたいんなら止めはしないが、労力は少ないほうがいいだろ
>>143 お前は真面目に
>>48が優れたコードだと思ってるのかよ救いようがないな
その関数で全てを回収するコードしか書いたことないとかさすがに経験浅すぎ
わかりやすいコードかくならどうしても必要になる
>>48とか組み込みでよく見るし
その現場のコード規約次第
単純にgoto多用してるだけで批判してるアホしかいないからここ
157 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:30:21.14 ID:kKge5goG0
>>151 do {
中身 エラーとか起きたらbreakする
} while(0);
は噂には聞いてたけど実物見るとびっくりする
158 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:30:49.04 ID:cfBs0F8U0
159 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:31:23.93 ID:crOuoEAz0
あああああ、間違って途中で書き込んじまう。あきらめた
161 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:31:54.05 ID:b1w4vlyn0
163 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:32:33.41 ID:A/qMTM8A0
例外処理に対する俺の見解
例外が発生したら大抵は修復不可能なエラーだ
だからログ吐いて終了
void error()
log("death")
exit()
これに加えて自分で言語作ってみて例外処理がライブラリ構築にとって
ものすごく邪魔だとわかったから、使わなくなった
164 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:32:44.97 ID:uLyH0kph0
>>155 いやマジで素人は黙ってたほうがいいぞ
関数呼び出す側がそこまでエラー処理の面倒みやきゃいけないような
糞関数を設計する時点で、もう完璧な糞プログラムだから
165 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:33:38.83 ID:vZ7Pp7VQ0
ゲーム難しすぎる
もう発売延期でもおとなしく受け入れる
166 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:33:48.89 ID:Brs/TmE30
goto論議が気持ち悪い理由は結局のところ処理主体で考えてるからなんだろうな
その後のオブジェクト指向ではその辺は解決されてるしなあ・・・
167 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:34:29.42 ID:udQEHzuW0
>>163 例外発生して当然の処理だってあるんだぜ。
do 〜 while(0) でループしないブロックを書いてbreakで脱出とか、テクニックに走りすぎてる
感じがする。
goto err; とか goto finish; でいいような気がする。
169 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:35:12.29 ID:uLyH0kph0
>>162 ちょっと聞くんだが、
>>48の例でお前が言うようにエラー時にreturnで帰ったとして
その後にfpとbuf1とbuf2をどう回収すんの?
>>164 確かに普段使ってるのがオブジェクト指向言語だからオブジェクト指向触ったことない人間には違和感あるのかな
だったらelse文使ってリターンすればいい
確かに手間にはなるがそっちのがわかりやすいし単に後処理のif文が痛々しい
171 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:35:33.12 ID:1CrOeGho0
パターンマッチとガードと再帰ってこと?
172 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:35:46.38 ID:T6BY/WZO0
>>163 それじゃだめだ
エラーを開発元に送信処理しないと
173 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:37:03.96 ID:fVQe8VgN0
ファミコンのドラクエ1をそっくりそのまま作るとしたら何言語を覚えればいい?
>>169 その質問さっきもあったけど引数渡しちゃいけないってルールが脳内に存在してんの?
まあそう考えるとやっぱり
>>170がベストだが
175 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:38:26.50 ID:q+mTwwoE0
プログラミングは便利で効率いいのを誰かが書いてくれるからそれをコピペするもん
アホみたいにプログラミング自体に詳しくなるのは
プログラミングに人生捧げようとしてくれる人柱だけでいい
アホみたいにというかアホだと思うけど
176 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:38:44.84 ID:Brs/TmE30
177 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:39:00.44 ID:iETjPHBj0
178 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:39:49.76 ID:KiZ6rkj20
179 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:40:01.72 ID:kKge5goG0
>>161 いや、善悪でなく ただビックリと。
聞いてみたらなんかSH2だか何だかのコンパイラのgotoが腐ってたらしくそれが身に付いたとか
181 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:40:17.64 ID:uLyH0kph0
>>174 なんで内部処理で使ってる変数を引数でわたす必要があるの?
それこそ意味不明だろ、なんのための構造化だよ
つか、関数がそんな意味不明なやりとりをしたらいいっていう発想の時点で
オブジェクト指向とかもまともに理解できてるとも思えないんだが
182 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:40:45.42 ID:5LEcjr1i0
web言語ってので一番新しいのがpython rubyなんだろ?
Cとかの一番新しいのって何なの
183 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:40:45.71 ID:hyMQ+IWM0
完全論破されて悪態ついてる素人ワロタ
>>175 そういう思想の現場とか、コピペ元のソースが効率いいかとか、保守しやすいかとか
判断できない連中がコピペしまくってるから、ビックリすようなコードが代々引き継がれてたりするな。
185 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:42:03.86 ID:Brs/TmE30
>>48が綺麗に見えないのは処理主体のコードだから
後のオブジェクト指向だともっと綺麗になるでしょ
186 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:42:42.92 ID:b1w4vlyn0
オブジェクト志向でも引数も戻り値もなるべく少なくするようにするけどね俺は
なぜかっていうとうまく説明できないけど、それらの数がごちゃごちゃしてると
呼び出し元でコード書くときにめんどくさい
187 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:42:51.81 ID:juM5bArh0
>>157 ちゃんと説明があれば問題ないんじゃね
それを推し進めて
#define TRY_BEGIN do{
#define TRY_END }while(false);
とか定義しておいたら使い勝手がいいような。・・・流石にわかりにくいか。
188 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:43:25.44 ID:A/qMTM8A0
>例外発生して当然の処理だってあるんだぜ。
関数の返り値がエラーを返す場合はis系に書き換える
if a.isAny()
>エラーを開発元に送信処理しないと
こうだな
void error()
system("mail
[email protected] < echo 死にます、さようなら")
exit()
>>181 だから
>>170がベストかもなっていってるじゃねえか
一応言い逃げしておくとCだから引数って書いたんだよ
190 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:44:22.03 ID:RIwPmftP0
> 内部的にはループやifはもちろん多用しているが、ゲームを定義する部分にifやループを使わない。
アフォかこいつ
191 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:44:48.26 ID:Brs/TmE30
>>186 オブジェクト指向の場合仕組の中に初期化処理と後始末処理を呼び出す機能が
付いてるからシンプルなんだよな・・・・
というか過去の言語の反省でできてるので使いやすいのは当たり前なんけどな
人の汚いコードを綺麗に掃除するのが好き
>>182 いままでCで書かれていたようなジャンルのコードは、Cしかないんじゃないの。
置き換えるとしたら、せいぜいC++くらいか。
でもC++もどうかって感じ。
海腹川背みたいなゲーム作りたいけど難易度高そう
195 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:46:29.37 ID:juM5bArh0
>>168 1関数内で、エラー処理の部分が1箇所ならそれでもいいと思うが
2箇所以上になると、goto err2; とか書かなければいけなくなって
あまりエレガントじゃない気がする。
goto err;と書くべきところでgoto err2;と書いたら致命的なバグになるだろうし。
196 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:46:49.76 ID:T/hgX4If0
goto 10
198 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:48:02.59 ID:uLyH0kph0
>>189 だからお前の案では何の解決にもなってないんだが
それでも綺麗に回収できないだろ
参照が消えればガベージコレクションが動いて綺麗に回収してくれる言語しか知らないからそういう発想になるんだな
199 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:48:59.64 ID:kKge5goG0
>>187 エディタに自動インデントされないためにそうしてるのも見たことある
ただ、breakもそうしてくれないとなぜこんなとこにbreakあってコンパイル通るのか?ってちょっと悩む
オブジェクト志向でやってくと
最終的に
処理の制御構造に分岐と繰り返しが消せるってだけだよ
>>182 PythonやRubyが登場したのは1990年前半ぐらいだぞ
実は言語としてはかなり古い
Scalaですら2003年だしなあ
C(静的片付けでCのシンタックス)の新しいのはC#(2000年誕生)もしくはRustだっけ。これは2010年ぐらい。
202 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:50:10.05 ID:Cp3o+hQQO
スレタイしか読んでないけど
はい、いいえの選択肢とかIf文使わないでどうやんの?
203 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:50:13.21 ID:T6BY/WZO0
まあ
エラーは必ず出るものとしてリリースできて文句言われない環境を作るのが一番だって
アホみたいに完璧にする必用がない
204 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:50:33.67 ID:Brs/TmE30
>>200 でもそれがいいんだよ
スパゲティにならないし
処理を主とする古い言語はきつい
変数名にbufとかaとか意味不明な名前つけちゃうようなセンスのキチガイ、
キャメルケース使えってのにアンバー繋ぎするキチガイ、
定数にenum使わずにintの-1とか使っちゃうキチガイ、
確保したメモリを余裕で解放しないで放置しまくるキチガイ、
そしてデバッグコード放置
そんな人間と組んだときは最悪だった。そいつのコード全部書き直しよ。
>>202 confirmオブジェクトにハイとイイエの時の処理を移譲する
207 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:51:53.73 ID:A/qMTM8A0
ハンドルは開いた関数内で閉じるのが一番楽だという結論に達した
gcは拾ってくれないし、手動でうっかり閉じ忘れるなら
ハンドルに囲まれた処理を一まとめにした方がいいや
>>198 はあ?お前アホ?
>>170ならガベージコレクトしてるだろ?
わざわざ後処理でifしてるほうが気持ち悪いわ
一生
>>48のコードで満足してろよ
209 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:53:49.21 ID:juM5bArh0
>>199 #define TRY_FAILED break
なんてのを付け加えておくといいかもね。
使い方
FILE* fp = NULL;
TRY_BEGIN
〜
fp = fopen(・・・
if(!fp)TRY_FAILED;
TRY_END
if(fp)fclose(fp);
な感じで。
210 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:53:58.11 ID:uLyH0kph0
>>208 C言語知らずにツッコんでるのなら初めからそう言えよ、すげー時間の無駄だったわ
ちょい前のjavaだって、ハンドルのクローズ呼ぶのは必須だったよ
ガベージコレクトとか関係ない
ただの無知
>>210 お前相当頭悪いだろ
まあ
>>48なら確かにelse文を描くことはないだろうが
規約でgoto使えって言われてる以外で俺はCで
>>48をかくことはねえよ(笑)
ID:UGJM6cQu0
なんかは富豪プログラミング世代だろ
名前空間の汚染とか配慮が無いし無意味な関数量産しそうだわ
OOやってるとか言ってるがオブジェクト指向すら意味わかってなさそうだしクソなクラス作りまくってそうだな
javaは、gotoの代わりに例外処理finalyがまんま対応する。
C#では、全否定されたが
215 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:57:53.60 ID:VYXs45PL0
gotoを使ってはいけないという風潮、FUCKだね。
216 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:58:00.84 ID:crOuoEAz0
>>209 それ最終的にS. R. Bourneのコードみたいになりそうだな
217 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:58:17.49 ID:ttQmsD2E0
やだ・・・プログラマ怖い・・・
218 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 16:58:37.19 ID:Cp3o+hQQO
>>206 よくわかんないけど、できるにはできるのね
業務でエクセル触るレベルだからプログラムとかさっぱりだわ
後藤さんをDisるなよ
え…?マジで
>>48が優れてると思ってるの?
確かに
>>48よく読んでなかったからelseなんていっちゃったがじゃあelseの意味をお前らはどう捉えてたんだよ
221 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:00:13.47 ID:YjJN8FWd0
場所によるとしかいえないな
if が使えないなら?を使えば良いじゃない
223 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:00:25.24 ID:T6BY/WZO0
まあ
いまどきCなんて使わないだろ
webならphp
ゲームならas3
java
それ以外は必要がない
224 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:02:21.68 ID:gC/VhqLH0
225 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:02:49.61 ID:uLyH0kph0
226 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:03:30.22 ID:juM5bArh0
エラーが起きたらreturnで戻すのはありっちゃありだが
全ての場所に解放処理を書かなきゃいけないから、バグが入りやすいんだよね
・同じ処理を繰り返して書かない(コピペしない)
・同じ目的のコードはできるだけ一箇所に集める
という原則に反する
>>204 結局、どのインスタンスを渡すかという部分ではswitchなりif〜elseが要るんだけどな
228 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:05:13.20 ID:T6BY/WZO0
組み込みとか選ぶ時点でアホだろ
神経磨り減るのは目に見えてる
気楽に稼げるもの選べよ
いくらでもあとから修正できるからな
>>220 優れてるも何も、文法が違うだけで基本度の言語も同じことするよ。
お前のは、処理の結果がイコールだからと言って
処理構造変えてるだけ
今はAOP使うから処理構造そのままで
条件分岐なんていらない。
おまえのも五年ぐらい古い
>>225 やっぱお前阿呆だったか
演算子の優先順位くらい考えろよ
そういやー
大学の時、教授がオブジェクト指向オブジェクト指向ってうるせーほど言ってたな
宗教みたいだった
232 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:06:02.77 ID:Brs/TmE30
>>227 インスタンスを配列で管理してその配列のインデックスを作るように処理を書いていけば
たぶん自分で書く範囲の中では制御文はかなり減らせる
一番減らせて全体のループ一つだけになる
分岐や繰り返しの方が
オブジェクト指向よりはるかにわかりやすいからな
オブジェクト指向の多態の部分は完全な欠陥品
>>229 いやだからそういった中でgotoが優れているのを示すのにわざわざ
>>48を出すのがおかしいっていってんだよ
Cなら
235 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:09:23.03 ID:uLyH0kph0
>>230 MRDBのスクリプト言語だからな、まあ知らんと思うけど
>>227 今はDIコンテナが渡すから
渡すなんてしない
>>234 だからその書き方は、javaのfinalyと全く変わらん。
AOPだって流れのコードに無いだけで同じ
おまえのだけは、関数の戻り値を不定数に増やしてて別モン
オーバーライドするよりクロージャで関数オブジェクト渡すほうがずっとシンプルで分かりやすいからな
オブジェクト指向はクロージャがなかった時代に高階関数を曲がりなりにも実装できたという価値しかない
今では無用の長物
かけたかけた
// 適当なResult構造体定義
void main() {
Result result1 = loadFile("hoge", 1024);
Result result2 = loadFile("hoge", 1024 * 100);
if (result1.succeed()) {
}
if (result2.succeed()) {
}
}
Result loadFile(const char* aFileName, size_t aSize)
{
Result result = {}; // C99
FILE* filePtr = fopen(aFileName, "rb");
if (filePtr) {
result.buffer = calloc(aSize);
if (result.buffer) {
if (fread(result.buffer, sizeof(char), aSize, filePtr) == aSize) {
result.code = Result::Succeed;
fclose(filePtr);
return result;
}
}
return result;
}
>>232 具体的にはどうやるんだ?
オブジェクト型配列[i].メソッド();
でも多態性は実現できるだろうけど、
順番に実行されない限り、iの値をいじるのにswitchやif使いそうだけど
DoやWhileを使おう
>>238 イベントモデルは登録側は楽だけど
定義側が大変だからケースバイケース
だからって継承が答えじゃないけどね
また途中であげちまった、俺あほだわ。。。
244 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:17:22.36 ID:wY8T4pQ+0
条件文が受け入れられないって分かる。年取ってくるとパソコンのマニュアル最初から読まないとだめなんだっていわれた
245 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:18:13.72 ID:uLyH0kph0
>>239 よくできたけど誰もが通る道だね
俺も20年前はそんなコード書いたこともあったわ
で、結局はgotoの汎用性の前に負けた
246 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:20:17.09 ID:juM5bArh0
お前らdo〜while構文で、
>>48を書き換えてみましたよ。
Cならこれが最適解だと思うんだがどうかな?
#define TRY_BEGIN do{
#define TRY_FAILED break
#define TRY_END }while(false)
FILE *fp=NULL;
unsigned char *buf1=NULL,*buf2=NULL;
TRY_BEGIN;
if((buf1=calloc(1024,sizeof(char))==NULL) TRY_FAILED;;
if((buf2=calloc(1024*100,sizeof(char))==NULL) TRY_FAILED;;
…
if((fp=fopen("hoge.bin","rb"))==NULL) TRY_FAILED;;
if(fread(buf1, sizeof(char), 1024, fp)<1024) TRY_FAILED;;
if(何かエラー) TRY_FAILED;;
if(何かエラー) TRY_FAILED;;
…
TRY_END;
if(fp) fclose(fp);
if(buf2) free(buf2);
if(buf1) free(buf1);
247 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:21:04.35 ID:wh1ZHFqE0
>>239 fcloseしてないルートあるやんw
あと、そのloadFileのインターフェース使い物にならんだろ。
248 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:21:59.31 ID:Brs/TmE30
>>240 後はリストにキューのようにインスタンスを処理したい順に配置して先頭から順に・・・とかさ
でもあんまり制御文なしに拘るとパズル化してきてそれこそ別な意味でわけわからん
コードになるからなww
つつつつかわないよ
結果モデルはC#だと結構普通
そういやsetjmp/longjmpとかいうのもあったな。lib何ちゃらでエラー処理に使ってたような
Cな人は自分で使うこともあるのかな
253 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:24:37.25 ID:kKge5goG0
>>246 breakするついでに #define TRY(a) if(a)break
とかどうだろう?
254 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:24:50.29 ID:a7a+afCT0
最近のOSを使ってるなら、
一発実行して終わるアプリなら、後始末なんてしなくても良い
やっとかけたわ
// 適当なResult構造体定義
void main() {
Result result1 = loadFile("hoge", 1024);
Result result2 = loadFile("hoge", 1024 * 100);
if (result1.succeed()) {
}
if (result2.succeed()) {
}
}
Result loadFile(const char* aFileName, size_t aSize)
{
Result result = {}; // C99
FILE* filePtr = fopen(aFileName, "rb");
if (filePtr) {
result.buffer = calloc(aSize);
if (result.buffer && fread(result.buffer, sizeof(char), aSize, filePtr) == aSize) {
result.code = Result::Code_Succeed;
}
else {
free(result.buffer);
}
fclose(filePtr);
}
return result;
}
256 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:25:12.75 ID:uLyH0kph0
関数でもクラスでも同じようなもんだけど、設計する上で一番大事なのは
その関数・クラスのインタフェースをいかに最低限に絞り込んで
外部に余計な心配事を見せない事なんだよ
そのへんのカプセル化がうまくいってないと、少し規模が大きくなるだけで破綻するからな
だからインタフェースがすっきりするなら処理の記述内容が多少汚くても問題ない
むしろ処理記述を綺麗にするためにインタフェースをいじるのが本末転倒
257 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:27:16.00 ID:wh1ZHFqE0
>>255 result.successd()するならFILE*ラップするクラス書いた方が楽だろ?
258 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:28:49.60 ID:Brs/TmE30
>>252 処理主体のC言語で書く以上は
>>48をあんまりいじっても仕方ない気もするけどねw
なんていうかこれ以上のいい書き方はあるのかもしれないがC言語の範囲でそこまで
労力割いても時間だけ消費しそう
他の言語使えるなら素直に使いましょうのレベル
259 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:29:01.84 ID:qPfrpvJx0
大航海時代みたいな作品を作ろうと思う。
3Dにしたいと思う。
球面にしたいと思う。
作って。
260 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:29:29.38 ID:b1w4vlyn0
261 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:30:01.16 ID:bQo+cYYt0
構造化プログラミング・・・
262 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:30:10.77 ID:juM5bArh0
>>253 あーありだねそういうのも
どこかでそういう書き方みた覚えがあるわ
しかし見た目はどんどんシンプルになるが、新規メンバーに説明するのが面倒になりそう
>>256 そういう発想がもうオブジェクト指向に毒されてるんだよなあ
一番いいのはぱっと使うぶんには最小限の分かりやすいインターフェースが使えて
ややこしいことをしたくなった時には低レベルにアクセスしてゴリ押しもできる二段構えだよ
ゴリ押しの部分を無理に隠しても自由度が下がって
複雑なことをしたくなった時に余計にややこしいことになるだけ
if使わないでわざわざ頑張って三項演算子使ってたけど
正直処理回数も変わらなければ、処理速度も変わらないし
初心者の頃って基本文使うの嫌うんだよなぁ
265 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:30:49.44 ID:bUoki3/aP
今回のお題で、
>>48を処理するなら
readFile(function( str ){
//ここにはファイル読み込みが成功して、str変数に既に内容が入ってる
//したいようにする。
});
はい。ifもgotoも全部消しました。
繰返しがもともとなくてつまらんが
プロセッサやOSでプログラミングは変わる。
これを意識できないとダメ
268 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:33:03.17 ID:3WwPr6ug0
プログラミングやるためにラムダ計算って知っておく必要あるの?
269 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:36:46.83 ID:b1w4vlyn0
>>263 オブジェクト指向でも簡単に外からアクセスできるようにする方法はあるでしょ
簡単なとこだと変数をpublicにするとか
じゃあ、繰返しもやるか。
readFile(function( str ){
//ここにはファイル読み込みが成功して、ファイルが一行読まれた毎に呼ばれる。
//strには、一行入ってる。
//したいようにする。
});
繰り返して一行ごと読むので、巨大なファイルも大丈夫!!
272 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:38:14.97 ID:baHu4IPM0
よく業界知らないんだけどプログラミングの業界ってどんな風に分かれてんの?
業務系
組み込み系
ゲーム系
web系
あとどんなのあるんだろ
>>268 要らないんじゃね
Javaやphpにない要素は基本おぼえなくて問題なし
C#ですらうちの職場は2.0どまりだし
274 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:41:05.11 ID:juM5bArh0
>>270 便利だと思うが、エラー通知したいときどうすんの?
readFileの内部で例外投げるくらいしか思いつかんのだが。
グローバル変数にエラーコード設定とかやめてくれよw
275 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:42:15.94 ID:uLyH0kph0
>>263 いや俺もそうだよ、2段構えもいいよね
最初に引数が膨大にある超汎用関数を作って
次に引数を減らして機能限定したラッピング関数を作る
基本的に継承とか好きじゃないから、クラスでも同じような実装にすることも多いわ
>>274 readFile( function( str){
//成功したとき
}, function(){
//失敗したとき
});
ラムダ式使うのにラムダ計算の理論はいらんやろ
278 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:45:34.41 ID:juM5bArh0
>>276 なるほどw
C#だと良さそうだなそれ
実用的には、失敗したときの関数の引数に、エラーコードが設定されるようにしておけばいい感じ
279 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:47:15.63 ID:lfQKs1cg0
おまえらゲームプログラミングの話しろよw
はよ作品上げろ遊んでやる
ラムダ式でやってるだけでで
class Logic {
method readOne( str){ }
methos error ( ){}
}
class FileReader C{略}
FilerReader fr = new FilerReader( new Logic() )
fr.readFile();
なんていう、委譲の基本にしても。
>>276の方が簡潔に書けるから今は好まれる
画像処理でfor文使う情弱はいないよな?
282 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:51:22.77 ID:Io1zeBNG0
動けば何でもいいんだよ
動かなかったら言語のせいにすればいいんだよ
283 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 17:52:19.14 ID:kKge5goG0
>>281 シェーダー書いた後パスの分だけforで回してます、生まれてきてごめんなさい
284 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 18:05:11.05 ID:xYyXDvqT0
>>281 WinのDIBとか上下逆に格納されてる奴はwhile使う事を前提に設計してあるの?
お前らすげーなー。
俺ならこんなどうでもいいことに悩んだりしないで、
>>48のコードでもサクッと使ってすまちちまうけどな。
実際、自分の流儀で書き直したくなるほどの糞コードとか見たことないし、
他人の書いたコードをベースに機能追加する場合でも、そいつの流儀に合わせて追加していくからなぁ。
で、あいた時間でもっと別のこと考えるわ、俺なら。
286 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 18:16:04.27 ID:9BOv0Wg8O
Renko = 0
NTUY = 0
if Kenmo = 1 Then
Renko = Renko + 1
Else
NTUY = NTUY + 1
ENDif
型でオーバーロードさせて呼び出せばifはいらんな
forはイテレーター使うからwhileでいい
SIGGRAPHってシーグラフって読むのね。なんでやねん
289 :
番組の途中ですがアフィサイトへの転載は禁止です:2012/08/12(日) 19:20:54.12 ID:tPtUR27Mi
>>281 使ってるよー
でも最内周ループは減算ループとか変数追い出したりとか気を遣ってるからソコソコ速度は出てる。
アセンブラまで踏み込む気力がナッシングっていう。
高速列挙でfor使う
292 :
番組の途中ですがアフィサイトへの転載は禁止です:
>>290 ちなみに今時のコンパイラだとインラインアセンブラ無しにMMXやSSE扱えるの?