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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
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
2015/07/25(土) 21:09:32.45ID:paoVPCKX
子供の頃の知識で止まってるんだろーなーw
どうせBASICだろう
232デフォルトの名無しさん
垢版 |
2015/07/25(土) 21:16:42.87ID:aUQYbDBF
質問主の言葉が足りないってのは分かるけどー、
読んだら分かるよねー。
いわゆる信者っていうの?
批判的なことに条件反射しちゃうんだよね。分かる分かるー
っていーかぁ、そもそもスレチだしw?
両方消えてw
2015/07/25(土) 21:20:01.43ID:paoVPCKX
質問主の言葉が足りないんだろ。
それが全てだろ。
何言ってるんだか。
234デフォルトの名無しさん
垢版 |
2015/07/25(土) 21:23:52.55ID:aUQYbDBF
プログラマーって定義されてないと怒るよねwww
10言わなきゃわかんねーのかw小学生かwww
2015/07/25(土) 21:59:39.64ID:paoVPCKX
>>234
言葉が足りないのなら補えばいいが、
言葉が間違ってるからな。

お前Underscore.jsのソースコード見たこと有る?
この質問に答えてみるといいよ。
2015/07/25(土) 23:47:54.23ID:BtkcRlE5
用語じゃないけどさ、
前に似たようなjQuery信者が煽ってたのでソース読んだが、
同じ変数に別の意味の再代入とか平気でしててはっきり言って汚かったよ

ソースすべてを読んだわけではないが、その部分出したら綺麗とのたまってたね…
こういうのとは絶対一緒に仕事したくないわ
2015/07/25(土) 23:49:07.03ID:BtkcRlE5
用語 -> 擁護
238デフォルトの名無しさん
垢版 |
2015/07/25(土) 23:58:07.11ID:o6XQJ+h/
>>235
>>222
が正しい文に直してくれているし、思い込みをしなければ、正しい意図を紐解けるというのはすでに立証されているんだがw

だから、質問がクソであり、それを思い込みで解釈したやつもクソだなと思うんだけど、俺にどう考えを直して欲しいのかなwww?
2015/07/26(日) 00:46:52.14ID:Nu2ySp1+
webアプリの伝票を表示する画面のHTMLで、テーブルタグでエクセル方眼紙作ってあった
列とか必要以上に多くて無駄にセルの結合してあった
240デフォルトの名無しさん
垢版 |
2015/07/26(日) 01:31:08.71ID:Q7ZjjhPq
方眼紙便利なのに、なぜ方眼紙アプリが売っていないのか。
2015/07/26(日) 08:33:31.95ID:Lmm8STAE
>>236
どのファイルだよ?
言ってみ。
2015/07/26(日) 14:59:14.63ID:p/433SX/
>>241
https://github.com/jquery/jquery/blob/a644101ed04d0beacea864ce805e0c4f86ba1cd1/src/core/access.js
bulkの型がめちゃくちゃ
後ろでは関数として呼び出し、別の意味になってる

https://github.com/jquery/jquery/blob/master/src/event.js
tmpなどの使い回し
変数宣言を先に行う規定があるのか、全体的に読みにくい
2015/07/26(日) 15:22:58.35ID:p/433SX/
他も見たが、基本的に短い変数名ばかりだし、やっぱり読みにくいよ
決してvimほど汚くはないが、これを綺麗とか言っちゃうのは信者だけ
2015/07/26(日) 18:16:05.04ID:7EBqSyeY
短い変数名だから読みにくいっていうのは
間違った考え方だな。

スコープが十分小さいなら
長い名前にする必要がない。
2015/07/26(日) 18:27:45.85ID:7EBqSyeY
>>242
> bulkの型がめちゃくちゃ

なるほど。

君は動的型付け言語における
オーバーロードの書き方を知らないようだ。

オーバーロードっていうのはね。
関数の引数(シグネチャ)が違う同じ名前の関数を複数作成できる機能
呼び出すときに、引数から適切な関数を判断する。

だけど動的型付け言語ではそれが出来ないから、
関数の内部で、引数が省略されたかどうかやその型を見て処理を変える。

このコードはそれをやってるんだよ。
2015/07/26(日) 18:57:52.47ID:p/433SX/
>>245
反論の内容には同意するが、ほぼ無関係だな

まず問題の変数は引数ではないので、根本的に間違えてる
宣言時にbooleanで初期化した後、分岐して関数入れてる

また、短いスコープであれば問題にならない事が多いのも同意するが、
特定ブロックで使う物を、関数全体スコープで宣言してるので該当しないな

何より、オーバーロードをしようが、通常は実装は汚くはならない
普通は最初に適切に分けるからな
2015/07/26(日) 19:06:24.32ID:7EBqSyeY
> まず問題の変数は引数ではないので、根本的に間違えてる

引数でないから間違えというのは短絡的だな。
コード見ればわかるようにkey(引数)がnullかどうかによる処理だ

> 特定ブロックで使う物を、関数全体スコープで宣言してるので該当しないな
JavaScriptにブロックはない。だからスコープを重視するならば
先頭に書くのが正しい。(俺はスコープ無視するけどなw)

> 普通は最初に適切に分けるからな
最初に分けるのが必ずしも正しい訳じゃない。

コード短いんだし、直してみれば?
2015/07/26(日) 19:08:06.07ID:7EBqSyeY
> JavaScriptにブロックはない。
一応訂正しておくか、ECMAScript5の範囲においてはだ。
2015/07/26(日) 19:33:15.94ID:p/433SX/
>>247
>引数でないから間違えというのは短絡的だな。
>コード見ればわかるようにkey(引数)がnullかどうかによる処理だ
だから何なんだとしか
引数でないのだから、オーバーロードの実装のためという言い訳はできない
他の型を意図的に代入し、使い回した時点で汚い

>JavaScriptにブロックはない
function、if、switch...ときちんとブロックはある上に、
スコープもライフタイムも違う

なんか前絡んできた人と同じ人っぽいからもう止めるよ
不毛だし
2015/07/26(日) 19:49:23.12ID:EHWerROz
bulkの使いまわしはコミットログを見たけど理由がよくわからん

先頭にvarを固めているのはhoistingを理解していたからだろう
2015/07/26(日) 20:21:13.01ID:7EBqSyeY
>>249
ん? 帰れ帰れw
2015/07/26(日) 20:22:00.95ID:7EBqSyeY
>>250
> 先頭にvarを固めているのはhoistingを理解していたからだろう

この人は、hoistingを理解できないんだろうねw
253デフォルトの名無しさん
垢版 |
2015/07/26(日) 20:26:36.68ID:k1EUM6QH
なんでJQueryの実装をそんなにマンセーしたいのか理解できない。
ライブラリなんて小規模で作るもんだから、読みやすさという基準は自分の主観で決めるもんだし。
後付けの解釈を止めろよ。
2015/07/26(日) 20:59:57.20ID:7EBqSyeY
逆でしょ?
読みやすさという基準は自分の主観で決めるもんなのに
jQueryの実装をそんなに馬鹿にしたいのか理解できない。
2015/07/26(日) 21:26:25.41ID:p/433SX/
>>250
hoistingはコード規約で予防しているという事かな?
それでも、宣言はブロックの先頭と制約するだけで十分な気がする
関数スコープに広げて宣言する理由がわからない
2015/07/26(日) 21:31:57.10ID:p/433SX/
ああ、意味がわかった
関数スコープで使用していた上に、ブロック内でも使用した場合か
それならバグになる可能性あるな
2015/07/29(水) 01:58:34.13ID:CRqVMe5R
やっぱVBの配列(0)で1要素あるってバグの元だろ
引継いだコード前任者が全員間違えたまま使ってて戦慄した
258デフォルトの名無しさん
垢版 |
2015/07/29(水) 09:27:40.97ID:7C0TLIvw
まあ、多い分にはいいんじゃないの?
行番号付きだった頃から配列は1要素を予備とすることが多かったからねー。
C とかから入ると気になるだろうけど。
自分も今は気になるけどw
2015/07/30(木) 11:48:36.63ID:kCCSv6BW
DBに予備項目を作って空を保つのならわかるけど
配列の予備って意味若ランナー
2015/07/30(木) 21:27:47.71ID:kTMnRdAz
配列変数を空の状態またはその逆にするのが面倒なので0番目は使わずに取っておく
2015/07/31(金) 16:17:53.20ID:Dkg4afbG
動的配列の扱いが内蔵とVariantに代入する配列(Variant配列ではなく)で挙動が違うから
Variantで統一するとvbsと扱い同じにできて捗る
2015/07/31(金) 21:11:17.11ID:D+nD3a7O
絶望的なプログラマたち
2015/07/31(金) 21:48:20.19ID:17HtGFaS
main(){
int* p=1;
...
2015/08/01(土) 14:23:13.10ID:aojbSuUF
*(int*)0=0;
2015/08/01(土) 14:44:38.33ID:zTfC3ItF
printf("AとBの積は593です");
もうアホかとなんのためのCなんだか
2015/08/01(土) 19:29:40.69ID:KBiDhOrm
593 は素数なんだが‥
2015/08/01(土) 21:31:08.62ID:cZ9y3hcR
そうすっうすね。
2015/08/01(土) 21:39:39.36ID:5DNs6h6K
1*593
2015/08/01(土) 22:19:25.72ID:zTfC3ItF
>>266
掛け算作ってみろって言ったらこれが出てきた
270デフォルトの名無しさん
垢版 |
2015/08/02(日) 00:25:01.79ID:2p0cp8/y
>>269
最適化出来てる
100点
2015/08/02(日) 01:45:42.48ID:MF9TQU9s
掛け算作ってみろってのもおかしな物言いだな
そんなコミュ力だからおかしな物が出てくる
2015/08/02(日) 02:10:40.49ID:u7Ju2wRn
>>270
あれだと最適化しないコード作るほうが頭いるだろ
一文字づつあたらしいプロセス作って動かしてくとか?
2015/08/02(日) 07:33:48.36ID:AHQOj1TU
>>269
模範解答じゃん
2015/08/02(日) 17:23:58.64ID:MF9TQU9s
絶望って程でもない
2015/08/02(日) 18:37:05.66ID:sH3CMGQ2
無駄な計算してないとか優秀賞だな
2015/08/31(月) 12:38:09.95ID:B5sJg2ZW
>>12
なんで先頭じゃダメなの?
蟹飯本では当たり前のように先頭でまとめて宣言してるからそれに倣って先頭で宣言してるけど
2015/08/31(月) 13:10:34.00ID:KuTL4jkJ
>>276
変数は使用する直前で初期化して使うべきだから
初期化と宣言が別だと必ず未初期化で使うバグが出る
また関数が長く分岐が多くなると初期化されてるか判断が難しくなる
変数のスコープは小さければ小さいほどいい
関数先頭に宣言するのは昔のC言語の制約だったと記憶してるが今は上記理由からやめるべき
2015/08/31(月) 15:56:13.40ID:UXpAKMEr
>>277
なるほどサンクス
2015/09/01(火) 20:57:53.90ID:D3JacxmQ
>>277
どこの説?
2015/09/12(土) 03:17:33.09ID:k25bT+vJ
for ループから条件でgotoでforの外に飛んで帰ってもこないプログラム
281デフォルトの名無しさん
垢版 |
2015/09/12(土) 04:01:54.66ID:XAqQ9sMD
それ普通ですが
breakがまさにそういう動作だし、breakはgotoの一種と言われているわけだが
二重のforを一気に抜けるのにgoto使うとか普通のテクニック
return出来るならそっちのがいいけど

むしろforからgotoで抜けてまたgotoで戻ってくる方が恐ろしいが
そういうサブルーチン的な動作にgoto使われるとかなり鬱陶しいし
それでgotoが禁止されたわけだが
2015/09/12(土) 08:00:00.87ID:TErXHjBS
for使ってるの?甘いね
プロは全部gotoしか使わないよ
2015/09/12(土) 09:09:13.39ID:lTmP7o65
柔軟に環境に合わせられるのがプロ
284デフォルトの名無しさん
垢版 |
2015/09/12(土) 09:59:18.43ID:o99yCw3m
真のプロには、製品の方が合わせてくる。

企画原案に意見を求められるし、監修を頼まれる。
2015/09/12(土) 10:01:01.89ID:/tgR015i
>>284
それで真のプロのプログラマだと
どうなるわけ?
286デフォルトの名無しさん
垢版 |
2015/09/12(土) 10:11:11.52ID:o99yCw3m
>>285
その問題については既に解いてあるんだが、2chは数式を張り付けられないからなあ。
2015/09/12(土) 10:11:50.87ID:/tgR015i
>>286
つまり解いてないってことかw
2015/09/12(土) 10:56:04.07ID:8SKz5ytR
>>286
ほれ
http://formula.s21g.com/
2015/09/12(土) 11:30:03.64ID:LQnjc3KY
一休「虎が屏風から出てくれば捕まえられるのにな〜ああ〜残念だなあ〜」
将軍「出したよ」
って状況?
2015/09/12(土) 11:38:50.74ID:Xol1TNVu
>>285
達人ともなれば、むしろタンスが小指に恐れをなし、というアレだよ。
2015/09/12(土) 12:07:10.77ID:1pxDFhfx
>>286
zipでくれ
2015/09/12(土) 18:16:31.99ID:8SKz5ytR
>>289
https://www.youtube.com/watch?v=sXtYIgqKobc
2015/09/12(土) 22:51:55.44ID:QkMrh2wn
971 名前:名無しさん@七周年[] 投稿日:2006/11/11(土) 00:56:10 ID:M8+ahUZV0
自称スーパープログラマー某

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

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

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

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

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

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

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

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

更新履歴、コメントは百害あって一利無しだと思う。
2015/10/20(火) 10:03:44.13ID:ty6VD2oQ
>>298
うちにも居るわ、コメント赤ペン先生
2015/10/20(火) 15:31:58.74ID:mXSv7y9K
>>302
コメントの付け方が下手なだけだろ
2015/10/20(火) 21:25:15.03ID:4r71MZXj
/*
此処に入って来たらマジやばい。
誰も周りは助けてくれないし。

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


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

人によって生産性が100倍違うのも当たり前なのは
コードが違うからなんだし。
2015/10/21(水) 13:05:30.14ID:t8SS3rgX
コードレビューで品質が上がる…
ますます、夢見る夢子ちゃん確定の発言だな…
2015/10/21(水) 13:08:00.35ID:FpYnt2Cv
質を上げるんじゃない
質の低いコードの混入を防ぐんだ
2015/10/21(水) 13:20:09.67ID:t8SS3rgX
質の低いコード混入するのは室の低いマしか雇えないブラックだからだよ…
2015/10/21(水) 13:21:26.33ID:ayvh7TPn
>>311
否定するなら理由を言えよw
何も言えないから説得力0なんだぞ
2015/10/21(水) 13:22:22.09ID:ayvh7TPn
>>313
> 質の低いコード混入するのは室の低いマしか雇えないブラックだからだよ…

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

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

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

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

人間が読まないコードであるなら別にどんな書き方でもいいが、
そうじゃないだろう?
2015/10/21(水) 21:16:36.85ID:djlLkbUb
そうじゃないだろう?って俺に言われてもw
2015/10/21(水) 22:38:13.09ID:/T8JjMZv
>>328
確かに可読性は人間にとっての読みやすさだけど、
理由じゃなくてただ単語の意味を説明してるだけなのが笑える
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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