今井氏:ソースコード公開は、社長のティム(*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:55USvuES354デフォルトの名無しさん
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 工作機械の制御も簡単に死人出るからなぁ…。
419デフォルトの名無しさん
2015/10/27(火) 20:58:17.64ID:ohI0PO9P 絶望的なソースコードか〜
俺のソースコードは、いつでもスパゲッティになってるな〜
俺のソースコードは、いつでもスパゲッティになってるな〜
420デフォルトの名無しさん
2015/10/27(火) 20:58:59.55ID:LyVSHq6d FXのツールとかで時限で誤動作爆発させたら大量に電車に飛び込みそう
421デフォルトの名無しさん
2015/10/28(水) 00:18:14.32ID:v41KDir5 糞みたいなコードにはもれなく言い訳がついて来る
もし本気を出せば綺麗なコードが書けるかのような
もし本気を出せば綺麗なコードが書けるかのような
422デフォルトの名無しさん
2015/10/28(水) 07:34:37.69ID:dd+rVZmo つまり全てのコードにはもれなく言い訳がついて来る
423デフォルトの名無しさん
2015/10/29(木) 12:41:13.98ID:jYkr1Igb 最近JavaScriptのswitch(true)イディオムを知ったが
do { ... } while(false)と同じような邪悪さを感じた
do { ... } while(false)と同じような邪悪さを感じた
424デフォルトの名無しさん
2015/10/29(木) 12:56:10.88ID:ywbX+Z6L でもどこが邪悪なのか言えない?
425デフォルトの名無しさん
2015/10/29(木) 13:15:18.74ID:l+jiBzQW426デフォルトの名無しさん
2015/10/29(木) 14:23:06.65ID:ywbX+Z6L それは最適化じゃなくてバグだろ
427デフォルトの名無しさん
2015/10/29(木) 18:25:23.55ID:jIkfL+wY マイナンバークラスから氏名クラスへの変換関数が存在した場合の問題点。
428デフォルトの名無しさん
2015/10/29(木) 19:45:11.73ID:lCX/HIGL 適用日付も引数にほしい
429デフォルトの名無しさん
2015/10/29(木) 20:06:17.64ID:K+6ZCqNU 期間持つのと、変換日時を任意に設定出来ることが最低条件かな。
変換ではなく、取得クラスになるだろうけど。
変換ではなく、取得クラスになるだろうけど。
430デフォルトの名無しさん
2015/10/30(金) 16:02:41.19ID:ZjC0FpzU >>409
0すら定数定義させられた事があったわー
0すら定数定義させられた事があったわー
431デフォルトの名無しさん
2015/10/30(金) 20:53:45.70ID:gPbmFrsE #define NULL 0
432デフォルトの名無しさん
2015/10/30(金) 21:45:25.79ID:eJ2e2Hn1433デフォルトの名無しさん
2015/10/30(金) 22:31:55.26ID:gPbmFrsE たとえばVBAの話になるが、VBAからシートの特定のカラムのセルを参照するには
Cells(行, カラム)やRange("行:カラム")のように指定する
これはカラムの配置を変えただけでプログラムが破綻することを意味する
さてExcelにおいてカラムの配置を変えたいことは良く思うことである
そこで1行目のヘッダとなる名前とカラム番号を連想配列に登録しておき
名前でカラム位置を特定するという方法がある
こういった対策をしとかないとVBAはマジックナンバーだらけのコードになる
対策したコードは処理の最初に名前から番号への変換のコストが発生するが
それは些細なコストである
・・・わかったかね
Cells(行, カラム)やRange("行:カラム")のように指定する
これはカラムの配置を変えただけでプログラムが破綻することを意味する
さてExcelにおいてカラムの配置を変えたいことは良く思うことである
そこで1行目のヘッダとなる名前とカラム番号を連想配列に登録しておき
名前でカラム位置を特定するという方法がある
こういった対策をしとかないとVBAはマジックナンバーだらけのコードになる
対策したコードは処理の最初に名前から番号への変換のコストが発生するが
それは些細なコストである
・・・わかったかね
434デフォルトの名無しさん
2015/10/30(金) 22:32:38.22ID:eJ2e2Hn1 長い
435デフォルトの名無しさん
2015/10/30(金) 22:34:14.14ID:WJjMGMJs その値が何を意味してるのかを定義して同じ意味のものをまとめるだけ
もともと可読性と変更に強くするためにしてるのだから
あとdefineはundefで消すこともできるため難解コードは解析しづらい
定数もしくはenumを使うのがいい
もともと可読性と変更に強くするためにしてるのだから
あとdefineはundefで消すこともできるため難解コードは解析しづらい
定数もしくはenumを使うのがいい
436デフォルトの名無しさん
2015/10/30(金) 22:47:48.69ID:gPbmFrsE 上のRangeの場合は"カラム行"だけどまあどうでもいいわな
さてCOMインターフェースの1つIDispatchはこれの逆をやっている
IDispatchは全て名前ベースでプロパティやメソッドを呼び出せるようになっている
が実はそれらには一意のIDが割り振られており、事前に名前からIDを特定しておくこともでき
うまく書けば名前からIDへの変換は1度のコストで済む連想配列を内蔵した形だ
ちなみにここで登場した連想配列に名前を格納する仕組みは
主に文字列リテラルとして実装されるが、これはマジックナンバーではない
これをマジックナンバーとみなしてさらに別名定義するアホはいないだろう
さてCOMインターフェースの1つIDispatchはこれの逆をやっている
IDispatchは全て名前ベースでプロパティやメソッドを呼び出せるようになっている
が実はそれらには一意のIDが割り振られており、事前に名前からIDを特定しておくこともでき
うまく書けば名前からIDへの変換は1度のコストで済む連想配列を内蔵した形だ
ちなみにここで登場した連想配列に名前を格納する仕組みは
主に文字列リテラルとして実装されるが、これはマジックナンバーではない
これをマジックナンバーとみなしてさらに別名定義するアホはいないだろう
437デフォルトの名無しさん
2015/10/30(金) 22:51:56.22ID:gPbmFrsE GUIDという概念がある
コイツハマサニマジックナンバーデコノアイデーハセカイニヒトツシカナイコトガホショウサレルアイデーナノデアル
デモニンゲンハコンナモノイチイチオボエテラレナイカラマサニマジカルナウンヨウガナサレテイル
コイツハマサニマジックナンバーデコノアイデーハセカイニヒトツシカナイコトガホショウサレルアイデーナノデアル
デモニンゲンハコンナモノイチイチオボエテラレナイカラマサニマジカルナウンヨウガナサレテイル
438デフォルトの名無しさん
2015/10/30(金) 23:03:28.91ID:gPbmFrsE マイナンバー制度という概念がある
主に国内でやりとりされることを想定した奴隷番号である
公開すると害があるらしく最後には官憲が動くかもしれない危険な番号として最近認知された
主に国内でやりとりされることを想定した奴隷番号である
公開すると害があるらしく最後には官憲が動くかもしれない危険な番号として最近認知された
439デフォルトの名無しさん
2015/11/01(日) 18:19:18.77ID:tjf5Il2M 国民総背番号制という古来からの論争の種だったのだが,最近は抵抗運動はなかったのか?
440デフォルトの名無しさん
2015/11/02(月) 00:51:12.93ID:IGWJLfrm そもそも既に番号振られてるよね、事実上、って気づいたからじゃない?
441デフォルトの名無しさん
2015/11/02(月) 08:32:28.83ID:jypI/AIk マイナンバーの本体そのものは民主時代に通ってるがな
今騒いでるのは改正と称して悪用するための変更
今騒いでるのは改正と称して悪用するための変更
442デフォルトの名無しさん
2015/11/03(火) 11:58:57.65ID:gpyirAk3 急に政治臭くなった
443デフォルトの名無しさん
2015/11/03(火) 12:02:06.64ID:Cvaj+aOI そういやテストデータの人名に政治家やら備考欄に真実()入れてきた外注があったわ
444デフォルトの名無しさん
2015/11/03(火) 13:50:13.77ID:i649bMmf ワロタ
俺も真似しよう
俺も真似しよう
445デフォルトの名無しさん
2015/11/12(木) 07:13:20.33ID:b0I3If93446デフォルトの名無しさん
2015/11/12(木) 10:32:56.67ID:iZs6jymX447デフォルトの名無しさん
2015/11/13(金) 22:33:07.13ID:Ztn/Y8j7 >>446
日本人か?
日本人か?
448デフォルトの名無しさん
2015/11/14(土) 00:40:00.13ID:H4hEy7EE >>447
日本人だが?
日本人だが?
449デフォルトの名無しさん
2015/11/14(土) 00:40:45.97ID:iuWQx+BT pi みたいな浮動小数は用途による。
450デフォルトの名無しさん
2015/11/14(土) 14:17:51.36ID:fm2vcKXc >>446
#define マクロのない言語は哀れだね
#define マクロのない言語は哀れだね
451デフォルトの名無しさん
2015/11/14(土) 14:34:31.48ID:bF3EVbPf いや、マクロが欲しければm4みたいな汎用のマクロプロセッサを使えばいいし、
単なる文字列置換であるマクロは、コードの静的解析能力を下げ
(例えばプリプロセッサを通さないと構文エラーかどうかわからない)
エラー時の情報をわかりにくくしたり、分かりにくいバグの元になったりするので
排除する方向にあるんだけど。
C言語でもdefineよりもconstやinlineを使うのが常識だしさ。
単なる文字列置換であるマクロは、コードの静的解析能力を下げ
(例えばプリプロセッサを通さないと構文エラーかどうかわからない)
エラー時の情報をわかりにくくしたり、分かりにくいバグの元になったりするので
排除する方向にあるんだけど。
C言語でもdefineよりもconstやinlineを使うのが常識だしさ。
452デフォルトの名無しさん
2015/11/14(土) 14:36:18.15ID:bF3EVbPf453デフォルトの名無しさん
2015/11/14(土) 16:30:08.93ID:EuJ2f84U #define ABC 5 + 10
void func(void)
{
int abc = ABC * 10;
print("%d", abc);
}
このパソコンは算数が苦手になったみたいです。
150と表示されません。
………………死ね!
void func(void)
{
int abc = ABC * 10;
print("%d", abc);
}
このパソコンは算数が苦手になったみたいです。
150と表示されません。
………………死ね!
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- いじめ後遺症 15年前のトラウマに苦悩する当事者「夢の中に出てくる」「された側は一生ものの傷」 [♪♪♪★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 東京の自販機そばに金塊4200万円分、何者かに持ち去られる…札幌の50代が8000万円振り込んだ後に上京して被害 [どどん★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- 永野ってなんで売れたの?
- 可愛すぎるJK見つけた
- お前「趣味……?ないですね。無趣味です」ぼく「ずっと2chしてるんだから2chが趣味でいいじゃん」前「?」
- ボア・ハンコック(31)「ルフィ……❤結婚したい……❤」
- 隕石の落ちたところに俺が立ってたら
- 🏡パン🍞つー✌まる👌見え👊😅👊
