X



今までみた絶望的なソースコード [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2015/04/17(金) 23:00:30.63ID:55USvuES
今井氏:ソースコード公開は、社長のティム(*2)の意向です。彼はバリバリのプログラマーで、初期の「Unreal Engine 1」を
1人で書いた人ですが、若い時に雑誌に載っていたコードを書き写して勉強したそうです。それで今の若い人にも、プロのソー
コードとはこういうものだというのを見せたいという願いがあって、ソースコードを公開しています。本当に今のゲーム業界の
事情を憂いてる1人だと思います。(*2)Epic Gamesの創業者兼CEOであるTim Sweeney氏

出村氏:読みやすいコードですよ。「C++」というのは、黒魔術(高度な計算)が多くなりがちな言語ですが、
そういうこともなく、すっきりしていて目的の機能も探しやすい。解読しやすいコードなので、確かにお手本になると思います。

僕は初代のゲームボーイからプレイステーション 2の頃くらいまでゲームプログラマーだったのですが、ゲームプログラミングでは
必ず数学が出てきます。行列とか三角関数とか。もちろん今でもまったく不要になったわけではありませんが、そういう知識の
重要性は薄れてきていると思います。「Unreal Engine」では特にそうです。
http://game.watch.impress.co.jp/docs/interview/20150417_698349.html

初級者から中級者へ昇格する時期は、ほぼどのようなソースコードでも読める程度にプログラミング言語に精通し、
また偉いプログラマーの提唱したデザインパターンも一通り理解したくらいの時期である。

すると、プログラミング言語の持つあらゆる機能と、偉いプログラマーの提唱するあらゆる技術を使わねばならない
という思い込みが発生する。そしてHello Worldにまで崇高なオブジェクト指向や壮大なデザインパターンを
適用しようとしだすのである。

その結果、
* 大量のクラス
* 迷路のような変数渡し
* 底なしに深いネスト
などといった凄いものが生まれる。また、条件分岐に三項演算子を乱用するなどの症状も多く見受けられる。
最終的には第三者にとって読みにくい保守性の悪いスパゲッティコードが生成されることになる。
http://monobook.org/wiki/%E4%B8%AD%E7%B4%9A%E8%80%85%E7%97%85
0289デフォルトの名無しさん
垢版 |
2015/09/12(土) 11:30:03.64ID:LQnjc3KY
一休「虎が屏風から出てくれば捕まえられるのにな〜ああ〜残念だなあ〜」
将軍「出したよ」
って状況?
0293デフォルトの名無しさん
垢版 |
2015/09/12(土) 22:51:55.44ID:QkMrh2wn
971 名前:名無しさん@七周年[] 投稿日:2006/11/11(土) 00:56:10 ID:M8+ahUZV0
自称スーパープログラマー某

強烈加齢臭
メール見ない メール無視
ドキュメント見ない ドキュメント無視
説明聞かない 説明無視
話聞かない 話無視
ガム→むっちゃー むっちゃー むっちゃー むっちゃー
煎餅→バリバリバリバリバリバリ
菓子パン→モグモグモグモグモグモグモグモグモグモグ
カップアイス→むっちゃー むっちゃー ペロペロペロペロ

フロアすべてに響き渡る ばかでかいくしゃみ 当然手でおさえない
半径10mで耳鳴り、ひどいと頭痛誘発

異音と異振動
ドスーン!ドスーン!ドカーン!ドカーン!
バコーン!バコーン!ズドン!  ズドン!
机が近いとマウスポインターが飛ぶ
誤操作誘発
書類だしたりしまうだけでドカンドカン

口と鼻から異音
ふんっっ
ふんっーーーーー  
マジでうっとおしい30秒ごと

備品破壊 貸与P C 破壊 他人のもの破壊

奴の作ったスクリプトとプログラムは使えない
バグりすぎ
0295デフォルトの名無しさん
垢版 |
2015/10/16(金) 11:13:43.44ID:MgVZXFFO
結論:そんな奴はいない
0296デフォルトの名無しさん
垢版 |
2015/10/17(土) 10:29:18.04ID:y7npm2M7
コメントが一切なくて、ものすこく複雑な処理をやっている。
0297デフォルトの名無しさん
垢版 |
2015/10/18(日) 01:32:01.64ID:dIyeGV/1
ものすごく」の程度は人によるからなあ
複雑そうに見えてイディオム使ってるだけのもあるし
自動生成された物を見て複雑だなあって思ってる場合もあるし
0298デフォルトの名無しさん
垢版 |
2015/10/18(日) 08:42:48.35ID:hNO3eRm0
他人のコード見てコメント無いだの少ないだの騒ぐ奴
本人はクソポエムみたいなコメント書く上にコメントの整備はしないし何がしたいのやら
0301デフォルトの名無しさん
垢版 |
2015/10/19(月) 12:29:11.07ID:rwl2uo8/
ああー俺もコメントポエム書きてえぇーーー
本当はポエマーなんだよな俺
俺だってソースにポエム埋め込みてーんだよ!
0302デフォルトの名無しさん
垢版 |
2015/10/19(月) 13:51:30.68ID:taFAn/tB
>>300
最近思うが、更新履歴、コメントはいらないと思う。
その代わりバージョン管理だけは、キッチリ機械的にやって欲しい。

更新履歴は忘れる奴が必ずいるから、更新履歴で探すと見つからずにハマる。
コメントもプログラマの現状の理解と感情で書いてあるので、変な先入観で見てしまいハマる時がある。

自分で書いていても、10年位経つと何書いているか解らない。
また、自分の名前が書いてあると、忘れた頃に質問が来る。

更新履歴、コメントは百害あって一利無しだと思う。
0305デフォルトの名無しさん
垢版 |
2015/10/20(火) 21:25:15.03ID:4r71MZXj
/*
此処に入って来たらマジやばい。
誰も周りは助けてくれないし。

あのリーダの下は、本当に最悪。
もう、2度と一緒に仕事をしたく無い。
*/


当時、こんなコメントを読んで大変なやぁ…って思った。
0306デフォルトの名無しさん
垢版 |
2015/10/21(水) 01:07:37.37ID:sxvP468z
/*
そのリーダーなわけだが。 ↑そりゃないだろー
引継ぎも満足にできねーで去りやがって
自身の無能を知ってゆっくり野垂れ死んでね
*/
みたいなしょーもない愚痴コメントって実際少ないよね
0307デフォルトの名無しさん
垢版 |
2015/10/21(水) 01:09:50.98ID:VfFXTbSK
だってそんなコメント無駄だし、むしろコメントの質を下げる要因にしかならないじゃん
0308デフォルトの名無しさん
垢版 |
2015/10/21(水) 10:26:45.72ID:ayvh7TPn
こういうコードが入る時点で、
コードレビューも行われていないような
ところだろうなってわかるねw
0310デフォルトの名無しさん
垢版 |
2015/10/21(水) 12:47:50.82ID:ayvh7TPn
夢じゃなくて品質を上げるのは
コードレビューしかないよ。

人によって生産性が100倍違うのも当たり前なのは
コードが違うからなんだし。
0311デフォルトの名無しさん
垢版 |
2015/10/21(水) 13:05:30.14ID:t8SS3rgX
コードレビューで品質が上がる…
ますます、夢見る夢子ちゃん確定の発言だな…
0315デフォルトの名無しさん
垢版 |
2015/10/21(水) 13:22:22.09ID:ayvh7TPn
>>313
> 質の低いコード混入するのは室の低いマしか雇えないブラックだからだよ…

じゃあどうするかって話。

コードレビューしかないね。
0316デフォルトの名無しさん
垢版 |
2015/10/21(水) 13:24:43.24ID:ayvh7TPn
コードレビューするのはどの業界でも当たり前の話なんだけどね。
新聞社でも新人が書いた記事をそのまま出すわけ無い。
0317デフォルトの名無しさん
垢版 |
2015/10/21(水) 13:36:50.19ID:t8SS3rgX
いや、そんなに必死になって連投して否定しなきゃならないようなことじゃないから…
コードレビューは、より良いコードを生み出す為でなく、室の悪いマのリカバリをする
だけだって、言ってるだけだよ…
0318デフォルトの名無しさん
垢版 |
2015/10/21(水) 14:11:29.69ID:ayvh7TPn
質が悪いのを直せば、質が良くなるのは当たり前ですね。

あんたコードレビューして、あんたが直してるの?
質の悪いプログラマは成長しないの?
0319デフォルトの名無しさん
垢版 |
2015/10/21(水) 14:23:16.59ID:t8SS3rgX
だ・か・ら、質が良くなるんじゃなく、悪い質じゃなくなる=極普通、になるだけだよ…
未成熟なマなら成長したりするかもしれないけど、まあ、質の悪いマは多分成長
できなかったから、質の悪いマになったんであって、それが成長するというのは
見通し的に暗いと思うよ…
0320デフォルトの名無しさん
垢版 |
2015/10/21(水) 14:31:53.30ID:ayvh7TPn
えとなぁ、どんな優れた奴でも普通の時代がなかったわけじゃないんだよ。
駄目なやつがいきなり優秀になるわけないんだよ。
極普通になって、それから成長すれば良くなるだろ。
0321デフォルトの名無しさん
垢版 |
2015/10/21(水) 14:32:32.69ID:ayvh7TPn
だいたいな、悪いやつがなんでずっと悪いかって言うと、
それが悪いってわかってないからなんだよ。
それを教えるのもコードレビューなわけで。
0322デフォルトの名無しさん
垢版 |
2015/10/21(水) 15:01:27.32ID:t8SS3rgX
すまんな、あんた俺と違って幸せな環境にいるみたいだから、どこまで行っても平行線だわ…
0323デフォルトの名無しさん
垢版 |
2015/10/21(水) 15:36:18.25ID:FAEyKeYo
相手が単に嫌いとか理解できないってコードへの無意味な批判が無くなれば、コードレビューもありだとは思うんだけどな。

俺はテストパターン増やしたくないから、ダメなら途中でreturn false
最後まで到達出来ればreturn trueする関数書くけど、
returnは必ず一つ、って人となかなか言い合いになる。
0324デフォルトの名無しさん
垢版 |
2015/10/21(水) 16:58:05.40ID:FpYnt2Cv
>>323
MISRAで決まってるから仕方あるまい。
俺はその辺resultにNG入れておいて
resultがOKじゃなかったら残りの処理はスルーして最後にreturnで返すようにしてる。
業界によって作法が違うからいろいろあるよな。
0327デフォルトの名無しさん
垢版 |
2015/10/21(水) 20:17:59.29ID:OBk5CbCK
教えて解るのなら誰も苦労していない。
解る人も少数ながら、もちろんいるが。
0328デフォルトの名無しさん
垢版 |
2015/10/21(水) 20:54:58.96ID:ayvh7TPn
>>326
早期returnっていうのは、パターンを減らすのが
目的じゃなくて可読性を上げるのが目的。
可読性っていうのは人間にとっての読みやすさだから。

人間が読まないコードであるなら別にどんな書き方でもいいが、
そうじゃないだろう?
0330デフォルトの名無しさん
垢版 |
2015/10/21(水) 22:38:13.09ID:/T8JjMZv
>>328
確かに可読性は人間にとっての読みやすさだけど、
理由じゃなくてただ単語の意味を説明してるだけなのが笑える
0332デフォルトの名無しさん
垢版 |
2015/10/22(木) 00:05:08.39ID:85+TyuI7
可読性というか、一見上から下に素直に流れる関数のように見えて実は
文の最後にちょろっとreturnがあるのを見落とす、なんてのはあるね。
0335デフォルトの名無しさん
垢版 |
2015/10/22(木) 00:36:51.97ID:T+i/NslY
その理屈だと、そのreturnと同じ位置にi++とかあった場合、
それを見落とすんだろうなw
0336デフォルトの名無しさん
垢版 |
2015/10/22(木) 07:19:28.30ID:cVNIxwjP
>>326
減らないけど、記載するマトリックスは減るんだよ。
通るifとかswitchを列挙して、真の場合偽の場合を分けないといかんから、
頭でフラグ持ったとしても、通過する限り「処理なし」と書く必要がある。
処理なしと書く限り、処理なしのエビデンス取らなきゃならん。
それが嫌なら、通過もしないようネストを深くしなきゃならん。

>>328
可読性ももちろん上がるな。対応する括弧を追う必要も無いし。
0337デフォルトの名無しさん
垢版 |
2015/10/22(木) 07:45:32.98ID:ItL1bO9f
俺はすぐにreturnしちゃうけど、可読性は上がるよね
I/Fの仕様が変わった場合、戻り値の変更漏れとかたまにあるけど
0338デフォルトの名無しさん
垢版 |
2015/10/22(木) 07:58:12.26ID:85+TyuI7
>>336

if (...) {
}
// 関数の終わり

だと管理しなきゃならなくて if (...) return; だと書かなくていいの?妙な規則だね。
ひとごとながら、if (...) return 関数(); とか大丈夫なのかと思ってしまった。
0341デフォルトの名無しさん
垢版 |
2015/10/22(木) 08:50:50.09ID:4CKbsFsK
コーディングルールにある通りでいい
なければ多数派に合わせるようにコーディングルールを決めてしまえばいい
0342デフォルトの名無しさん
垢版 |
2015/10/22(木) 09:17:53.18ID:maFj6EVC
>>338
一つならどちらでも書く必要があるよ。

条件1と条件2と条件3がある場合、
if 条件1
 処理1
else
 不処理フラグ
endif
if !不処理フラグ、条件2
 処理2
else
  不処理フラグ
endif
if !不処理フラグ、条件3
 処理3
endif
なら管理必要。

if 条件1
 処理1
 if 条件2
  処理2
  if 条件3
   処理3
  endif
 endif
endif
は、パターンは減るけど可読性悪すぎ。
0343デフォルトの名無しさん
垢版 |
2015/10/22(木) 09:49:22.97ID:HZFkMara
>>325
コードレビューしないことじゃなく、コードレビューして
「成長可能かもしれない奴が周りにいる」という
環境が幸せなんだよ…
0344デフォルトの名無しさん
垢版 |
2015/10/22(木) 09:59:20.88ID:T+i/NslY
>>342
それ(後半のコード)を早期returnパターンにすると更にわかりやすくなる。

if ! 条件1
 return
endif

処理1
if ! 条件2
 return
endif

処理2
if ! 条件3
 return
endif

処理3

言語によっては、更に短くすることができる。わかりやすさがぜんぜん違うね。

unless 条件1 then return
処理1
unless 条件2 then return
処理2
unless 条件3 then return
処理3
0345デフォルトの名無しさん
垢版 |
2015/10/22(木) 15:28:35.78ID:UfhH3fQc
>>344
そうそう。だから割と俺は早期リターンでネスト深めずに処理出来るものはしたいんだよね。
0346デフォルトの名無しさん
垢版 |
2015/10/22(木) 22:05:36.79ID:85+TyuI7
>>342
等価なのは後者なんだからやっぱりテストパターンは関係ないでしょ。
あとマトリクスと言ってるけど、もしかして前者の形で書いた場合は処理1を通過せずに
処理2を実行するケースも考慮しないとならないとか?

ツール使わずに手作業でC1カバレッジ管理しなきゃならないプロジェクトなんて
やったことないからよくわからないけど、大変だねw
0349デフォルトの名無しさん
垢版 |
2015/10/23(金) 00:41:38.26ID:zprVcqwH
基本的に腐ってる人っていうのは
ルールで決まってるから、そうなんだ。みたいに
ルールのためのルールを愛する。
自分で考える脳を持たない。
0350デフォルトの名無しさん
垢版 |
2015/10/23(金) 01:25:49.95ID:m57abRZG
>>346
だから後者はネスト深くて嫌いなの。
当たり前だろ。
通る限り、例え結果がわかりきってようがその分のパターンも書かなきゃならんし、
スタック壊れた時のことも考えにゃならん。

ツールがどうのとかMISRAがどうのいってるお偉方には意味ないの。
机の上で紙でデバッグできなければ意味がない、検算は手計算、の人らだよ。
0351デフォルトの名無しさん
垢版 |
2015/10/23(金) 02:16:55.96ID:/EixmTmg
こういう派閥争いの結果、複数の形式が混ざった糞コードが生まれるのであった
0353デフォルトの名無しさん
垢版 |
2015/10/23(金) 07:59:46.43ID:80H6ZXcx
>>350
じゃあまとめると、>>323で途中returnを使わないとテストパターンが増えるかのように書いて
いたのは、おまえが深いネストが嫌い+おまえのところの妙な管理 の合わせ技ってことね。
0356デフォルトの名無しさん
垢版 |
2015/10/23(金) 10:06:04.43ID:zprVcqwH
>>351
この問題に関して言えば、どっちがいいかは
ツールで計測可能なので、それ持ち出せば一発だよw
0358デフォルトの名無しさん
垢版 |
2015/10/24(土) 01:19:57.16ID:geIuzf9u
>>344
だせーから1行でretunrnできねーならガード使うな
0359デフォルトの名無しさん
垢版 |
2015/10/24(土) 02:07:32.78ID:WDIk1BPV
意外と盛り上がってて吹いた

if文のネストを減らすためにマトリクスで何がくるか特定して分岐させる

switch(state){
0360デフォルトの名無しさん
垢版 |
2015/10/24(土) 02:11:21.79ID:WDIk1BPV
書き損じた
a => 1 または 0
b => 2 または 0
c => 4 または 0
d => 8 または 0
として
state = a | b | c ・・・;
switch(state){

}
ってやつね
これでif文が綺麗に消えてくれる(ことが多い)
0361デフォルトの名無しさん
垢版 |
2015/10/24(土) 02:15:24.10ID:WDIk1BPV
んでここがちょっと言いたかったことだけど
このstate switchは当然状態の数だけ関数も長くなるんだが
この場合いくら長くなっても可読性は全く落ちないという特性がある
みんなで使って幸せになろう
0362デフォルトの名無しさん
垢版 |
2015/10/24(土) 02:18:17.66ID:WDIk1BPV
この場合エラー処理もえらい単純化できる
つまりdefault:に来たもの=エラーということ
最初に状態設計をきっちり行えばこの方法が今のところ最も効率が良いと
言ってしまおうかな
0363デフォルトの名無しさん
垢版 |
2015/10/24(土) 02:24:39.55ID:ymg0YeVe
>>361
ifの代わりにswtchになってるだけじゃねーか。

こういうのは関数テーブル使えばいいんだよ。
0364デフォルトの名無しさん
垢版 |
2015/10/24(土) 02:59:11.22ID:WDIk1BPV
そいうことを言いたいわけじゃないんだがなあ
上でエビデンスの話が出たが
まさにswitch内で定義した状態の数だけパターンを取ればいいって単純化の話なんだよ
たとえばifで
if(a) x
if(b) y
と書くと2^2の4パターンだけど
この調子で増やしていくとどんな状態があるのか目視では見落としやすい

state swichなら以下の通りテストパターンと完全に一致する
state = a | b;
swich(state)
case a0b0: break;
case a0b1: break;
case a1b0: break;
case a1b1: break;
default: /*error*/ break;
}
つーかテストパターンを同時にを書いていく前提なら上で挙がってたコードは全部論外だろう
0365デフォルトの名無しさん
垢版 |
2015/10/24(土) 03:08:51.12ID:ymg0YeVe
そして関数テーブルにすると

1テストパターン = 1関数になるので
もっと単純化できるという話。
0366デフォルトの名無しさん
垢版 |
2015/10/24(土) 03:14:15.86ID:WDIk1BPV
関数テーブル覚えたての人なのかなあ
そういう言語機能寄りの話は今してないの判んないかな
0367デフォルトの名無しさん
垢版 |
2015/10/24(土) 03:29:27.06ID:WDIk1BPV
この方法は見ての通りコードレビューも短期間で終わるのが判ってもらえると思う
状態が一箇所にまとまってる
状態によって必要になる処理が一箇所にまとまってる
どういう条件でエラーになるか簡単に調べられる

設計書やテストパターンとも一致させやすい
全て一箇所にまとまってるのがポイント
結局これ以上の物はできないんじゃないかな
0368デフォルトの名無しさん
垢版 |
2015/10/24(土) 08:06:55.53ID:0ZjLfKs0
テストケース数に合わせる為にロジックを分かりにくく記述する本末転倒手法
0373デフォルトの名無しさん
垢版 |
2015/10/24(土) 11:49:30.75ID:obIKqu8m
returnパスが増えるのが問題だと思うのなら
returnの代わりに関数の最後にgotoしていると考えればいい。

if (...) return
hoge
hoge
return



if (...) goto last
hoge
hoge
last:
return

goto使うのが駄目ならbreakにすればいい。

do {
 if (...) break
 hoge
 hoge
} while(0)
return

見ての通りreturnは一つである。
これで解決する程度のことを問題視することに何の意味があるのか?
0374デフォルトの名無しさん
垢版 |
2015/10/24(土) 11:55:22.07ID:geIuzf9u
>>364
なんで意味ないことするの?
同じもんを外に抜き出してるだけじゃん。

そもそも入出力のパターンはテストで確認すりゃいいんだから、コードをパターンと一致させるのは無駄としか言いようがない
0376デフォルトの名無しさん
垢版 |
2015/10/24(土) 21:00:18.64ID:ab4ZAHgL
>>375
いや、解らない?

returnを一つにするというのはこれらと同じように、
無意味なことだって言ってるんだよ。
0379デフォルトの名無しさん
垢版 |
2015/10/25(日) 10:47:02.39ID:ffqR9+22
コーディング規約の為のコードじゃなくて、なんのためのコーディング規約かを考えろよ
そんなだからクソコード量産するんだよ
0380デフォルトの名無しさん
垢版 |
2015/10/25(日) 11:28:29.91ID:4coy8BX6
性能が必要ないカテゴリでは性能を低下させるコードでも許容されるだけ
性能が必要なカテゴリではレビューでもreturnパスどうのより、そのコードが
速いかどうかだけが吟味される。
0381デフォルトの名無しさん
垢版 |
2015/10/25(日) 11:55:36.82ID:ZLo4bLRN
基本は可読性高いコードが評価高い
それでパフォーマンス悪くてもボトルネック部分の速度を改善すればいい
しかし速度重視の難解コードはクソソースと呼ばれ後ろ指さされる
速度はアーキテクチャで解決していくのがベストだわな
0382デフォルトの名無しさん
垢版 |
2015/10/25(日) 12:38:39.93ID:4coy8BX6
だから、それを待てるカテゴリは、元々性能が問題になるようなカテゴリじゃ
なかったというだけ、「次がある(キリッ」「後がある(キリッ」なんて言ってられる
生温いとこじゃないものも沢山ある。
0383デフォルトの名無しさん
垢版 |
2015/10/25(日) 12:56:40.32ID:cc/DQ18H
>>377
こっちには、return複数あったらだめなんて言う
意味のないレビューをする人はいないんでねw
0384デフォルトの名無しさん
垢版 |
2015/10/25(日) 12:59:23.67ID:cc/DQ18H
>>381
> しかし速度重視の難解コードはクソソースと呼ばれ後ろ指さされる

いつも思うんだが、速度重視したらなんで難解なコードになるのかわからん。

速度が速いコードっていうのは無駄がないコードなわけで、
普通は可読性が高いんだよ。


速度を速くするアルゴリズムがある場合で、そのアルゴリズムが
複雑な場合に限って、速度を重視したら難解になるんだが。
0385デフォルトの名無しさん
垢版 |
2015/10/25(日) 13:27:45.84ID:OGZ3vopz
> しかし速度重視の難解コードはクソソースと呼ばれ後ろ指さされる

非プログラマか初心者が抱きがちな想像やな

>>384
それな
0387デフォルトの名無しさん
垢版 |
2015/10/25(日) 13:58:48.56ID:EgatYw+c
皆、自分の意見こそが正しく正義であると信じ、
他者を必要以上に攻撃する傾向がみられる
なるほどこれが宗教ってやつか
世界から戦争が無くならない訳だ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況