今井氏:ソースコード公開は、社長のティム(*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
今までみた絶望的なソースコード [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2015/04/17(金) 23:00:30.63ID:55USvuES319デフォルトの名無しさん
2015/10/21(水) 14:23:16.59ID:t8SS3rgX だ・か・ら、質が良くなるんじゃなく、悪い質じゃなくなる=極普通、になるだけだよ…
未成熟なマなら成長したりするかもしれないけど、まあ、質の悪いマは多分成長
できなかったから、質の悪いマになったんであって、それが成長するというのは
見通し的に暗いと思うよ…
未成熟なマなら成長したりするかもしれないけど、まあ、質の悪いマは多分成長
できなかったから、質の悪いマになったんであって、それが成長するというのは
見通し的に暗いと思うよ…
320デフォルトの名無しさん
2015/10/21(水) 14:31:53.30ID:ayvh7TPn えとなぁ、どんな優れた奴でも普通の時代がなかったわけじゃないんだよ。
駄目なやつがいきなり優秀になるわけないんだよ。
極普通になって、それから成長すれば良くなるだろ。
駄目なやつがいきなり優秀になるわけないんだよ。
極普通になって、それから成長すれば良くなるだろ。
321デフォルトの名無しさん
2015/10/21(水) 14:32:32.69ID:ayvh7TPn だいたいな、悪いやつがなんでずっと悪いかって言うと、
それが悪いってわかってないからなんだよ。
それを教えるのもコードレビューなわけで。
それが悪いってわかってないからなんだよ。
それを教えるのもコードレビューなわけで。
322デフォルトの名無しさん
2015/10/21(水) 15:01:27.32ID:t8SS3rgX すまんな、あんた俺と違って幸せな環境にいるみたいだから、どこまで行っても平行線だわ…
323デフォルトの名無しさん
2015/10/21(水) 15:36:18.25ID:FAEyKeYo 相手が単に嫌いとか理解できないってコードへの無意味な批判が無くなれば、コードレビューもありだとは思うんだけどな。
俺はテストパターン増やしたくないから、ダメなら途中でreturn false
最後まで到達出来ればreturn trueする関数書くけど、
returnは必ず一つ、って人となかなか言い合いになる。
俺はテストパターン増やしたくないから、ダメなら途中でreturn false
最後まで到達出来ればreturn trueする関数書くけど、
returnは必ず一つ、って人となかなか言い合いになる。
324デフォルトの名無しさん
2015/10/21(水) 16:58:05.40ID:FpYnt2Cv >>323
MISRAで決まってるから仕方あるまい。
俺はその辺resultにNG入れておいて
resultがOKじゃなかったら残りの処理はスルーして最後にreturnで返すようにしてる。
業界によって作法が違うからいろいろあるよな。
MISRAで決まってるから仕方あるまい。
俺はその辺resultにNG入れておいて
resultがOKじゃなかったら残りの処理はスルーして最後にreturnで返すようにしてる。
業界によって作法が違うからいろいろあるよな。
325デフォルトの名無しさん
2015/10/21(水) 18:10:39.28ID:ayvh7TPn326デフォルトの名無しさん
2015/10/21(水) 20:13:39.10ID:djlLkbUb >>323
途中returnだからってパターン減るわけないだろ
途中returnだからってパターン減るわけないだろ
327デフォルトの名無しさん
2015/10/21(水) 20:17:59.29ID:OBk5CbCK 教えて解るのなら誰も苦労していない。
解る人も少数ながら、もちろんいるが。
解る人も少数ながら、もちろんいるが。
328デフォルトの名無しさん
2015/10/21(水) 20:54:58.96ID:ayvh7TPn >>326
早期returnっていうのは、パターンを減らすのが
目的じゃなくて可読性を上げるのが目的。
可読性っていうのは人間にとっての読みやすさだから。
人間が読まないコードであるなら別にどんな書き方でもいいが、
そうじゃないだろう?
早期returnっていうのは、パターンを減らすのが
目的じゃなくて可読性を上げるのが目的。
可読性っていうのは人間にとっての読みやすさだから。
人間が読まないコードであるなら別にどんな書き方でもいいが、
そうじゃないだろう?
329デフォルトの名無しさん
2015/10/21(水) 21:16:36.85ID:djlLkbUb そうじゃないだろう?って俺に言われてもw
330デフォルトの名無しさん
2015/10/21(水) 22:38:13.09ID:/T8JjMZv331デフォルトの名無しさん
2015/10/21(水) 23:31:28.17ID:FpYnt2Cv returnが増えるほど可読性は下がる、という文化もある
332デフォルトの名無しさん
2015/10/22(木) 00:05:08.39ID:85+TyuI7 可読性というか、一見上から下に素直に流れる関数のように見えて実は
文の最後にちょろっとreturnがあるのを見落とす、なんてのはあるね。
文の最後にちょろっとreturnがあるのを見落とす、なんてのはあるね。
333デフォルトの名無しさん
2015/10/22(木) 00:12:05.24ID:T+i/NslY ねーよw
334デフォルトの名無しさん
2015/10/22(木) 00:17:58.38ID:85+TyuI7 いや、俺はあるw
335デフォルトの名無しさん
2015/10/22(木) 00:36:51.97ID:T+i/NslY その理屈だと、そのreturnと同じ位置にi++とかあった場合、
それを見落とすんだろうなw
それを見落とすんだろうなw
336デフォルトの名無しさん
2015/10/22(木) 07:19:28.30ID:cVNIxwjP337デフォルトの名無しさん
2015/10/22(木) 07:45:32.98ID:ItL1bO9f 俺はすぐにreturnしちゃうけど、可読性は上がるよね
I/Fの仕様が変わった場合、戻り値の変更漏れとかたまにあるけど
I/Fの仕様が変わった場合、戻り値の変更漏れとかたまにあるけど
338デフォルトの名無しさん
2015/10/22(木) 07:58:12.26ID:85+TyuI7 >>336
if (...) {
}
// 関数の終わり
だと管理しなきゃならなくて if (...) return; だと書かなくていいの?妙な規則だね。
ひとごとながら、if (...) return 関数(); とか大丈夫なのかと思ってしまった。
if (...) {
}
// 関数の終わり
だと管理しなきゃならなくて if (...) return; だと書かなくていいの?妙な規則だね。
ひとごとながら、if (...) return 関数(); とか大丈夫なのかと思ってしまった。
339デフォルトの名無しさん
2015/10/22(木) 08:03:40.68ID:+hTJzDQ0 MISRA準拠のときに困るからreturnは複数書かないな
340デフォルトの名無しさん
2015/10/22(木) 08:41:43.01ID:RDDiuVvk (関数){
hage
}
と
(関数)
{
hage
}
だとどっちがいいの?
hage
}
と
(関数)
{
hage
}
だとどっちがいいの?
341デフォルトの名無しさん
2015/10/22(木) 08:50:50.09ID:4CKbsFsK コーディングルールにある通りでいい
なければ多数派に合わせるようにコーディングルールを決めてしまえばいい
なければ多数派に合わせるようにコーディングルールを決めてしまえばいい
342デフォルトの名無しさん
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
は、パターンは減るけど可読性悪すぎ。
一つならどちらでも書く必要があるよ。
条件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
は、パターンは減るけど可読性悪すぎ。
343デフォルトの名無しさん
2015/10/22(木) 09:49:22.97ID:HZFkMara344デフォルトの名無しさん
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
それ(後半のコード)を早期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
345デフォルトの名無しさん
2015/10/22(木) 15:28:35.78ID:UfhH3fQc >>344
そうそう。だから割と俺は早期リターンでネスト深めずに処理出来るものはしたいんだよね。
そうそう。だから割と俺は早期リターンでネスト深めずに処理出来るものはしたいんだよね。
346デフォルトの名無しさん
2015/10/22(木) 22:05:36.79ID:85+TyuI7 >>342
等価なのは後者なんだからやっぱりテストパターンは関係ないでしょ。
あとマトリクスと言ってるけど、もしかして前者の形で書いた場合は処理1を通過せずに
処理2を実行するケースも考慮しないとならないとか?
ツール使わずに手作業でC1カバレッジ管理しなきゃならないプロジェクトなんて
やったことないからよくわからないけど、大変だねw
等価なのは後者なんだからやっぱりテストパターンは関係ないでしょ。
あとマトリクスと言ってるけど、もしかして前者の形で書いた場合は処理1を通過せずに
処理2を実行するケースも考慮しないとならないとか?
ツール使わずに手作業でC1カバレッジ管理しなきゃならないプロジェクトなんて
やったことないからよくわからないけど、大変だねw
347デフォルトの名無しさん
2015/10/22(木) 23:53:09.22ID:+hTJzDQ0 >>344
こっちの方が絶望的なコードに見える
こっちの方が絶望的なコードに見える
348デフォルトの名無しさん
2015/10/23(金) 00:40:43.08ID:zprVcqwH >>347
お前の目が腐ってるのでは?
お前の目が腐ってるのでは?
349デフォルトの名無しさん
2015/10/23(金) 00:41:38.26ID:zprVcqwH 基本的に腐ってる人っていうのは
ルールで決まってるから、そうなんだ。みたいに
ルールのためのルールを愛する。
自分で考える脳を持たない。
ルールで決まってるから、そうなんだ。みたいに
ルールのためのルールを愛する。
自分で考える脳を持たない。
350デフォルトの名無しさん
2015/10/23(金) 01:25:49.95ID:m57abRZG >>346
だから後者はネスト深くて嫌いなの。
当たり前だろ。
通る限り、例え結果がわかりきってようがその分のパターンも書かなきゃならんし、
スタック壊れた時のことも考えにゃならん。
ツールがどうのとかMISRAがどうのいってるお偉方には意味ないの。
机の上で紙でデバッグできなければ意味がない、検算は手計算、の人らだよ。
だから後者はネスト深くて嫌いなの。
当たり前だろ。
通る限り、例え結果がわかりきってようがその分のパターンも書かなきゃならんし、
スタック壊れた時のことも考えにゃならん。
ツールがどうのとかMISRAがどうのいってるお偉方には意味ないの。
机の上で紙でデバッグできなければ意味がない、検算は手計算、の人らだよ。
351デフォルトの名無しさん
2015/10/23(金) 02:16:55.96ID:/EixmTmg こういう派閥争いの結果、複数の形式が混ざった糞コードが生まれるのであった
352デフォルトの名無しさん
2015/10/23(金) 06:14:19.52ID:7M5zkgCU モーゼ<俺は中道を行くぞー!バリバリ ヤメテ!>
353デフォルトの名無しさん
2015/10/23(金) 07:59:46.43ID:80H6ZXcx354デフォルトの名無しさん
2015/10/23(金) 08:50:27.33ID:37mdpbh4 #define HOGE 128
355デフォルトの名無しさん
2015/10/23(金) 09:44:51.05ID:CBW+Dc/b >>353
何に噛み付いてるかわからんけど、増えるよ。
何に噛み付いてるかわからんけど、増えるよ。
356デフォルトの名無しさん
2015/10/23(金) 10:06:04.43ID:zprVcqwH357デフォルトの名無しさん
2015/10/23(金) 12:07:57.91ID:CBW+Dc/b >>356
必要、だから、文書化されてたらノーカンだよ。そういう意味では本来。
必要、だから、文書化されてたらノーカンだよ。そういう意味では本来。
358デフォルトの名無しさん
2015/10/24(土) 01:19:57.16ID:geIuzf9u >>344
だせーから1行でretunrnできねーならガード使うな
だせーから1行でretunrnできねーならガード使うな
359デフォルトの名無しさん
2015/10/24(土) 02:07:32.78ID:WDIk1BPV 意外と盛り上がってて吹いた
if文のネストを減らすためにマトリクスで何がくるか特定して分岐させる
switch(state){
if文のネストを減らすためにマトリクスで何がくるか特定して分岐させる
switch(state){
360デフォルトの名無しさん
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文が綺麗に消えてくれる(ことが多い)
a => 1 または 0
b => 2 または 0
c => 4 または 0
d => 8 または 0
として
state = a | b | c ・・・;
switch(state){
:
}
ってやつね
これでif文が綺麗に消えてくれる(ことが多い)
361デフォルトの名無しさん
2015/10/24(土) 02:15:24.10ID:WDIk1BPV んでここがちょっと言いたかったことだけど
このstate switchは当然状態の数だけ関数も長くなるんだが
この場合いくら長くなっても可読性は全く落ちないという特性がある
みんなで使って幸せになろう
このstate switchは当然状態の数だけ関数も長くなるんだが
この場合いくら長くなっても可読性は全く落ちないという特性がある
みんなで使って幸せになろう
362デフォルトの名無しさん
2015/10/24(土) 02:18:17.66ID:WDIk1BPV この場合エラー処理もえらい単純化できる
つまりdefault:に来たもの=エラーということ
最初に状態設計をきっちり行えばこの方法が今のところ最も効率が良いと
言ってしまおうかな
つまりdefault:に来たもの=エラーということ
最初に状態設計をきっちり行えばこの方法が今のところ最も効率が良いと
言ってしまおうかな
363デフォルトの名無しさん
2015/10/24(土) 02:24:39.55ID:ymg0YeVe364デフォルトの名無しさん
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;
}
つーかテストパターンを同時にを書いていく前提なら上で挙がってたコードは全部論外だろう
上でエビデンスの話が出たが
まさに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;
}
つーかテストパターンを同時にを書いていく前提なら上で挙がってたコードは全部論外だろう
365デフォルトの名無しさん
2015/10/24(土) 03:08:51.12ID:ymg0YeVe そして関数テーブルにすると
1テストパターン = 1関数になるので
もっと単純化できるという話。
1テストパターン = 1関数になるので
もっと単純化できるという話。
366デフォルトの名無しさん
2015/10/24(土) 03:14:15.86ID:WDIk1BPV 関数テーブル覚えたての人なのかなあ
そういう言語機能寄りの話は今してないの判んないかな
そういう言語機能寄りの話は今してないの判んないかな
367デフォルトの名無しさん
2015/10/24(土) 03:29:27.06ID:WDIk1BPV この方法は見ての通りコードレビューも短期間で終わるのが判ってもらえると思う
状態が一箇所にまとまってる
状態によって必要になる処理が一箇所にまとまってる
どういう条件でエラーになるか簡単に調べられる
設計書やテストパターンとも一致させやすい
全て一箇所にまとまってるのがポイント
結局これ以上の物はできないんじゃないかな
状態が一箇所にまとまってる
状態によって必要になる処理が一箇所にまとまってる
どういう条件でエラーになるか簡単に調べられる
設計書やテストパターンとも一致させやすい
全て一箇所にまとまってるのがポイント
結局これ以上の物はできないんじゃないかな
368デフォルトの名無しさん
2015/10/24(土) 08:06:55.53ID:0ZjLfKs0 テストケース数に合わせる為にロジックを分かりにくく記述する本末転倒手法
369デフォルトの名無しさん
2015/10/24(土) 09:12:17.67ID:TC4yVlx1 手段と目的をはき違える典型
370デフォルトの名無しさん
2015/10/24(土) 09:20:03.81ID:VUwmRE0S371デフォルトの名無しさん
2015/10/24(土) 09:22:43.39ID:t+kkgTrx テストファーストならそれもありだろ。ブラックボックスでいいんだから。
372デフォルトの名無しさん
2015/10/24(土) 10:30:44.28ID:ZlXT9FOV ネストが増えるのは問題だけど
returnパスが増えるのは問題じゃないのかな
returnパスが増えるのは問題じゃないのかな
373デフォルトの名無しさん
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は一つである。
これで解決する程度のことを問題視することに何の意味があるのか?
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は一つである。
これで解決する程度のことを問題視することに何の意味があるのか?
374デフォルトの名無しさん
2015/10/24(土) 11:55:22.07ID:geIuzf9u375デフォルトの名無しさん
2015/10/24(土) 20:55:59.55ID:Kwmejtcx >>373
それで解決するなら最初からそう書いてればいいんじゃないの
それで解決するなら最初からそう書いてればいいんじゃないの
376デフォルトの名無しさん
2015/10/24(土) 21:00:18.64ID:ab4ZAHgL377デフォルトの名無しさん
2015/10/25(日) 07:35:45.91ID:Ypes6KAb return複数あったらレビュー通らないじゃん
378デフォルトの名無しさん
2015/10/25(日) 07:48:44.18ID:5rFsh/xs コーディング規約って、一種類しか無いとでも?
ゆとりって面倒臭いな。
ゆとりって面倒臭いな。
379デフォルトの名無しさん
2015/10/25(日) 10:47:02.39ID:ffqR9+22 コーディング規約の為のコードじゃなくて、なんのためのコーディング規約かを考えろよ
そんなだからクソコード量産するんだよ
そんなだからクソコード量産するんだよ
380デフォルトの名無しさん
2015/10/25(日) 11:28:29.91ID:4coy8BX6 性能が必要ないカテゴリでは性能を低下させるコードでも許容されるだけ
性能が必要なカテゴリではレビューでもreturnパスどうのより、そのコードが
速いかどうかだけが吟味される。
性能が必要なカテゴリではレビューでもreturnパスどうのより、そのコードが
速いかどうかだけが吟味される。
381デフォルトの名無しさん
2015/10/25(日) 11:55:36.82ID:ZLo4bLRN 基本は可読性高いコードが評価高い
それでパフォーマンス悪くてもボトルネック部分の速度を改善すればいい
しかし速度重視の難解コードはクソソースと呼ばれ後ろ指さされる
速度はアーキテクチャで解決していくのがベストだわな
それでパフォーマンス悪くてもボトルネック部分の速度を改善すればいい
しかし速度重視の難解コードはクソソースと呼ばれ後ろ指さされる
速度はアーキテクチャで解決していくのがベストだわな
382デフォルトの名無しさん
2015/10/25(日) 12:38:39.93ID:4coy8BX6 だから、それを待てるカテゴリは、元々性能が問題になるようなカテゴリじゃ
なかったというだけ、「次がある(キリッ」「後がある(キリッ」なんて言ってられる
生温いとこじゃないものも沢山ある。
なかったというだけ、「次がある(キリッ」「後がある(キリッ」なんて言ってられる
生温いとこじゃないものも沢山ある。
383デフォルトの名無しさん
2015/10/25(日) 12:56:40.32ID:cc/DQ18H384デフォルトの名無しさん
2015/10/25(日) 12:59:23.67ID:cc/DQ18H >>381
> しかし速度重視の難解コードはクソソースと呼ばれ後ろ指さされる
いつも思うんだが、速度重視したらなんで難解なコードになるのかわからん。
速度が速いコードっていうのは無駄がないコードなわけで、
普通は可読性が高いんだよ。
速度を速くするアルゴリズムがある場合で、そのアルゴリズムが
複雑な場合に限って、速度を重視したら難解になるんだが。
> しかし速度重視の難解コードはクソソースと呼ばれ後ろ指さされる
いつも思うんだが、速度重視したらなんで難解なコードになるのかわからん。
速度が速いコードっていうのは無駄がないコードなわけで、
普通は可読性が高いんだよ。
速度を速くするアルゴリズムがある場合で、そのアルゴリズムが
複雑な場合に限って、速度を重視したら難解になるんだが。
385デフォルトの名無しさん
2015/10/25(日) 13:27:45.84ID:OGZ3vopz386デフォルトの名無しさん
2015/10/25(日) 13:36:24.73ID:dX8FdDRX 速度自体が無駄w
なんで初心者って無駄に速度にこだわるのw
なんで初心者って無駄に速度にこだわるのw
387デフォルトの名無しさん
2015/10/25(日) 13:58:48.56ID:EgatYw+c 皆、自分の意見こそが正しく正義であると信じ、
他者を必要以上に攻撃する傾向がみられる
なるほどこれが宗教ってやつか
世界から戦争が無くならない訳だ
他者を必要以上に攻撃する傾向がみられる
なるほどこれが宗教ってやつか
世界から戦争が無くならない訳だ
388デフォルトの名無しさん
2015/10/25(日) 14:06:03.46ID:ZLo4bLRN >>384
例えば時間のかかるデータ取得が100個あるとする
速度重視の場合早い時点でスレッド作って先行処理しておく
実際値使う箇所では中でスレッド待ちしていてなんでわけわからないことやってるんだと言われる
データなんてGet回すだけだろと
アルゴリズム難解といえば自前のHashMapは最初わからんかった
文字列足しこんでへんなビット演算やって
コメントもなかったからあれはなかなか理解されない
例えば時間のかかるデータ取得が100個あるとする
速度重視の場合早い時点でスレッド作って先行処理しておく
実際値使う箇所では中でスレッド待ちしていてなんでわけわからないことやってるんだと言われる
データなんてGet回すだけだろと
アルゴリズム難解といえば自前のHashMapは最初わからんかった
文字列足しこんでへんなビット演算やって
コメントもなかったからあれはなかなか理解されない
389デフォルトの名無しさん
2015/10/25(日) 14:19:23.12ID:Ypes6KAb390デフォルトの名無しさん
2015/10/25(日) 14:28:46.60ID:ZLo4bLRN391デフォルトの名無しさん
2015/10/25(日) 14:44:38.49ID:cc/DQ18H392デフォルトの名無しさん
2015/10/25(日) 14:46:27.63ID:GUBs2NMK クソソース書いといてその言い訳に速度重視とかザコ過ぎない?
お前が速度なんて語るの百年早いのはそのクソソースに丸出しなわけで
よくあんなクソソース書いててそんな態度取れるなっていう不思議な子知ってる
お前が速度なんて語るの百年早いのはそのクソソースに丸出しなわけで
よくあんなクソソース書いててそんな態度取れるなっていう不思議な子知ってる
393デフォルトの名無しさん
2015/10/25(日) 14:50:33.48ID:ffqR9+22 >>386
おまえは一生ソートに可読性の高いバブルソートでも使ってろよ
おまえは一生ソートに可読性の高いバブルソートでも使ってろよ
394デフォルトの名無しさん
2015/10/25(日) 14:51:52.18ID:ZLo4bLRN395デフォルトの名無しさん
2015/10/25(日) 14:52:32.88ID:Kc4QEJg+ 16進数やビット演算とか使ってるコードは見にくいからクソソースでいいですか?
396デフォルトの名無しさん
2015/10/25(日) 14:57:39.09ID:k5OqwX9E >>395
マクロ被せれば見やすくなる
マクロ被せれば見やすくなる
397デフォルトの名無しさん
2015/10/25(日) 16:48:51.96ID:h5QU0gDZ マスクをtypedefしとけば良いんじゃないの。
398デフォルトの名無しさん
2015/10/25(日) 17:17:54.69ID:Ypes6KAb399デフォルトの名無しさん
2015/10/25(日) 21:29:44.35ID:dX8FdDRX じゃあ何進数だったらマジックナンバー使っていいんだよ!
400デフォルトの名無しさん
2015/10/26(月) 14:29:54.04ID:o+3h9F6B 「定数は定義して使え」に対して
#define value_1 (1)
#define value_2 (2)
とかいう馬鹿もいるんだよな
#define value_1 (1)
#define value_2 (2)
とかいう馬鹿もいるんだよな
401デフォルトの名無しさん
2015/10/26(月) 14:33:27.86ID:otoyrobt #define value_one (1)
#define value_two (2)
これなら大丈夫(キリッ
#define value_two (2)
これなら大丈夫(キリッ
402デフォルトの名無しさん
2015/10/26(月) 17:54:07.18ID:2NCHgOBb #define ZERO 1
はGNUで見たことある。
はGNUで見たことある。
403デフォルトの名無しさん
2015/10/26(月) 18:15:12.01ID:oKHb2SJo マジックナンバーは基本だが定数を使った判定をあちこちに書かないことも重要
例えばファイルの存在チェックでファイルのビットフラグ立ってないことで判定
しかしフォルダも除外したい等仕様変更が予想される
その度多数の修正を入れるのは危険
isExist()などでラップして判定処理は1箇所にすると変更に強くテストも楽
例えばファイルの存在チェックでファイルのビットフラグ立ってないことで判定
しかしフォルダも除外したい等仕様変更が予想される
その度多数の修正を入れるのは危険
isExist()などでラップして判定処理は1箇所にすると変更に強くテストも楽
404デフォルトの名無しさん
2015/10/26(月) 23:04:21.65ID:nye5D6dJ マジックナンバーは必要悪でしょ。
周知されてて、全体で統一されてたら何も文句無いけどな。
日時未定を29991231で持ってるシステムに関わってたけど。
特定のビットが立ってないことと、ファイルの有無と、ディレクトリであるか否かはまた別問題ではないのだろうか。
isExistなのに、ディレクトリ除外しちゃうの?ライブラリなのに外から見た挙動変えちゃうの?って不安のほうが大きい。
そんなもんで判定せずに、判定箇所で切り分けるか、旧関数自体をassertで殺す方がマシ。
その度に多数の修正は躊躇なく入れるべき。
挙動を変えるのに、変えた意識が無い方が、
あり得ないくらい誰も原因に気づかない、どハマりする障害を起こす元。
周知されてて、全体で統一されてたら何も文句無いけどな。
日時未定を29991231で持ってるシステムに関わってたけど。
特定のビットが立ってないことと、ファイルの有無と、ディレクトリであるか否かはまた別問題ではないのだろうか。
isExistなのに、ディレクトリ除外しちゃうの?ライブラリなのに外から見た挙動変えちゃうの?って不安のほうが大きい。
そんなもんで判定せずに、判定箇所で切り分けるか、旧関数自体をassertで殺す方がマシ。
その度に多数の修正は躊躇なく入れるべき。
挙動を変えるのに、変えた意識が無い方が、
あり得ないくらい誰も原因に気づかない、どハマりする障害を起こす元。
405デフォルトの名無しさん
2015/10/27(火) 01:11:27.89ID:Ay4zuTZ6 >>404
例が悪かったからマイナンバー導入を例にする
従来は同一判定をequal()で中身は住所と指名で判定してたとしよう
この場合マイナンバー対応は中身をID比較にすればそれだけで対応完了
これが比較箇所に直接住所と氏名の比較を行っていた場合修正は時間がかかる
修正ソース毎にドキュメント書かないといけないプロジェクトでは発狂もの
言いたいのはやりたいことを外に出して実現手段は中に閉じ込めろってこと
要はカプセル化だが簡単なものだと忘れられることがよくある
例が悪かったからマイナンバー導入を例にする
従来は同一判定をequal()で中身は住所と指名で判定してたとしよう
この場合マイナンバー対応は中身をID比較にすればそれだけで対応完了
これが比較箇所に直接住所と氏名の比較を行っていた場合修正は時間がかかる
修正ソース毎にドキュメント書かないといけないプロジェクトでは発狂もの
言いたいのはやりたいことを外に出して実現手段は中に閉じ込めろってこと
要はカプセル化だが簡単なものだと忘れられることがよくある
406デフォルトの名無しさん
2015/10/27(火) 07:32:20.87ID:z76BTGB+ >>405
ダメ。
名前と住所で比較するロジックと、
マイナンバーで比較するロジックは別物。
それだけで対応完了にならないよ。
それでは、既存の比較するロジック全部洗って、それ呼んでる所を全部テストせなならん。
普通は、呼び出し側ソース修正と同じかそれ以上になるんだよ、ライブラリの挙動変更に対するドキュメントとテストって。
やりたい事をカプセル化するライブラリの、内部挙動が変わったらそれは最早カプセル化されてないとしか言いようが無い。
名前と住所ってのは、ユニークになるとは限らない情報だし、逆に歴なんか持ってたら2つ以上のレコードが一つを指すかもしれないレコードになるでしょ。
今まで同じだったけど今回からは違う人(田中一郎さんが昔住んでて、引っ越した後、今は別の田中一郎さんが住んでる)、や
今まで違う人だったけど、今回からは同じ人(同じ住所だけど、結婚して姓が変わってる)が出る改修はカプセル化失敗としか言えない。
まさにそういうシステム作ってたけど、「同一人物っぽい人」としか言えないから、警告しか出してない。
内部発番のシリアルのIDを比較していた所を、マイナンバーでひっかけるようにする、位の変更くらいじゃないの?その変更が通用するのは。
それでもパターンテストは必要。
呼び出し側を修正して、きちんと新しい関数が呼ばれている所からがテストのスタート地点。
修正ソース毎にドキュメントなんか普通作るよね。
波及コードだけどローレベルで担保されてるから大丈夫。は通用しない。
現実手段を閉じ込めるのは、同じ動きをする事が大前提。
ダメ。
名前と住所で比較するロジックと、
マイナンバーで比較するロジックは別物。
それだけで対応完了にならないよ。
それでは、既存の比較するロジック全部洗って、それ呼んでる所を全部テストせなならん。
普通は、呼び出し側ソース修正と同じかそれ以上になるんだよ、ライブラリの挙動変更に対するドキュメントとテストって。
やりたい事をカプセル化するライブラリの、内部挙動が変わったらそれは最早カプセル化されてないとしか言いようが無い。
名前と住所ってのは、ユニークになるとは限らない情報だし、逆に歴なんか持ってたら2つ以上のレコードが一つを指すかもしれないレコードになるでしょ。
今まで同じだったけど今回からは違う人(田中一郎さんが昔住んでて、引っ越した後、今は別の田中一郎さんが住んでる)、や
今まで違う人だったけど、今回からは同じ人(同じ住所だけど、結婚して姓が変わってる)が出る改修はカプセル化失敗としか言えない。
まさにそういうシステム作ってたけど、「同一人物っぽい人」としか言えないから、警告しか出してない。
内部発番のシリアルのIDを比較していた所を、マイナンバーでひっかけるようにする、位の変更くらいじゃないの?その変更が通用するのは。
それでもパターンテストは必要。
呼び出し側を修正して、きちんと新しい関数が呼ばれている所からがテストのスタート地点。
修正ソース毎にドキュメントなんか普通作るよね。
波及コードだけどローレベルで担保されてるから大丈夫。は通用しない。
現実手段を閉じ込めるのは、同じ動きをする事が大前提。
407デフォルトの名無しさん
2015/10/27(火) 07:44:38.08ID:ecThD4uO >>406
理想はそうだけど現実解じゃないよそれ。
理想はそうだけど現実解じゃないよそれ。
408デフォルトの名無しさん
2015/10/27(火) 07:55:35.31ID:GLkDzmBJ いつのまに絶望的なコーディング論を紹介するスレになったのか
409デフォルトの名無しさん
2015/10/27(火) 08:09:05.01ID:HvIk3KYT410デフォルトの名無しさん
2015/10/27(火) 08:17:38.90ID:ExQg5u4l 括弧位つけろ
411デフォルトの名無しさん
2015/10/27(火) 08:41:24.34ID:z76BTGB+ >>407
実際にこのルールでやってるよ。
実際にこのルールでやってるよ。
412デフォルトの名無しさん
2015/10/27(火) 08:55:24.16ID:xbbraB1s UNREFFERENCE_PARAM(hCurInst)とかいう無意味マクロまーじ
413デフォルトの名無しさん
2015/10/27(火) 09:39:20.90ID:Ay4zuTZ6 >>406
また言葉足らずだったが話の前提として住所と氏名でユニークキーになる場合の話
勿論結果が修正前と異なるようなら別のメソッドにしたり置き換えたりが必要
あとソース修正毎にドキュメント作るのは金融くらいしか聞かない
テスト自動化してればシナリオ流して終わり
必要以上に金かけるよりほぼ間違いないでコスト削減が今の主流だと思う
スマホゲームでメンテ後に即メンテとかよくあるだろw
また言葉足らずだったが話の前提として住所と氏名でユニークキーになる場合の話
勿論結果が修正前と異なるようなら別のメソッドにしたり置き換えたりが必要
あとソース修正毎にドキュメント作るのは金融くらいしか聞かない
テスト自動化してればシナリオ流して終わり
必要以上に金かけるよりほぼ間違いないでコスト削減が今の主流だと思う
スマホゲームでメンテ後に即メンテとかよくあるだろw
414デフォルトの名無しさん
2015/10/27(火) 10:38:11.22ID:z76BTGB+ >>413
医療だけど、特殊例だったのか。
だとすると、医療でそういう運用してても出る障害考えたら、世の中のプログラマは一体どんな気持ちでプログラムしてるかわからんな。
必要以上に金かけずにコスト削減して、障害出したら、それは必要な金だったんじゃねーかなぁ。
医療だけど、特殊例だったのか。
だとすると、医療でそういう運用してても出る障害考えたら、世の中のプログラマは一体どんな気持ちでプログラムしてるかわからんな。
必要以上に金かけずにコスト削減して、障害出したら、それは必要な金だったんじゃねーかなぁ。
415デフォルトの名無しさん
2015/10/27(火) 11:41:33.67ID:Ay4zuTZ6 >>414
なるほど医療か
医療は周りにいなかったからわからなかった
医療だと慎重にならざるを得ないがバグ出ても修正すれば問題ない分野はそんなにテストに時間をかけない
毎回手動テストしてリリースするより自動テストでバグ出たら修正のほうがトータルコストはかからない
リリース優先か品質優先かは分野で全く異なる
ゲームで慎重なテストで時間使ってたら首飛ぶし逆もまた然り
なるほど医療か
医療は周りにいなかったからわからなかった
医療だと慎重にならざるを得ないがバグ出ても修正すれば問題ない分野はそんなにテストに時間をかけない
毎回手動テストしてリリースするより自動テストでバグ出たら修正のほうがトータルコストはかからない
リリース優先か品質優先かは分野で全く異なる
ゲームで慎重なテストで時間使ってたら首飛ぶし逆もまた然り
416デフォルトの名無しさん
2015/10/27(火) 11:52:03.16ID:Ay4zuTZ6 あと金の話だけどリリース時期は作る前から決まってる
そこがずらせないとなればバグのリスクとってもリリースを優先しないといけない
もしくは機能のそぎ落とし
3末リリースが遅れると決算への影響が大きいとかいろいろ事情がある
バグは出るものだからリリース後に改修すればいい
なかなか思ったとおりに仕事できないのは世の中の常w
そこがずらせないとなればバグのリスクとってもリリースを優先しないといけない
もしくは機能のそぎ落とし
3末リリースが遅れると決算への影響が大きいとかいろいろ事情がある
バグは出るものだからリリース後に改修すればいい
なかなか思ったとおりに仕事できないのは世の中の常w
417デフォルトの名無しさん
2015/10/27(火) 13:00:39.45ID:HvIk3KYT 自動車とか産業機械とか医療は厳しいよね。
バグ流出したら普通に人が死ぬからなあ。
バグ流出したら普通に人が死ぬからなあ。
418デフォルトの名無しさん
2015/10/27(火) 20:49:01.37ID:5DDR/Lis 工作機械の制御も簡単に死人出るからなぁ…。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】Jリーグ観客動員が歴代最多を更新 初の「1300万人超え」達成…平均入場者数も史上最高に [尺アジ★]
- 女性天皇「賛成」69%、将来の皇位継承「不安」68%…読売世論調査 ★3 [蚤の市★]
- サナエノミクスについて力説 積極的な財政出動で「所得増える 消費マインド上がる 税収増える」片山さつき財務大臣 ★3 [少考さん★]
- 日中対立「着地点」見えず 中国、他国にも圧力の過去―関係悪化から1カ月 [蚤の市★]
- 【芸能】粗品、日本テレビに苦言 客のレベルが「かなり低い。あいつら分かってない」「拍手したいだけやねん」 [冬月記者★]
- 日本の英語力96位から動かず AI評価で可視化された「読めるが話せない」の正体 (EF EPI 2025) ★2 [少考さん★]
- このお🏡は好都合に未完成🦖
- 00:00:00.000
- 【朗報】イーロン・マスク「AIとロボットで誰も働かなくて良くなる。全員ニートで金銭も税金もないパラダイスみてぇな国を作りてえ」 [347751896]
- 世界一の運動神経を持つけど身長140センチの男がやるべきスポーツ
- 伊東市の元市長、高市が激励メッセージを送り自民党県連が全面支援したのに敗北 [931948549]
- 【悲報】米山隆一と室井佑月、ガチで離婚しそうwwwwwwwwwwwwwwwwwwww [802034645]
