今井氏:ソースコード公開は、社長のティム(*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 ★★★★★★★★★★★★★★★★★★★★★★★★★★ 注意 この部分は、ゴミカスが書いたでたらめな文章です。 ★★★★★★★★★★★★★★★★★★★★★★★★★★ > 初級者から中級者へ昇格する時期は、ほぼどのようなソースコードでも読める程度にプログラミング言語に精通し、 > また偉いプログラマーの提唱したデザインパターンも一通り理解したくらいの時期である。 > > すると、プログラミング言語の持つあらゆる機能と、偉いプログラマーの提唱するあらゆる技術を使わねばならない > という思い込みが発生する。そしてHello Worldにまで崇高なオブジェクト指向や壮大なデザインパターンを > 適用しようとしだすのである。 > > その結果、 > * 大量のクラス > * 迷路のような変数渡し > * 底なしに深いネスト > などといった凄いものが生まれる。また、条件分岐に三項演算子を乱用するなどの症状も多く見受けられる。 > 最終的には第三者にとって読みにくい保守性の悪いスパゲッティコードが生成されることになる。 > http://monobook.org/wiki/%E4%B8%AD%E7%B4%9A%E8%80%85%E7%97%85 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) 言語の構文はわずかに例外が有るにしろ、 コードをシンプルで分かりやすく書くことが出来るように 作られたもので、バージョンが上がると追加される機能っていうのは それを更に良くするもの。 という当たり前のことから考えると、 問題ない機能を「俺が知らないから」「馬鹿が知らないから」という 理由で禁止する行為は、コードをクソコードに仕上げることになる。 もっと最悪なのが、俺がこれ以上勉強したくないから 他の人も使うの禁止!と言い出すリーダー。
たしかに見に覚えがあるがプログラム書いてて一番楽しい時期でもある
確かに2の通りだな 俺が見た絶望は、15全下の種類を持つフラグ変数が5つある奴だな 相互に挙動が干渉し、中で呼び出しが積まれたあとに突然最初のエントリーポイントを再帰しやがった
#include <stdio.h> #define BUFFSIZE 7 int main(void) { char* buf; char tmp; buf = (char*)malloc(BUFFSIZE); tmp = -126; *(buf+0) = tmp + 0; *(buf+1) = tmp + 72; *(buf+2) = tmp + 0; *(buf+3) = tmp + 103; *(buf+4) = tmp + 0; *(buf+5) = tmp + 89; *(buf+6) = tmp + 126; fputs(buf,stdout); free(buf); return 0; }
>>11 変数宣言先頭に書くな たかだか7バイトmallocするな ポインタのインクリメント使え 終端文字抜けてるぞ 彡⌒ ミ (´・ω・彡⌒ ミ 彡⌒ ミつ(´・ω・`) ))ハゲで何が悪い!! (( (´・ω・`) ( つ ) ( つ ヽ とノ 〉 とノ )^(_) (__ノ⌒(_)
>>13 マジだw あと一個 charは一バイトでもsizeof使え Unicode対応の時に泣く 出れば指定要素を指定数分だけメモリ確保する方があったはずだからあっちの方が安全 >>12 ネタにマジレスするバカ(笑) ぬるぽ って書いてるだけじゃん 某一部上場企業で使われてる言語が日本語プログラミングのソースで吐きそうになったな しかも1ファイル3万行とか普通にありやがるしそれこそ分岐しかしてねえ
日本語ブロクラミングって実務で使う場所あんのか! 需要なんて絶対無いと思ってたけどw
あるんだななこれがしかも日本でも半端ない規模の会社よw 中身はcobolを日本語でラップしたような感じで。 「a=1」 というのを 「aを1に代入」って感じで組んでいく。脳が腐ると思ったわ。
誰得だなw 当初は誰でも保守できるようにしたかったのだろうか? 結果誰も保守できなくなった的な?
英語がわからないから日本語で書くという アプローチは200%失敗する。 あー、そういやコードから日本語の仕様書を 作り出すとか言うソフトがあったな。 ね? 見事に失敗したでしょ?
Interdevelop Desginerは売れたのか 売れたんなら買った企業の評判を聞いてみたいところ 今のところ俺はステップ実行設計書にご縁がない 幸せだ
日本語プログラムじゃないけど、ruby で6000行のプログラムなら見た事がある。 オブジェクト指向?何それ?っていう感じのコードだったw
>>22 FileMakerで作られた信じられないくらい巨大な社内システムの スクリプト部分が全部日本語だった。 あまりにも酷いので某○ECにリプレイスの見積をとったら、 「30億円くらいじゃないですかね」という回答だった。 いまでも絶賛稼働中 >>22 むしろ、日本語のほうが便利 変な先入観を捨てて使ってみるとわかる どんな簡単なプログラムでも下手が作ればスパゲティ 変数名が日本語ならまだわかるが、演算子まで日本語にしたらかえってわけわからん。
大企業に限ってソースはダメなテンプレだよ。1ファイル5万行に及ぶクソコードと 分岐ネスト&goto乱発の超絶スパゲッティで某携帯会社のシステムは稼働している。 この会社で働いてた時は一時期プログラミング出来なくなって鬱で休職したわ。俺の知ってるプログラミングじゃなかった。
RoofRaised って何だと思って、長い時間をかけてヘッダーファイルを調べてみたら、ただの double だった、なんてことがよくあったでしょ。 大規模なプロジェクトのすべてのクラスで暗黙の typedef を見つけ出すのにどれくらい時間がかかると思う?
>>34 findとgrep組み合わせるだけで、どんなに大きな大規模プロジェクトでも 10分はかからないと思うが。馬鹿なの? > 10分はかからないと思うが。馬鹿なの? そんなにかかったらだめだろ。 せいぜい10秒程度だろ。 処理は読まないといけないからもう少しかかるが 定義は辞書を調べるようなものなんだから grepとかfindなんか使わずに、単語を選択して 「定義場所を表示」ぐらいの調べられないとだめ。 この程度で分レベルの時間がかかってしまったら 調べている間に、何してたんだっけ?ってなるよ。 思考を中断させる原因となってしまう。
増改築を繰り返せばどんなシステムでもスパゲティになる
昔だがUNIX C使いがMSDOS Cで作ったソフト auto変数でサイズ10000バイトとか普通にやってる上に子プロセスも同じだから全見直し もっと酷かったのがC言語で書かれた移動体の基地局側ファームウェア 処理毎に移動体の数だけフラグ分けとif文の羅列で設計から全見直し
>>43 その「auto変数でサイズ10000バイトとか普通にやってる」ところが 全部staticに直されていてスレッドで排他されていないコードも みたことある。絶望的だ。 昔のMSDOS環境はメモリ利用領域500KBほどだよ stackでガバガバ取ったら、あっという間にエラーで落ちるからさw
ロートルの何の価値もないXMS講座が始まるからDOSの話は止めろ
>>46 ほう。じゃあ今はガバガバの2000倍は 使わないといけないから、 あっという間の2000倍かかるなw >>48 環境を考慮できないお前みたいな馬鹿ならできんじゃねw んと、UNIXではmallocの領域とスタックの領域は重なった四角形の上辺と下辺から衝突する方向で成長する。 だから、どちらが大きな領域を取れるかというと対等であるのだけれど ヒープの側はfreeした場合、管理領域に虫食い穴ができてしまう。 そうした事情があるので、仮想記憶領域をムダに成長させたくなければ 可能な限り大きなメモリーはスタックに確保したほうが合理的なの。
>>50 UNIXはそうかもしれないけど、LinuxもBSDもWindowsも違うよ。 >>52 気になってlinuxのメモリモデル確認したら テキスト(コード)、初期化、非初期化、(モート)、スタック になってるじゃん。 ヒープが非初期化領域の末端に来て、反対側からスタックが衝突方向 だからLinuxもやっぱりUNIXと同じモデル。 ユーザーランドから見た論理モデルは変わってないじゃん。 わかった今確認した。 カーネル2.6では text, data, (moat?), heap, bss になってる。 sbrk()にゼロを渡すと dataと heapの間の数値になるから 初期化データに対してヒープが衝突方向に成長し、 ヒープの後ろに非初期化データが続く。 ただ、ドキュメントによれば2.4ではUNIXと同じはず。
>>28 正直な経験で言うと、社内システムを開発外注して業務改善てのがゆとりな神経だと思う。 成功した会社を一つたりとも見たことがない switch分岐が5段連なった奴は絶望感が酷かったな そのなかにたらたら転写、フラグ操作した上で、サブルーチンを呼び、サブルーチンでもまた分岐 調べると同じコードでフラグの設定値だけ違う 某地デジ
【神回】美人ニコ生主えりぃがFME切り忘れで公開オナニー!?【電マ】 VIDEO CRubyでは、compile.c 内の、iseq_compile_each 関数で、 AST(抽象構文木)を、Ruby仮想マシン用の中間コードに、 コンパイルするのだが、 ASTノードの種類によって分岐する、 switch文は数千行もある switch (ASTノードの種類){ } 「Rubyのしくみ」という本を参照
rubyのソースが糞ってのは同意 中身見て驚いたわ
変数の頭に$をつけなきゃならん言語は全てゴミ扱いでいいと思うの というかC++以外滅びろ
【海外】「さすが日本だな」 自衛隊の国産ヘリ「OH−1」の性能に外国人衝撃!! やはり日本は世界一だった【大和】 VIDEO どうみても間違っているソースだな 明らかに昨日要件とは違う実装 数週間前に別のやつが触っているのに誰も申告しない 後から知ったが、彼奴にあてがえば、そこも直した上で機能変更も設計変更もやってくれる と考えた仕打ちだそうです。 安くて真面目に仕事して、能力あると思われると、死ぬまで仕事が降ってくる。
今悩まされてるのが同じロジック別モジュール 作成者が統一化に猛反対 馬鹿は本当に死んでくれ
>>70 既存に似たものあるから統合するって感じ? 作成者は少々いじられるのも嫌と? 可能な限り共通化して分離必要な箇所はインターフェース化して個別実装だな ソースコピペとかは技術者を名乗ってはいけない >>70 ロジックが同じかどうかでまとめるのではなくて、 役割で考えないとダメだよ。 同じロジックであってもまとめるべきではないこともたまにある。 例えばTwitter APIとAWS APIの内部で同じ処理をやっていたとしても、 役割はそれぞれ別なので分けるべきだろう。 もちろん汎用モジュールに分けられるようなものであれば 分けた方がいい。 自動車の大規模リコール騒ぎを見てれば なんでも共通化すればいいってもんじゃない ということは言える
同じロジックでも制御対象が別ならコピペして分けておく 現在たまたま同じロジックで済むだけだから
>>74 分ける必要が出た時に差分を個別実装すればいいだけ コピペされたコードなんて誰もメンテしないぞ 特に他社のコード引っ張って来たら絶対触れない 不具合出ても一方は修正されたのに一方は修正されない 客からしたら不具合治ってないとクレーム それが続けば信用問題にもなりかねない 月日が経てばもはやどっちがオリジナルか判別不明 >>71 が正解 日付け事にコピペしてんだよ!! モジュール統一化してパラメーター渡しにしたらえらく御立腹w 要するに自分の管理外にコードが出ていくのが嫌なのね 気持ちは分からんでもないけど、そいつテスト書いてないだろ
>>79 と仕事するほうが大変だろw 理由はわかっている人には明らかだらあえて言うまでもないが。 同じコードだからって領域が違うものをまとめるのはアホ。 コピペの方がまだマシ
たぶんここから濃厚な罵倒合戦の火蓋が切って落とされると思うんですけど
結果的に同じものができたから、一つにするという考えは間違っている。 共通モジュールは設計段階で考えることで、実装段階で考えることではない。 ましてや他の機能やシステムとの間で共通化することなどありえない。 汎用モジュールとして使うとしてもパッケージソフトくらいにしか適用できない。
>>82 禿同w >>76 見ると日付毎言うてるから相当悲惨と思われる 俺はオブジェクトのシリアライズでバージョン毎に完全に分けられてて泣いた どうせフィールド追加しただけなのに全部コピーするから一万行超えてたwww 差分だけ追加するようにしたら200行… このスレの誰と仕事すると大変か、という問いに関しては 「土曜の昼日中に2chやってる奴」が答え
ソースのコピペを肯定する人多いのか >>84 状態なんだがw >>87 アフリカの猿とアマゾンの猿は、同じに見えるかもしれませんが、別物です。 初心者にはわからないかもしれませんが。 oop厨ってアホだな。 共通化してはいけないものをなんとか共通化したいのならアスペクトだから。
>>88 「同じに見える」んじゃなくて「同じもの」なら共通化して当たり前。 その理屈でいうとforで0から順にインクリメントするものも関数化しないとな。 DoForZero2(100,print) おー、短くなった。 流石プロですねー
それ、IT業界の中でも特定の業種だよね。 メーカーの内製でそんなことしないだろ?
>>92 アホは喋るの止めた方がいいよ 帯域も容量も地球の資源ももったいない というか、pythonのrangeをmapで使おうとすると まさにそんな感じのコードですわ。 視野の狭い人ね。
>>85 >このスレの誰と仕事すると大変か、という問いに関しては >「土曜の昼日中に2chやってる奴」が答え 18:21:40.06 ID:UflOEuuo 書き込めるまで我慢してたんだろな〜www >>86 >>71 だと実装の継承しようとしてるので、OOP 的には >>72 >>74 や >>83 みたいな反論は普通出てくる ただ >>76 見るに相当ひどいみたいだし、何か特別な理由があるんじゃないかと 頻繁に特定の日付時の状態にバイナリ互換で戻すとか?あるかそんな事 例えばヤフーのようなIDでログインさせるAPIを他社に提供することを考える この場合ログイン処理をクラスとして切り出ししそのインスタンスのログイン処理をコールしてもらえるように設計するだろう つまりヤフーも他社も同じクラスのインスタンスを持ちそのログイン処理を共有する 他社がヤフーのログイン処理を実装したりヤフーが提供先ごとにログイン処理を実装することがあるだろうか? 1つの処理もまた1つのオブジェクトだよ
>>99 スレタイ嫁 特別な理由はそういうコード書く人物が存在する事だろ >>100 >つまりヤフーも他社も同じクラスのインスタンスを持ちそのログイン処理を共有する そのやり方だとセキュリティがザルになるけどね。 コピペするに足る理由がある時はいいんだよね? 例えばFlashがリテンションしてプログラムの一部が読めなくなった時でも 最低限人が死なない程度に制御するためにバイナリレベルで多重化するような場合とか
>>99 一昔前のCOBOLでなら、聞いたことはある。 >>61 逆にこういう例ってどうするのが正解なの? 変数の取り違えに気づき、途中で値の交換を行ってたコード
if文でどんどん分岐し、重複ロジックを大量に書いてあったプログラム。
派遣先で部下というか新しいメンバーにコード書かせたら恐ろしいコードよこしやがった。 ifのネストじゃなくて、同じifの判定をこれでもかってくらい繰り返してんの。 もうそこやめるからテスト通して放置。
てーへんっすね (大変ですねと、そんなレベルの低い人間と働かなきゃいけないなんて あなたもやはり底辺の住人ですね、を掛けている)
>>112 飛ぶ鳥跡を濁さず 知ってて放置は良くないぞ >>113 同じ会社でも個々の能力はピンキリだろ とくに大きい会社になるほど色んな奴と出会う >>114 > 飛ぶ鳥跡を濁さず 濁してるのは、飛ぶ鳥の方じゃないですからw 飛ぶ鳥を落とすため、最高のライフルをご用意いたしました。
同じifの判定ってどういうこと? if(a == 1) print "1"; if(a == 1) print "1"; if(a == 1) print "1"; なわけないよな? if(a == 1) print "1"; if(a == 2) print "2"; if(a == 3) print "3"; って感じか?
>>118 知って飛び去るのはよくないっていうことでは?逃げるが勝ちの方がふさわしいと思うが。 お前らが管理しているソースで一番古いのっていつ頃のソース? 俺は1997年作成って言うソースが一番古い(C++) かなりいろんな人がバグ修正、機能追加していて3K程のソース。 それ以外にも2004年以前のソースが20本位ある(これもC++) 仕様書もソースも追加修正だらけで、作り直したいけど、動いているソースなんで勝手に修正するなって 言われていて作り直すわけにもいかなくて困ったもんだ状態だわ
>>122 ボトルネックなんかが明確なら再作成ありだが、ただコードを綺麗にしたいってのはただのマスターベーションだしな まあ動作実績のあるコードは触らないのが鉄則だからな 仕様変更を待つしかないね
>>122 そのコードが今でも頻繁にメンテされているならありだが、特に問題がなく、今後も大きな拡張が見込めないなら何もしないほうがいい。きもちは痛いほど分かるけどね。 念の為に言っておくと、開発効率が悪いから 不具合が発生するリスクが高いから という理由でコードを綺麗するのは重要なこと
開発側の100%負担なら誰も反対しないだろうが、オナニしたいから開発費用を払って! と言われて金を出す奴がいるとすれば、ただの鴨と鵜飼
ムダに高い金を払っているってことを 知らせない、知らないほうがお互い幸せだからなw 金を払う方は金を払って、作る方は残業して。 こんなに苦しい物が実は無駄なんてw
この手の議論は請負系と自社開発とで考え方が変わってくるな。
プログラムできないけど、上司に取り入る事だけ 上手い営業みたいなサーバ管理者が、 プログラマの俺が居るのに、 「ノンプログラミングでデータベースを自在に閲覧出来る BIツールを買えば、見える化が促進できる! プログラマをリストラすれば十分ペイ出来る」と、 偉い人に取り入って、システムを導入したんだ。 蓋を開けたら、データ取り込みから定義作成まで BIツール謹製のSQLやロジックを書かないといけない 絶望的な代物だった。 結局、俺が書いてる。。。
簡単なサンプルは、ドラッグアンドドロップで ポンポン作れるんだけど、いざ実務に即したものを 作ろうとすると、その単純さが仇となって、 猛烈に長いコードを書く羽目になった。 さらに、デバッグなんて機能が無いから、 結果が想定と違っていても、原因の切り分け方法が 無いときてる。 もう、苦行としか言いようが無い。
>>136 XAMPPで簡単に出来ることが 根本的に無理になったり、激ムズになったりしてる。 単純な四則演算で変な結果が出た時には 固まった。 そんなドマイナーなノンプログラムのプログラムなんて 身にならないし、もう辞めたい。 俺が辞めたら、確実に死蔵されるだろうな。アレ。 絶像的なノンプログラミングのプログラマになれば、 長い間、飯の種になるかも知れない。 求人かけても、ドマイナーなシステムのプログラムなんて、 誰も解らんだろうし。。。
BIツールの特性を知った上で使うなら、 効果的に使えると思う。 でも、高いシステムを買ったんだからと、 複雑な要件を盛り込むと、途端に破たんする。 そして、専門外の偉い人は、 複雑な要件を盛り込みたがる。 世の中、そんなもんだって感じで、 達観するしか無い状態。
BIツールってコンサルタントのただの商品だからな。
銀行系SEをリストラされた親戚がマイナーなサーバー管理ツールを使ってたな 本人はapacheのマニュアルすら読んだことないんだと
>>141 なんか可愛そうだよね。 多くの時間を、他の会社では使えない知識を 学ぶのに使ってしまうのって。 目的と観点を明確に使っているかだろ ツールのいいなりじゃどうしようもないが、そこがわかっていれば他のツールも直ぐに使いこなせる。 問題は、そういう機能も出力もないツールを掴まされて使う必要があるとき ワンオフのシステムによくある、
パフォーマンスの点から見て絶望的なのに無理やり二分木を使ったプログラム 頭が湧いてるんじゃないかと思う
>>141 さすがにサーバー管理をやっているなら自分でapacheくらい勉強するだろう。リストラされても仕方がない。 cobol製webサーバーとかあんのかな 俺は業界門外漢だから知らね
銀行系専門がOSSなんてさわったらジンマシンに襲われるんじゃね
>>145 ないない、そもそも銀行で apache なんて使わない Oracle Application Server とか IBM Http Server とかだよ まあ、中身は... だけどね w >>149 Apacheがないところなんてないと思うが。 >>150 > まあ、中身は... だけどね w の意味わかってないのか? 極論すれば中身なんてどうでもいいんだよ、なんかあった時に Oracle とか IBM の名前が出せることが重要 マジで OSS なんて使ったら死ぬぞ w 銀行のWebサーバなんて9割IISだぞ。 apacheなんて趣味用のサーバ使うわけがないだろ。
>>152 金融機関に納入したことあるベンダーなら誰でも知ってることだよ >>163 銀行系だからとか関係ない。そんな銀行しかわからん技術者だからリストラされるんだよ。それが嫌なら常に独学でも学び続けるか、管理する側に回るしかない。IT系では特に重要なこと。 >>164 銀行の中に勘定系と情報系がある 厳しいのは当然金を扱う勘定系 下手すると新聞沙汰になる ただし情報系が甘いわけじゃないので、OSS なんて入れるアホは滅多にいないと思う まあ、地方の信金とかは知らんけど w >>165 銀行だけとは言ってない 銀行(メガバン)ではって話だよ >>166 たくさんシステムがあるのに皆無と言い切れるあなたさエスパーですか? >>166 アホが噛みつくからわざわざ滅多にって書いてるのに... w >>168 ああ、すまん Redhat Linux でしょ、一応サポートあるしね と言うか IBM が zServevr で動作保証してるから サポートのない OSS をベンダーが勝手に入れるのとは訳が違うよ >>169 > サポートのない OSS をベンダーが勝手に入れるのとは訳が違うよ サポートがある OSS をベンダーが説明してから入れるなら 何の問題もないでしょ? つまり短く言うとOSSは問題ない。 毟り取れるなら、そこからケツの毛まで毟り取ってやればいいじゃん 全部がOSSになったりしたら、その有り難みがなくなっちゃうよ
>>171 > サポートがある OSS をベンダーが説明してから入れるなら > 何の問題もないでしょ? うん > つまり短く言うとOSSは問題ない。 バカなの? w サポート=バグがでたら修正しまーす ではなく 実際の損害を金銭で補償します だべ ソフト屋の浮世離れした常識は通用しないべ
実際の損害って、逸失利益とかも含まれるの? 含まれるとしたら太っ腹だな
契約次第に決まってんじゃん 仕事したことないのバレバレ
よっぽどアホな企業とか特殊な場合でない限り、上限を契約の金額にするのは常識だと思うが
>>150 そうか? ランプとかが流行ったが、所詮は安物買いの銭失いが大半 銀行はJSPばかりだよ >>175 でOSS使わない理由が損害補償なのかと思ったから >>176 って書いたんだけど、OSS全然関係なさそうだな だって実態を知らないで 想像で言ってるだけだもん 見ればわかるよw
>>179 jspはWebサーバー、アプリケーションサーバー、OSが全部オープンソースの場合もあるが? サポートがあるかどうかなんて格好だけってことも多いからな。 マイナーな機能だと、サポートに聞いても使い方すら分からないことなんてザラ。
コメントが無く、関数・変数の名前がいい加減な文字列操作関数
正規表現なら何をやりたいか、書いて欲しい。みんながみんな頭の中で正規表現できるとは限らんので。
>>182 どこの事例? >>180 損害保証なんてまあ関係ない そもそも国内でそんな事態になるケースなんて滅多にない >>187 JSP が何かを知りたかったら Wikipedia でも見とけよ JSPだとむしろオープンソースと絡むぞ。 ASPと言っておけばいいものを。
マスゴミ・売国奴・医療業界が隠そうとする真実---------------------安楽死---------------------奴隷に勝手に死なれては困る 安楽死旅行企画が大人気|竹田恒泰チャンネル VIDEO 武田邦彦:安楽死と大麻、そして売春・・・オランダに学ぶ VIDEO 安楽死党 VIDEO 自殺は後遺症が怖い!だから-----------------------------------安楽死制度-------------------------------------安心して生きるために 俺もっと酷い所にいたことあるよ こんなの修羅場でも何でもない(奴隷自慢 が始まると思っていたのにがっかりだぜお前ら
スパゲッティでもなんでもない、超綺麗なコードなんだけど 引き継いだプロジェクトのソースファイルがすべて空だったことがあったな
>>202 「 不射之射 」ってやつかな?(すっとぼけ) 他人の書いたソースを解析する時は 全部まとめて1ファイルにした方が検索で一発で飛べて分かりやすい
そんなPCでプログラミングするの?どんな糞企業だろうな
Windows なら findstr Linux なら grep
とりあえず話はソースをEclipse CDTにぶち込んでからだ
メモリが足らなくてEclipseが起動しないでござる
emacs使えばいいんじゃね それすら動かないならedでも使っとけ
鯖用にいいだろ 512もあればnginx+MariaDBでwordpressでもできるでしょ
>>212 9800円のWindows8タブレットですら1GBは積んでる atom で余分な部品をカットして省電力ならそれが正しい
メモリ2GBの安タブにBTのキーボードとマウスを繋げりゃそこそこ使える
>>218 中古のNexus7にUbuntuいれてそれやると最強 jQueryのソースが見ると吐気する。javascriptの方がよほど簡単と思えるのは子供の頃からプログラムしてるせい? ほんとにあれノンプログラマは見て分かりやすいの?
> jQuery(を使ったサイト)のソースが見ると吐気する。 > (プレーンな)javascriptの方がよほど簡単と思えるのは子供の頃からプログラムしてるせい? > ほんとにあれノンプログラマは見て分かりやすいの? で、あってる? もちろんjQueryを持ち上げるための方便か 全体でせいぜい100行、かつテストなしのコード しか書いたことがない人が言ってるんじゃないかな 数行で目的を注入するという目的に限れば確かに容易い
ノンプログラマがまともにjQueryなんて使うの? プログラマの俺はjQueryで助かってるけど
>>221 病院に行ったほうがいいよw jQueryのソースコードは機能毎に小さくモジュール化されていて、 長いファイルでも500行前後ぐらいしかない。 ほとんどは100行前後。 .jshintrcや.jscsrcもあるから 当然品質も保たれていると考えていいだろう。 当然テストコードも有る。 良いプロジェクトの見本のようなもんなんだが。 >>224 お前だろ病院行った方がいいのは。 誰がjqueryの中身の話なんてしてんだよ? jQueryのソースが見ると jQueryのソースが見ると jQueryのソースが見ると jQueryのソースが見ると 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
構文の話してるのに何行あるかなんて始めて馬鹿じゃないの? いきなり病院いったほうがいいとかキチガイでしょ?
構文? jQueryはJavaScriptの構文そのまんまなんだが? トランスパイラと言って、別の構文から JavaScriptに変換する仕組みが今は流行ってるが jQueryはそんなもの使わない純粋なJavaScript どこか変な構文でもあったか? その構文を御前が知らないだけでは?
ソースコードのことより自分の日本語でも見直しとけってのスカタン
いや、失礼した 「子供の頃からプログラミングをしてるせい」(で言語能力が的に育たなかった) って書いてあったね
子供の頃の知識で止まってるんだろーなーw どうせBASICだろう
質問主の言葉が足りないってのは分かるけどー、 読んだら分かるよねー。 いわゆる信者っていうの? 批判的なことに条件反射しちゃうんだよね。分かる分かるー っていーかぁ、そもそもスレチだしw? 両方消えてw
質問主の言葉が足りないんだろ。 それが全てだろ。 何言ってるんだか。
プログラマーって定義されてないと怒るよねwww 10言わなきゃわかんねーのかw小学生かwww
>>234 言葉が足りないのなら補えばいいが、 言葉が間違ってるからな。 お前Underscore.jsのソースコード見たこと有る? この質問に答えてみるといいよ。 用語じゃないけどさ、 前に似たようなjQuery信者が煽ってたのでソース読んだが、 同じ変数に別の意味の再代入とか平気でしててはっきり言って汚かったよ ソースすべてを読んだわけではないが、その部分出したら綺麗とのたまってたね… こういうのとは絶対一緒に仕事したくないわ
>>235 >>222 が正しい文に直してくれているし、思い込みをしなければ、正しい意図を紐解けるというのはすでに立証されているんだがw だから、質問がクソであり、それを思い込みで解釈したやつもクソだなと思うんだけど、俺にどう考えを直して欲しいのかなwww? webアプリの伝票を表示する画面のHTMLで、テーブルタグでエクセル方眼紙作ってあった 列とか必要以上に多くて無駄にセルの結合してあった
方眼紙便利なのに、なぜ方眼紙アプリが売っていないのか。
他も見たが、基本的に短い変数名ばかりだし、やっぱり読みにくいよ 決してvimほど汚くはないが、これを綺麗とか言っちゃうのは信者だけ
短い変数名だから読みにくいっていうのは 間違った考え方だな。 スコープが十分小さいなら 長い名前にする必要がない。
>>242 > bulkの型がめちゃくちゃ なるほど。 君は動的型付け言語における オーバーロードの書き方を知らないようだ。 オーバーロードっていうのはね。 関数の引数(シグネチャ)が違う同じ名前の関数を複数作成できる機能 呼び出すときに、引数から適切な関数を判断する。 だけど動的型付け言語ではそれが出来ないから、 関数の内部で、引数が省略されたかどうかやその型を見て処理を変える。 このコードはそれをやってるんだよ。 >>245 反論の内容には同意するが、ほぼ無関係だな まず問題の変数は引数ではないので、根本的に間違えてる 宣言時にbooleanで初期化した後、分岐して関数入れてる また、短いスコープであれば問題にならない事が多いのも同意するが、 特定ブロックで使う物を、関数全体スコープで宣言してるので該当しないな 何より、オーバーロードをしようが、通常は実装は汚くはならない 普通は最初に適切に分けるからな > まず問題の変数は引数ではないので、根本的に間違えてる 引数でないから間違えというのは短絡的だな。 コード見ればわかるようにkey(引数)がnullかどうかによる処理だ > 特定ブロックで使う物を、関数全体スコープで宣言してるので該当しないな JavaScriptにブロックはない。だからスコープを重視するならば 先頭に書くのが正しい。(俺はスコープ無視するけどなw) > 普通は最初に適切に分けるからな 最初に分けるのが必ずしも正しい訳じゃない。 コード短いんだし、直してみれば?
> JavaScriptにブロックはない。 一応訂正しておくか、ECMAScript5の範囲においてはだ。
>>247 >引数でないから間違えというのは短絡的だな。 >コード見ればわかるようにkey(引数)がnullかどうかによる処理だ だから何なんだとしか 引数でないのだから、オーバーロードの実装のためという言い訳はできない 他の型を意図的に代入し、使い回した時点で汚い >JavaScriptにブロックはない function、if、switch...ときちんとブロックはある上に、 スコープもライフタイムも違う なんか前絡んできた人と同じ人っぽいからもう止めるよ 不毛だし bulkの使いまわしはコミットログを見たけど理由がよくわからん 先頭にvarを固めているのはhoistingを理解していたからだろう
>>250 > 先頭にvarを固めているのはhoistingを理解していたからだろう この人は、hoistingを理解できないんだろうねw なんでJQueryの実装をそんなにマンセーしたいのか理解できない。 ライブラリなんて小規模で作るもんだから、読みやすさという基準は自分の主観で決めるもんだし。 後付けの解釈を止めろよ。
逆でしょ? 読みやすさという基準は自分の主観で決めるもんなのに jQueryの実装をそんなに馬鹿にしたいのか理解できない。
>>250 hoistingはコード規約で予防しているという事かな? それでも、宣言はブロックの先頭と制約するだけで十分な気がする 関数スコープに広げて宣言する理由がわからない ああ、意味がわかった 関数スコープで使用していた上に、ブロック内でも使用した場合か それならバグになる可能性あるな
やっぱVBの配列(0)で1要素あるってバグの元だろ 引継いだコード前任者が全員間違えたまま使ってて戦慄した
まあ、多い分にはいいんじゃないの? 行番号付きだった頃から配列は1要素を予備とすることが多かったからねー。 C とかから入ると気になるだろうけど。 自分も今は気になるけどw
DBに予備項目を作って空を保つのならわかるけど 配列の予備って意味若ランナー
配列変数を空の状態またはその逆にするのが面倒なので0番目は使わずに取っておく
動的配列の扱いが内蔵とVariantに代入する配列(Variant配列ではなく)で挙動が違うから Variantで統一するとvbsと扱い同じにできて捗る
printf("AとBの積は593です"); もうアホかとなんのためのCなんだか
>>266 掛け算作ってみろって言ったらこれが出てきた 掛け算作ってみろってのもおかしな物言いだな そんなコミュ力だからおかしな物が出てくる
>>270 あれだと最適化しないコード作るほうが頭いるだろ 一文字づつあたらしいプロセス作って動かしてくとか? >>12 なんで先頭じゃダメなの? 蟹飯本では当たり前のように先頭でまとめて宣言してるからそれに倣って先頭で宣言してるけど >>276 変数は使用する直前で初期化して使うべきだから 初期化と宣言が別だと必ず未初期化で使うバグが出る また関数が長く分岐が多くなると初期化されてるか判断が難しくなる 変数のスコープは小さければ小さいほどいい 関数先頭に宣言するのは昔のC言語の制約だったと記憶してるが今は上記理由からやめるべき for ループから条件でgotoでforの外に飛んで帰ってもこないプログラム
それ普通ですが breakがまさにそういう動作だし、breakはgotoの一種と言われているわけだが 二重のforを一気に抜けるのにgoto使うとか普通のテクニック return出来るならそっちのがいいけど むしろforからgotoで抜けてまたgotoで戻ってくる方が恐ろしいが そういうサブルーチン的な動作にgoto使われるとかなり鬱陶しいし それでgotoが禁止されたわけだが
for使ってるの?甘いね プロは全部gotoしか使わないよ
真のプロには、製品の方が合わせてくる。 企画原案に意見を求められるし、監修を頼まれる。
>>284 それで真のプロのプログラマだと どうなるわけ? >>285 その問題については既に解いてあるんだが、2chは数式を張り付けられないからなあ。 一休「虎が屏風から出てくれば捕まえられるのにな〜ああ〜残念だなあ〜」 将軍「出したよ」 って状況?
>>285 達人ともなれば、むしろタンスが小指に恐れをなし、というアレだよ。 971 名前:名無しさん@七周年[] 投稿日:2006/11/11(土) 00:56:10 ID:M8+ahUZV0 自称スーパープログラマー某 強烈加齢臭 メール見ない メール無視 ドキュメント見ない ドキュメント無視 説明聞かない 説明無視 話聞かない 話無視 ガム→むっちゃー むっちゃー むっちゃー むっちゃー 煎餅→バリバリバリバリバリバリ 菓子パン→モグモグモグモグモグモグモグモグモグモグ カップアイス→むっちゃー むっちゃー ペロペロペロペロ フロアすべてに響き渡る ばかでかいくしゃみ 当然手でおさえない 半径10mで耳鳴り、ひどいと頭痛誘発 異音と異振動 ドスーン!ドスーン!ドカーン!ドカーン! バコーン!バコーン!ズドン! ズドン! 机が近いとマウスポインターが飛ぶ 誤操作誘発 書類だしたりしまうだけでドカンドカン 口と鼻から異音 ふんっっ ふんっーーーーー マジでうっとおしい30秒ごと 備品破壊 貸与P C 破壊 他人のもの破壊 奴の作ったスクリプトとプログラムは使えない バグりすぎ
コメントが一切なくて、ものすこく複雑な処理をやっている。
ものすごく」の程度は人によるからなあ 複雑そうに見えてイディオム使ってるだけのもあるし 自動生成された物を見て複雑だなあって思ってる場合もあるし
他人のコード見てコメント無いだの少ないだの騒ぐ奴 本人はクソポエムみたいなコメント書く上にコメントの整備はしないし何がしたいのやら
>>298 お前の環境にはそんな奴しか居ないってだけ。 更新履歴すら書くの忘れる 面倒というレベルじゃなく、忘れる
ああー俺もコメントポエム書きてえぇーーー 本当はポエマーなんだよな俺 俺だってソースにポエム埋め込みてーんだよ!
>>300 最近思うが、更新履歴、コメントはいらないと思う。 その代わりバージョン管理だけは、キッチリ機械的にやって欲しい。 更新履歴は忘れる奴が必ずいるから、更新履歴で探すと見つからずにハマる。 コメントもプログラマの現状の理解と感情で書いてあるので、変な先入観で見てしまいハマる時がある。 自分で書いていても、10年位経つと何書いているか解らない。 また、自分の名前が書いてあると、忘れた頃に質問が来る。 更新履歴、コメントは百害あって一利無しだと思う。 /* 此処に入って来たらマジやばい。 誰も周りは助けてくれないし。 あのリーダの下は、本当に最悪。 もう、2度と一緒に仕事をしたく無い。 */ 当時、こんなコメントを読んで大変なやぁ…って思った。
/* そのリーダーなわけだが。 ↑そりゃないだろー 引継ぎも満足にできねーで去りやがって 自身の無能を知ってゆっくり野垂れ死んでね */ みたいなしょーもない愚痴コメントって実際少ないよね
だってそんなコメント無駄だし、むしろコメントの質を下げる要因にしかならないじゃん
こういうコードが入る時点で、 コードレビューも行われていないような ところだろうなってわかるねw
夢じゃなくて品質を上げるのは コードレビューしかないよ。 人によって生産性が100倍違うのも当たり前なのは コードが違うからなんだし。
コードレビューで品質が上がる… ますます、夢見る夢子ちゃん確定の発言だな…
質を上げるんじゃない 質の低いコードの混入を防ぐんだ
質の低いコード混入するのは室の低いマしか雇えないブラックだからだよ…
>>311 否定するなら理由を言えよw 何も言えないから説得力0なんだぞ >>313 > 質の低いコード混入するのは室の低いマしか雇えないブラックだからだよ… じゃあどうするかって話。 コードレビューしかないね。 コードレビューするのはどの業界でも当たり前の話なんだけどね。 新聞社でも新人が書いた記事をそのまま出すわけ無い。
いや、そんなに必死になって連投して否定しなきゃならないようなことじゃないから… コードレビューは、より良いコードを生み出す為でなく、室の悪いマのリカバリをする だけだって、言ってるだけだよ…
質が悪いのを直せば、質が良くなるのは当たり前ですね。 あんたコードレビューして、あんたが直してるの? 質の悪いプログラマは成長しないの?
だ・か・ら、質が良くなるんじゃなく、悪い質じゃなくなる=極普通、になるだけだよ… 未成熟なマなら成長したりするかもしれないけど、まあ、質の悪いマは多分成長 できなかったから、質の悪いマになったんであって、それが成長するというのは 見通し的に暗いと思うよ…
えとなぁ、どんな優れた奴でも普通の時代がなかったわけじゃないんだよ。 駄目なやつがいきなり優秀になるわけないんだよ。 極普通になって、それから成長すれば良くなるだろ。
だいたいな、悪いやつがなんでずっと悪いかって言うと、 それが悪いってわかってないからなんだよ。 それを教えるのもコードレビューなわけで。
すまんな、あんた俺と違って幸せな環境にいるみたいだから、どこまで行っても平行線だわ…
相手が単に嫌いとか理解できないってコードへの無意味な批判が無くなれば、コードレビューもありだとは思うんだけどな。 俺はテストパターン増やしたくないから、ダメなら途中でreturn false 最後まで到達出来ればreturn trueする関数書くけど、 returnは必ず一つ、って人となかなか言い合いになる。
>>323 MISRAで決まってるから仕方あるまい。 俺はその辺resultにNG入れておいて resultがOKじゃなかったら残りの処理はスルーして最後にreturnで返すようにしてる。 業界によって作法が違うからいろいろあるよな。 >>322 コードレビューしないのが幸せってなんだそりゃw お前の所はブラックなんだろうな。 >>323 途中returnだからってパターン減るわけないだろ 教えて解るのなら誰も苦労していない。 解る人も少数ながら、もちろんいるが。
>>326 早期returnっていうのは、パターンを減らすのが 目的じゃなくて可読性を上げるのが目的。 可読性っていうのは人間にとっての読みやすさだから。 人間が読まないコードであるなら別にどんな書き方でもいいが、 そうじゃないだろう? >>328 確かに可読性は人間にとっての読みやすさだけど、 理由じゃなくてただ単語の意味を説明してるだけなのが笑える returnが増えるほど可読性は下がる、という文化もある
可読性というか、一見上から下に素直に流れる関数のように見えて実は 文の最後にちょろっとreturnがあるのを見落とす、なんてのはあるね。
その理屈だと、そのreturnと同じ位置にi++とかあった場合、 それを見落とすんだろうなw
>>326 減らないけど、記載するマトリックスは減るんだよ。 通るifとかswitchを列挙して、真の場合偽の場合を分けないといかんから、 頭でフラグ持ったとしても、通過する限り「処理なし」と書く必要がある。 処理なしと書く限り、処理なしのエビデンス取らなきゃならん。 それが嫌なら、通過もしないようネストを深くしなきゃならん。 >>328 可読性ももちろん上がるな。対応する括弧を追う必要も無いし。 俺はすぐにreturnしちゃうけど、可読性は上がるよね I/Fの仕様が変わった場合、戻り値の変更漏れとかたまにあるけど
>>336 if (...) { } // 関数の終わり だと管理しなきゃならなくて if (...) return; だと書かなくていいの?妙な規則だね。 ひとごとながら、if (...) return 関数(); とか大丈夫なのかと思ってしまった。 MISRA準拠のときに困るからreturnは複数書かないな
(関数){ hage } と (関数) { hage } だとどっちがいいの?
コーディングルールにある通りでいい なければ多数派に合わせるようにコーディングルールを決めてしまえばいい
>>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 は、パターンは減るけど可読性悪すぎ。 >>325 コードレビューしないことじゃなく、コードレビューして 「成長可能かもしれない奴が周りにいる」という 環境が幸せなんだよ… >>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 >>344 そうそう。だから割と俺は早期リターンでネスト深めずに処理出来るものはしたいんだよね。 >>342 等価なのは後者なんだからやっぱりテストパターンは関係ないでしょ。 あとマトリクスと言ってるけど、もしかして前者の形で書いた場合は処理1を通過せずに 処理2を実行するケースも考慮しないとならないとか? ツール使わずに手作業でC1カバレッジ管理しなきゃならないプロジェクトなんて やったことないからよくわからないけど、大変だねw 基本的に腐ってる人っていうのは ルールで決まってるから、そうなんだ。みたいに ルールのためのルールを愛する。 自分で考える脳を持たない。
>>346 だから後者はネスト深くて嫌いなの。 当たり前だろ。 通る限り、例え結果がわかりきってようがその分のパターンも書かなきゃならんし、 スタック壊れた時のことも考えにゃならん。 ツールがどうのとかMISRAがどうのいってるお偉方には意味ないの。 机の上で紙でデバッグできなければ意味がない、検算は手計算、の人らだよ。 こういう派閥争いの結果、複数の形式が混ざった糞コードが生まれるのであった
モーゼ<俺は中道を行くぞー!バリバリ ヤメテ!>
>>350 じゃあまとめると、>>323 で途中returnを使わないとテストパターンが増えるかのように書いて いたのは、おまえが深いネストが嫌い+おまえのところの妙な管理 の合わせ技ってことね。 >>353 何に噛み付いてるかわからんけど、増えるよ。 >>351 この問題に関して言えば、どっちがいいかは ツールで計測可能なので、それ持ち出せば一発だよw >>356 必要、だから、文書化されてたらノーカンだよ。そういう意味では本来。 >>344 だせーから1行でretunrnできねーならガード使うな 意外と盛り上がってて吹いた if文のネストを減らすためにマトリクスで何がくるか特定して分岐させる switch(state){
書き損じた a => 1 または 0 b => 2 または 0 c => 4 または 0 d => 8 または 0 として state = a | b | c ・・・; switch(state){ : } ってやつね これでif文が綺麗に消えてくれる(ことが多い)
んでここがちょっと言いたかったことだけど このstate switchは当然状態の数だけ関数も長くなるんだが この場合いくら長くなっても可読性は全く落ちないという特性がある みんなで使って幸せになろう
この場合エラー処理もえらい単純化できる つまりdefault:に来たもの=エラーということ 最初に状態設計をきっちり行えばこの方法が今のところ最も効率が良いと 言ってしまおうかな
>>361 ifの代わりにswtchになってるだけじゃねーか。 こういうのは関数テーブル使えばいいんだよ。 そいうことを言いたいわけじゃないんだがなあ 上でエビデンスの話が出たが まさに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; } つーかテストパターンを同時にを書いていく前提なら上で挙がってたコードは全部論外だろう
そして関数テーブルにすると 1テストパターン = 1関数になるので もっと単純化できるという話。
関数テーブル覚えたての人なのかなあ そういう言語機能寄りの話は今してないの判んないかな
この方法は見ての通りコードレビューも短期間で終わるのが判ってもらえると思う 状態が一箇所にまとまってる 状態によって必要になる処理が一箇所にまとまってる どういう条件でエラーになるか簡単に調べられる 設計書やテストパターンとも一致させやすい 全て一箇所にまとまってるのがポイント 結局これ以上の物はできないんじゃないかな
テストケース数に合わせる為にロジックを分かりにくく記述する本末転倒手法
>>354 良く見るな。 括弧を章する俺かっけーってな奴。 テストファーストならそれもありだろ。ブラックボックスでいいんだから。
ネストが増えるのは問題だけど 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は一つである。 これで解決する程度のことを問題視することに何の意味があるのか?
>>364 なんで意味ないことするの? 同じもんを外に抜き出してるだけじゃん。 そもそも入出力のパターンはテストで確認すりゃいいんだから、コードをパターンと一致させるのは無駄としか言いようがない >>373 それで解決するなら最初からそう書いてればいいんじゃないの >>375 いや、解らない? returnを一つにするというのはこれらと同じように、 無意味なことだって言ってるんだよ。 コーディング規約って、一種類しか無いとでも? ゆとりって面倒臭いな。
コーディング規約の為のコードじゃなくて、なんのためのコーディング規約かを考えろよ そんなだからクソコード量産するんだよ
性能が必要ないカテゴリでは性能を低下させるコードでも許容されるだけ 性能が必要なカテゴリではレビューでもreturnパスどうのより、そのコードが 速いかどうかだけが吟味される。
基本は可読性高いコードが評価高い それでパフォーマンス悪くてもボトルネック部分の速度を改善すればいい しかし速度重視の難解コードはクソソースと呼ばれ後ろ指さされる 速度はアーキテクチャで解決していくのがベストだわな
だから、それを待てるカテゴリは、元々性能が問題になるようなカテゴリじゃ なかったというだけ、「次がある(キリッ」「後がある(キリッ」なんて言ってられる 生温いとこじゃないものも沢山ある。
>>377 こっちには、return複数あったらだめなんて言う 意味のないレビューをする人はいないんでねw >>381 > しかし速度重視の難解コードはクソソースと呼ばれ後ろ指さされる いつも思うんだが、速度重視したらなんで難解なコードになるのかわからん。 速度が速いコードっていうのは無駄がないコードなわけで、 普通は可読性が高いんだよ。 速度を速くするアルゴリズムがある場合で、そのアルゴリズムが 複雑な場合に限って、速度を重視したら難解になるんだが。 > しかし速度重視の難解コードはクソソースと呼ばれ後ろ指さされる 非プログラマか初心者が抱きがちな想像やな >>384 それな 速度自体が無駄w なんで初心者って無駄に速度にこだわるのw
皆、自分の意見こそが正しく正義であると信じ、 他者を必要以上に攻撃する傾向がみられる なるほどこれが宗教ってやつか 世界から戦争が無くならない訳だ
>>384 例えば時間のかかるデータ取得が100個あるとする 速度重視の場合早い時点でスレッド作って先行処理しておく 実際値使う箇所では中でスレッド待ちしていてなんでわけわからないことやってるんだと言われる データなんてGet回すだけだろと アルゴリズム難解といえば自前のHashMapは最初わからんかった 文字列足しこんでへんなビット演算やって コメントもなかったからあれはなかなか理解されない >>388 スレッド使えるなんて羨ましい こっちは標準Cライブラリどころかcrtすら使わせて貰えないから RAMをクリアしてmain関数を自分で起こすところから書かなきゃいけない絶望的な状況 >>389 組み込み系? クラスも使えずレジスタがどうだとかリソース最小限に留めるとか無理だわ 基本は作りやすさ重視で必要に応じてチューニングが1番仕事しやすい >>388 だからそれ、アルゴリズム変わってるじゃん。 馬鹿なの? クソソース書いといてその言い訳に速度重視とかザコ過ぎない? お前が速度なんて語るの百年早いのはそのクソソースに丸出しなわけで よくあんなクソソース書いててそんな態度取れるなっていう不思議な子知ってる
>>386 おまえは一生ソートに可読性の高いバブルソートでも使ってろよ >>391 アルゴリズム同一でと言った覚えないんだが? むしろアルゴリズム同一で速度が飛躍的に上げれるならマジで教えて欲しいが 16進数やビット演算とか使ってるコードは見にくいからクソソースでいいですか?
>>395 何進数だろうが関数内にマジックナンバーは入れちゃダメだろうね 定数かマクロにして実行部とは分けて宣言・定義するようにしてるよ じゃあ何進数だったらマジックナンバー使っていいんだよ!
「定数は定義して使え」に対して #define value_1 (1) #define value_2 (2) とかいう馬鹿もいるんだよな
#define value_one (1) #define value_two (2) これなら大丈夫(キリッ
#define ZERO 1 はGNUで見たことある。
マジックナンバーは基本だが定数を使った判定をあちこちに書かないことも重要 例えばファイルの存在チェックでファイルのビットフラグ立ってないことで判定 しかしフォルダも除外したい等仕様変更が予想される その度多数の修正を入れるのは危険 isExist()などでラップして判定処理は1箇所にすると変更に強くテストも楽
マジックナンバーは必要悪でしょ。 周知されてて、全体で統一されてたら何も文句無いけどな。 日時未定を29991231で持ってるシステムに関わってたけど。 特定のビットが立ってないことと、ファイルの有無と、ディレクトリであるか否かはまた別問題ではないのだろうか。 isExistなのに、ディレクトリ除外しちゃうの?ライブラリなのに外から見た挙動変えちゃうの?って不安のほうが大きい。 そんなもんで判定せずに、判定箇所で切り分けるか、旧関数自体をassertで殺す方がマシ。 その度に多数の修正は躊躇なく入れるべき。 挙動を変えるのに、変えた意識が無い方が、 あり得ないくらい誰も原因に気づかない、どハマりする障害を起こす元。
>>404 例が悪かったからマイナンバー導入を例にする 従来は同一判定をequal()で中身は住所と指名で判定してたとしよう この場合マイナンバー対応は中身をID比較にすればそれだけで対応完了 これが比較箇所に直接住所と氏名の比較を行っていた場合修正は時間がかかる 修正ソース毎にドキュメント書かないといけないプロジェクトでは発狂もの 言いたいのはやりたいことを外に出して実現手段は中に閉じ込めろってこと 要はカプセル化だが簡単なものだと忘れられることがよくある >>405 ダメ。 名前と住所で比較するロジックと、 マイナンバーで比較するロジックは別物。 それだけで対応完了にならないよ。 それでは、既存の比較するロジック全部洗って、それ呼んでる所を全部テストせなならん。 普通は、呼び出し側ソース修正と同じかそれ以上になるんだよ、ライブラリの挙動変更に対するドキュメントとテストって。 やりたい事をカプセル化するライブラリの、内部挙動が変わったらそれは最早カプセル化されてないとしか言いようが無い。 名前と住所ってのは、ユニークになるとは限らない情報だし、逆に歴なんか持ってたら2つ以上のレコードが一つを指すかもしれないレコードになるでしょ。 今まで同じだったけど今回からは違う人(田中一郎さんが昔住んでて、引っ越した後、今は別の田中一郎さんが住んでる)、や 今まで違う人だったけど、今回からは同じ人(同じ住所だけど、結婚して姓が変わってる)が出る改修はカプセル化失敗としか言えない。 まさにそういうシステム作ってたけど、「同一人物っぽい人」としか言えないから、警告しか出してない。 内部発番のシリアルのIDを比較していた所を、マイナンバーでひっかけるようにする、位の変更くらいじゃないの?その変更が通用するのは。 それでもパターンテストは必要。 呼び出し側を修正して、きちんと新しい関数が呼ばれている所からがテストのスタート地点。 修正ソース毎にドキュメントなんか普通作るよね。 波及コードだけどローレベルで担保されてるから大丈夫。は通用しない。 現実手段を閉じ込めるのは、同じ動きをする事が大前提。 >>406 理想はそうだけど現実解じゃないよそれ。 いつのまに絶望的なコーディング論を紹介するスレになったのか
>>404 #define DATE_UNDEFINED 29991231 みたいな感じにマクロ化してあればいいだけじゃん? マジックナンバーで許されるのは0と1くらいだと思う UNREFFERENCE_PARAM(hCurInst)とかいう無意味マクロまーじ
>>406 また言葉足らずだったが話の前提として住所と氏名でユニークキーになる場合の話 勿論結果が修正前と異なるようなら別のメソッドにしたり置き換えたりが必要 あとソース修正毎にドキュメント作るのは金融くらいしか聞かない テスト自動化してればシナリオ流して終わり 必要以上に金かけるよりほぼ間違いないでコスト削減が今の主流だと思う スマホゲームでメンテ後に即メンテとかよくあるだろw >>413 医療だけど、特殊例だったのか。 だとすると、医療でそういう運用してても出る障害考えたら、世の中のプログラマは一体どんな気持ちでプログラムしてるかわからんな。 必要以上に金かけずにコスト削減して、障害出したら、それは必要な金だったんじゃねーかなぁ。 >>414 なるほど医療か 医療は周りにいなかったからわからなかった 医療だと慎重にならざるを得ないがバグ出ても修正すれば問題ない分野はそんなにテストに時間をかけない 毎回手動テストしてリリースするより自動テストでバグ出たら修正のほうがトータルコストはかからない リリース優先か品質優先かは分野で全く異なる ゲームで慎重なテストで時間使ってたら首飛ぶし逆もまた然り あと金の話だけどリリース時期は作る前から決まってる そこがずらせないとなればバグのリスクとってもリリースを優先しないといけない もしくは機能のそぎ落とし 3末リリースが遅れると決算への影響が大きいとかいろいろ事情がある バグは出るものだからリリース後に改修すればいい なかなか思ったとおりに仕事できないのは世の中の常w
自動車とか産業機械とか医療は厳しいよね。 バグ流出したら普通に人が死ぬからなあ。
絶望的なソースコードか〜 俺のソースコードは、いつでもスパゲッティになってるな〜
FXのツールとかで時限で誤動作爆発させたら大量に電車に飛び込みそう
糞みたいなコードにはもれなく言い訳がついて来る もし本気を出せば綺麗なコードが書けるかのような
最近JavaScriptのswitch(true)イディオムを知ったが do { ... } while(false)と同じような邪悪さを感じた
>>423 >do { ... } while(false) これ最適化でdoの中に入ってこないイカしたコンパイラに昔遭遇して 発狂したことがある マイナンバークラスから氏名クラスへの変換関数が存在した場合の問題点。
期間持つのと、変換日時を任意に設定出来ることが最低条件かな。 変換ではなく、取得クラスになるだろうけど。
>>409 0すら定数定義させられた事があったわー >>431 これは正しいんだよなw マジックナンバーはだめ じゃあ数字に対して全部defineすればいいってわけじゃない。 何が数値そのまま書いて良くて、何がダメなのかもう少し良い説明ない? たとえばVBAの話になるが、VBAからシートの特定のカラムのセルを参照するには Cells(行, カラム)やRange("行:カラム")のように指定する これはカラムの配置を変えただけでプログラムが破綻することを意味する さてExcelにおいてカラムの配置を変えたいことは良く思うことである そこで1行目のヘッダとなる名前とカラム番号を連想配列に登録しておき 名前でカラム位置を特定するという方法がある こういった対策をしとかないとVBAはマジックナンバーだらけのコードになる 対策したコードは処理の最初に名前から番号への変換のコストが発生するが それは些細なコストである ・・・わかったかね
その値が何を意味してるのかを定義して同じ意味のものをまとめるだけ もともと可読性と変更に強くするためにしてるのだから あとdefineはundefで消すこともできるため難解コードは解析しづらい 定数もしくはenumを使うのがいい
上のRangeの場合は"カラム行"だけどまあどうでもいいわな さてCOMインターフェースの1つIDispatchはこれの逆をやっている IDispatchは全て名前ベースでプロパティやメソッドを呼び出せるようになっている が実はそれらには一意のIDが割り振られており、事前に名前からIDを特定しておくこともでき うまく書けば名前からIDへの変換は1度のコストで済む連想配列を内蔵した形だ ちなみにここで登場した連想配列に名前を格納する仕組みは 主に文字列リテラルとして実装されるが、これはマジックナンバーではない これをマジックナンバーとみなしてさらに別名定義するアホはいないだろう
GUIDという概念がある コイツハマサニマジックナンバーデコノアイデーハセカイニヒトツシカナイコトガホショウサレルアイデーナノデアル デモニンゲンハコンナモノイチイチオボエテラレナイカラマサニマジカルナウンヨウガナサレテイル
マイナンバー制度という概念がある 主に国内でやりとりされることを想定した奴隷番号である 公開すると害があるらしく最後には官憲が動くかもしれない危険な番号として最近認知された
国民総背番号制という古来からの論争の種だったのだが,最近は抵抗運動はなかったのか?
そもそも既に番号振られてるよね、事実上、って気づいたからじゃない?
マイナンバーの本体そのものは民主時代に通ってるがな 今騒いでるのは改正と称して悪用するための変更
そういやテストデータの人名に政治家やら備考欄に真実()入れてきた外注があったわ
>>432 function pi() の中で3.14。 function month() の中で12。 function hour() の中で24。 こんなん、常数にする?俺はしない。 >>445 お前誰だよw お前ごときがしないからってどうでもいいわ。 一般的にそれらは定数に良くなっている。 >>446 #define マクロのない言語は哀れだね いや、マクロが欲しければm4みたいな汎用のマクロプロセッサを使えばいいし、 単なる文字列置換であるマクロは、コードの静的解析能力を下げ (例えばプリプロセッサを通さないと構文エラーかどうかわからない) エラー時の情報をわかりにくくしたり、分かりにくいバグの元になったりするので 排除する方向にあるんだけど。 C言語でもdefineよりもconstやinlineを使うのが常識だしさ。
#define ABC 5 + 10 void func(void) { int abc = ABC * 10; print("%d", abc); } このパソコンは算数が苦手になったみたいです。 150と表示されません。 ………………死ね!
コンパイラさんがどういうことやってるかわかってない人が
コンパイラじゃなくて、余計なことをやってる プリプロセッサが原因だけどねw
プリプロ 何ですか それ な方たちがやってるんでは
>>450 extern constにしておけば実体持ってるライブラリを入れ替えるだけで piの中身が3.14なのか3.1416なのか3.1415927なのかを切り替えてリンクできる 組み込みなんかではここのセクションに特別な絶対アドレスを振っておいて Sフォーマットのファイル作ってから後で値を書き換えたりする >>451 いいこと言うね 使う側からは便利に使える反面複雑な使い方してると解析不可 defineはundefで消せるからコンパイル順通りに解析していかないとそのdefineは別の定義かもしれない >>458 プリプロセッサだけ通せばいいだけだろ 解析不可とかアホか >>459 小さい規模ならまだしも業務用のでかいのに毎回やるのは非効率 後続の言語が切り捨てたとおり現状マクロは負の遺産 今の時代はフレームワーク使って読みやすいそこそこのものを短期で作ることが求められてるからね >>459 プリプロセッサを通した結果に対して、 コンパイラがエラーを出したとき、 プリプロセッサを通す前のコードみても意味がわからんし、 通した後のコードは自分が書いたコードじゃないし。 プリプロセッサを通した結果に対するエラーから、 プリプロセッサを通す前のコードをどこをどう直せばいいのか そのつながりを人間が判断するしかなく意味不明になるんだよ。 人間が頭の中で逆プリプロセッサをしなくちゃいけなくなる >>463 IDEはまだましよ。 そういう変則的なものであっても頑張って対応してるから。 問題はテキストエディタを使ってる場合。 そういう細かいところの対応までできてないからなぁ。 C ( or C++ ) のソースで #if 0 #endif でコメントにするのはやめて欲しい。
SublimeTextなどを使って範囲選択して 一気に行頭に//を入れたほうがいい。
>>465 理由を述べよ。 単に嫌うのは、食わず嫌いと一緒。 >>468 自分で考えろ。 考える前に聞くのはバカ。 >>470 バカのうえに早合点のトンチンカンで三冠王だな。 俺の考えが正しいことが証明されたな。 俺の考えはググった程度じゃわからんよ。
>>465 この方式はテキスト直編集や文字列検索の側面から懸念される しかしメリットもあってコードの切り替えがしやすい ifdefなら複数箇所修正も一気に元に戻すことも可能 誰かの修正でも消した人間がやってくれていれば修正当時の状態に戻せる また修正が重なると//はインデントずれるがifの方はズレの発生もないメリットもある 俺はそのコードを検証等で使用する可能性があるかどうかで使い分けてる デメリットもブロックコメントと同等かそれ以下だと思うがな。 まぁ、ネストが重なるとわかりにくくなるから1レベルに限定されたコメントの方が いいという意見もあるだろうけど。
うちは//も複数行にわたるブロックコメントも禁止だし コードのコメントアウトは#if 0 〜 #endifが推奨になってる Eclipse使ってればこっちの方が楽
>>475 その規約をどうにかしたほうがいいんじゃないか #if 0じゃ意味が判らんから定数使えや、とエスパーしてみた
またそれかw 定型句は意味がわかるから問題ないんだよ。
#define NOUSE 0 #ifdef NOUSE : : #endif
#if 1 // どっちにしようかな //速いけど詠み難いコード #else //遅いけど判り易いコード #endif
バージョン管理システムのチケット番号でifdefしてるのは見たことあるわ。 果たして本当に、それでそのチケット番号の状態に戻るのかは誰もやってないと言う。
>>482 同じ個所弄ったらネストしていくのか…? >>482 戻るかどうかは二の次 一番重要なのはどんな修正をしたかということ 自分はいなくなってもコードは10年20年先の人間も目にすることがあるのだから バージョン管理でやればいいという声もあるが果たしてそれ20年後に見れるか疑わしい 国際標準でなければ廃れると見たほうがいい やっておいて損はない > バージョン管理でやればいいという声もあるが果たしてそれ20年後に見れるか疑わしい 絶対確実に見れる。
見れるというのは読めるということ。 無駄な情報ばかりで、重要な事がわからなければ、 それは「見れない」という。
見れるというのは探し出せるということでもある。 ある事柄に関する修正は、一箇所で終わるとは限らない。 複数ファイルを同時に修正することがある。 複数のファイルに分散された、ある事柄に修正をもれなくすべて確実に 把握できる保証がなければ、それはどんな修正をしたかがわからないということ。 これはファイルのコメントなんかじゃ絶対にわかりっこない。 それはバージョン管理ツールでなければ不可能である。
20年後の人「なんだこの糞コードは・・・当時でもバージョン管理くらいあっただろ!?」
クソコードとバージョン管理に直接の関係はない。 だが、バージョン管理を使えないような奴は クソコードを書くというのは大体あっている。
>>484 CVSは25歳 SVNは15歳 Gitは10歳 バージョン管理ツールでやればいいな >>482 バージョン管理システムは手段であって、 本来はその改修モジュールの対応前、対応後のソース一式がまとまってれば文句はないんだよ。 対応後の一式があれば、それは次の対応前の一式だし。 そこをサボって1つのファイルに前後を入れるから意味がわからなくなる。 >>491 小さいアプリならそれでいいだろうけど、 複数人が開発している大きなアプリだと、 1. どうやって各自の変更をまとめるのか? 2. 改修は何百、何千となるが(少なくともバグの数と機能の数以上になる)、それだけの数の「一式」を欲しいのか? それを実現してくれる手段がバージョン管理システム >>492 大規模開発してるけど、 各自の変更自体は、そもそもがバージョン管理システム以前の仕組みとして、 変更仕様書書いてスタンプリレーして台帳化までしてるので問題ない。 それだけの数の一式、と言えども、サブシステム毎には別れるし、その中でのモジュール毎にも別れる。 あるモジュールの、rev xとrev yは持っておく、って事だよ。 出荷は、モジュール単位でも出せるけど、基本はサブシステム毎で、さらに言えばパッケージ毎の定期出荷にのせるべきだな、うちは。 サブシステムA ver 1.1は モジュール1 rev 1 モジュール2 rev 1.1 で出来てて、 パッケージ ver 1.2は サブシステムA ver 1.1 サブシステムB ver 1 で出来てるって台帳がある。 実現は紙で1990年代から出来てる。 それを便利にするのがバージョン管理システム。 手段じゃない。道具。 >>493 では聞くが、 その台帳を検索するのに、どれだけの時間がかかるのか 考えたことはあるかね? 思い出すだろう? 大量の台帳の山から その時の情報を探すのに数日かけたことを。 >>493 ソフトウェア会社なのに、それをコンピュータで 実現してないってのがダメな所だよなw 自分の仕事も効率化出来ない(コンピュータ化できない) 会社に他社の仕事の効率化なんてできっこないわけさ。 それをコンピュータ化したのがバージョン管理ツールだからね。 >>494 > 楽したつもりで道具に使われてる奴等多すぎ >>495 > 言っとくが楽してるつもりは一切ないからな だよなw 同じことができる道具。それがあって、 楽できない道具を使うの(手動で管理w)が偉い!って思っちゃう。 体育会系かよw エクセル使うとズル呼ばわりする老害と一緒だ。 同じ道具なら、より効率的に早く楽にできる方がいいじゃん? バージョン管理ツール使えば、台帳なんかで情報を調べるだけじゃなく、 その時のソースコードに戻すこともまで簡単にできる。 一番重要な事をお忘れか? 最終的に九州から北海道まで歩いていけるから問題ない? それだけでは全然足りない。どれだけの時間がかかるまで考えてこそプロ。 まあ、あれだよな。 使える形で保存されてないデータは、使われない。 使える形で保存されているならば、使われる。 使われないデータをたくさんためても 自己満足程度の意味しかないわけで。
>>498 それで新幹線と飛行機と船で行けたとして、 「着くのが早いから」って理由で飛行機に乗るのはいいと思うけど 「マイル貯めるために」とか「ボンバルディアの機材こそ至高」ってのは なんだかなあ、って話っしょ こういうのはその時にベターなもの使えばいいの >>500 例え話はわかった。具体的にはどういうことかって話だ。 バージョン管理を使わないと凄く非効率だから 殆どの場合はバージョン管理ツールを使う方がいい。 ただしバージョン管理を使えないという呆れるほど技術力が低くて 使えないものを大量に生成し多くの無駄に時間がかかって、あとで 自分らが苦しむだけなんだが、それを許容するのならば、 手動で管理しするのがベター(笑)ってことだよね。 >>490 VSSやCVSやSVNやら今使ってるの皆無だろ 以降の際に履歴捨ててるだろうし 標準化されない限り結局は短命 Gitも20年先使えてるかわからんしな >>496 >>497 何言ってるんだ… 実現自体は昔から出来ている、それを便利にするのがバージョン管理システム、と言っているだろ。うちでも使ってるよ。 台帳自体もそっから今は自動で作ってる。便利だよ。 2000年代前半は内製システムだったけど、今は普通にバージョン管理システムとチケットトラッキングシステムだよ。 そもそもリリースノートは台帳から作るからリリースノート見ればわかるし、 わからなくて台帳をなめて、それでもわからなくて、 各文書の山から検索しないとダメな事自体、発生したらヤバい。 同様に、台帳の表題をあやふやにしてると痛い目に遭う。 検索したらわかるっしょ、と適当にする奴居るけどね。 今でも、サーバ、ネットワーク全部落ちてもサポート程度は回る程度に台帳も文書も刷ってるよ。 お陰様で震災でもなんとかなった。 >>502 使ってないだけで、使える。 移行の際に履歴を切り捨てるのは、お前の問題であって、技術の問題ではない。 他に標準化されているものなどない。 紙の管理? ソースコードのコメント? どれも標準化されてない。 今のデファクトスタンダードがgit Gitから移行することはあっても、Gitがなくならないことは 1982年(33年前)に登場したRCSがまだ使えることからも 歴史が証明してくれている。 >>504 うちはパッチ当ててでも使うだろうな。 多分デファクトスタンダードはあるけど、 デファクトスタンダードなんてどうでも良いと思うよ。 管理できれば良いんだから、無理に流行りに乗らなくても。 あと、gitはおそらく向いてないな。うちには。cloneに時間やたら掛かりそう。 > 管理できれば良いんだから、 だからまたw 管理できるのは最低限の条件で、 それを素早く確実にやるのがプロでしょ。 出来ればいいんでしょじゃないってw > あと、gitはおそらく向いてないな。うちには。cloneに時間やたら掛かりそう。 ん? cloneするのは最初の一回だし、ネットワークが遅いなら 特定のディレクトリからでもcloneできるが。
>>504 使ってないなら見てないんだから活用できてないわな 大きな修正にはバージョン管理は当然としてソースにも履歴を残してリスク軽減が当然だと思うんだけどな そのバージョン管理のソフトも必要なときには使えなくなってる可能性を考えるべきよ その履歴が標準化されてれば将来もコンバートできたりするんだろうがな 何かに過信してリスク分散もできない会社のシステムなんて怖くて使えないわ >>508 卑怯ですね。 バージョン管理ツールには、凄くいろんなことを求めて それが出来ないと悪く言うくせに、 最初から何も出来ないものは、出来なくても文句言わないんですか? > 何かに過信してリスク分散もできない会社のシステムなんて怖くて使えないわ リスク管理っていうのはね。コストを考えなきゃだめなの。 ソースに履歴を残すことのデメリットを計算に入れてないから、 あんたの考え方は、考えるに値しないの。 >>507 何言ってるかわからん。 バージョン管理システムに反対してるつもりはない。使ってるし。 ソースにコメントで残す事を肯定もしてない。 素早く確実に出来るに越したことは無いよ。 出来れば良いんだよ。手段なんだから。 やらなくて良いことをやらないと決めるのもプロの仕事。 そう決めるにあたって、もちろん使ってみたり選定したりしてるけどね。 その選定や決断や調査にも工数かかるの。≒お金なの。 知らんで言ってるわけではない。 cloneするのは最初の一回、な。 常駐が入れ替わる度に数ギガのトラフィックか。 空論も良い所。 一回まともな体制のある程度の規模の開発に関わったらどう? お、このスレでは日頃のストレスをぶつけ合えばいいのか?
>>509 悪く言うつもりはないよ ただあまりに頼りすぎてるとそれがダメになった時に崩壊するってこと 原発然りデータ分散保存してなかった会社然り コストカットをやり過ぎた結果が全電源喪失なったの忘れたの? 東日本大震災あってコストカットのために東京にしかデータ残してなくて全データ喪失しましたで顧客は納得するの? 二重に安全策を行っておくくらい基本じゃないか? 余談だが俺の会社に20年前のバージョン管理の履歴残ってるプロジェクトひとつもない なんかいきなり原発の話しだしてきワロタw それとはぜんぜん違うだろう。
コストを削った代償の話で何も的を外してない 二重の安全策を怠った最も悲惨な事例だよ 高台に電源装置置いとけば事故は防げたんだから 過信といえばまだ二十年もたってないがアップルが経営危機に陥っていた時期に誰が10数年先にマイクロソフト抜いて世界一の企業になると予測できたか? 世の中本当に何が起こるかわからないよ
大きく的はずれだね。 必要ないと思っているものを削減するのと 必要あるものを削減するのとではぜんぜん違う。 また今度は関係ないアップルの話しだすし。 次はISISが戦争を始めるとかいいだしそうだ
原発おじさんはVCSの謎の突然死よりも 部下がこのスレに書き込んでいないかを心配した方が良いと思う
言いたいのは未来を予測できない以上二重以上の策を提供すべきということ その必要かどうかはこの先ソースを保守する人間が判断するのであって今の人間が決めれることじゃない 20年前のプロジェクトの修正履歴見れるか試みたらすぐわかる話
サンプルでないコーディングで foo だ bar だ hoge だのと
>>512 うち、20年前のはコメントでの変更履歴がまだあるわww 未だ動いてるのが凄いんだけど。 >>519 うちもコメントやifdef等で残ってるのがある 修正入る部分にこれがあると何となく当時の背景が見えてくるから助かってる バージョン管理は次々鞍替えして数年分しかない どこが早く履歴の標準規格化してくれたらもっと分かりやすく差分や経緯を見れるんだけどな > 修正入る部分にこれがあると何となく当時の背景が見えてくるから助かってる 過去のバージョン見ればいいだけでは? コミットログを見れば、何をしたのかもわかるし。
> どこが早く履歴の標準規格化してくれたらもっと分かりやすく差分や経緯を見れるんだけどな 差分の見方とコミットログの書き方を勉強しようよw 一体、何を標準化しろと言ってるのかわかんね。 お前なら、どういう規格を作るのか言ってみなさい。
>>521 もちろん過去のバージョンと台帳と突き合わせて見ればいいんだろうけど、 そこに変更が入っている事、がソース変更時に読めるのはわかりやすいよ。 今でもチケット番号だけ書いてる。 チケット番号書いとけば、コミット時に拾ってくれて、チケットに対象として載るしね。 > そこに変更が入っている事、がソース変更時に読めるのはわかりやすいよ。 ほぼすべての行に変更は入る。最初から何万行というコードが一気に出来上がるわけじゃない。 > 今でもチケット番号だけ書いてる。 ソースコードには、コードの意味ではなくてなぜそうしているか?を書く。 変更の理由という形ではなくて、なぜそうしたのか?を書かなければいけないほど 重要なことであれば、その理由を書いた上でチケット番号に関連付けるのは普通。 その場合は、コメント(チケット番号)は変更した理由という履歴ではく、 現在の姿として、なぜそうしているかという形で書けばいい。 変更したものを全部残すという考え方をしていると、現在のコードではなく 過去に存在し今は存在してないコードに対しての履歴まで残ってしまうだろ。 不要な履歴コメントは消すべきだ。
>>524 何が言いたいかわからん。 関数の頭のブロックにもチケット番号列挙してあるんだけど、 古すぎるコメントはチケット番号だけ残して消せば良いんだよ。 何故そうしているか、はコーダさん用のコメントだよね。 それらは本来、変更仕様書に書いてあるべき内容。 重要なことも何も、ソース改修はすべて重要な事だからチケット切って文書化すべき。 何故そうしているか、だけでは片手落ちも良い所。 ○○年度○月○○法改正により計算方法が変更になり、下記の計算方法で計算する必要がある 以下計算式 資料 No.xxxxx Pp y-z及び… なんて完璧にコメント書いてくのも、文書の方に書けと言いたくなる。 一切残さない、もありなくらい。 1998年度○月○○法改正により計算方法が変更になり、下記の計算方法で計算する必要がある 以下計算式 資料 No.xxxxx Pp y-z及び… これは消していいだろう?
>>525 > 何が言いたいかわからん。 ソースコードに余計なコメントを書くな。 変更履歴も書くなって話だよ。 仕様は仕様書に書いてあるんだから、 documentディレクトリの○○テキスト参照って書けばいい。 仕様が新しくなったら、新しい仕様のファイル名に書き直すだけ。 修正のたびに行を増やす必要はなくなる。 >>526 1998年度以前のデータが二度と確実に入って来ないのであれば消しても良いと思うけど、基本は残すべきだと思う。もちろん文書に。 コメントとして処理内容を書くのであれば、これくらい書かないと片手落ち。 不足のあるコメントは余計なコメントに等しいよ。 >>527 だから、チケット番号で良いって言ってるんだけど。 文書載せられないようなトラッキングシステム使ってたらすまん。 >>523 ソースコードに書かれたチケット番号をBTSが拾ってくれるの? というか拾って何になるのか判らないけど チケット=作業、作業が終わるタイミング=コミットなのだから、 チケット番号(≒Issue番号)はコミットログにつけるもんだと思うが? 特に重要な事に関しては、Issueに対してソースコードで注釈入れるけどな。 Issue駆動で開発すると 1. 新たなIssue(バグ報告や機能追加など)を作成する 2. それに対してのプルリクエストを作る 3. そのプルリクエストに1つまたは複数のコミットが含まれる。 4. そのプルリクエストをマージするとIssueが閉じられる。 という流れになる。 またプルリクエストっていうのは(Issueもだけど)、掲示板みたいなもので それに関しての情報を時系列に会話するように記録できる。 最終的な修正内容をプルリクエスト(会話部分じゃなくて主文)に書いてそれをコミットすれば、 ソースコードのコミットログとして修正内容がバージョン管理される。 あとから修正を追いかけたいときはコミットログを見れば修正内容がわかる。 リンクも記録されてるから、コミットログからプルリクエストにもIssueにたどり着けるって寸法 これがgithubを使った主な開発のワークフローね。
>>530 拾ってくれるよ。コミット時に。 ソース管理もバグトラックも出てくる帳票も全部連携してる。 コミット時にも書けるけどね。 どの関数に手を入れたかわざわざ手で書かなくても良くなってるのと、 ソースとリリースノートだけ読んでもある程度わかるように。 あと、逆にリリース用チェックアウトした時にリビジョン等のスタンプも押される。 手動でソースコードに変更履歴書いて 古いコードを残す文化とまるで違うw
>>532 チケット番号←→コミットログ←→変更ファイルで芋づる式に取り出せる情報なのに 人間が変更ファイルをマーキングして周ってるのか 本人が言ってるならそうなんだろうけど随分変なやり方してるね >>534 正確には変更ファイルにマーキングしてる訳じゃないよ。 変更箇所にマーキング入れてるだけ。 いつでもdiff取れるわけではないからね。 > いつでもdiff取れるわけではないからね。 いつでもdiff取れるようにしなさいよw あほだなぁ。
>>535 納得した そういうやり方ならありかもね つってもソースコードから参照されてるチケットが陳腐化してないか 一々管理しなきゃならない不毛さを思うと その時間でコメントを真面目に書けよって思うけどねw >>521 その時コミットログ見れればそれでベストだが環境移行等で見れなくなった時の話 >>522 差分やコミットログをどんな環境でも見れるためのファイルフォーマットだよ ファイル仕様が決まれば別のバージョン管理ソフトも必ず対応するからOS変わろうがツール変わろうが将来見ることができるだろう コードが理解不能になって作り直しってのはよくあるからな > その時コミットログ見れればそれでベストだが環境移行等で見れなくなった時の話 見れなくならないように、ちゃんと環境移行すればいいだけ > 差分やコミットログをどんな環境でも見れるためのファイルフォーマットだよ 差分はgit diffでテキスト形式に変換される。 gitじゃなくてもすべてテキスト形式に変換できる。 テキスト形式が見れない環境など無い。
>>539 同じところにも存在してればなんとかなるかもしれんが配置変わったり消したりするのは普通に発生する その時見れないのでは話にならない 古いプロジェクトやったことある人間ならわかると思うが修正履歴が完全に残ってすぐ見れるなんて夢物語 ドキュメントなんてないしあっても嘘八百 ソース=仕様ってのしかお目にかかったことないわ 10年くらい放置されてて突然手を加えるとなったときには開発環境が動かせないとかなw >>536 そりゃまあ、もちろんそうだけどね。それが実現するなら構わんけど。 地震が起きて、停電は起きるわ、窓ガラスは割れるわ、 支社とネットワークが上がらないわ、端末の何割かが壊れるわ、 なんやかんやで大変な事になっても 「今差分取れないし履歴も読めないのでわかりません、復旧まで待ってね」って投げちゃえるなら全部電子媒体で持ってて、必要な時に必要な分を随時取り出してもいいだろうね。 >>541 火事になって会社焼けたら困るなら、 別の所にあるHDDとコンピュータを使えばいいのでは? 紙媒体だと、燃えたら全損だからな。 バックアップも取れないだろうし。
>>540 だから、デジタルで記録された、現在動いている ソースコード以外役に立たないんだよw. いくら紙の資料があっても、それが最新とは限らないからね。 >>540 > 古いプロジェクトやったことある人間ならわかると思うが修正履歴が完全に残ってすぐ見れるなんて夢物語 古いプロジェクトからずっとバージョン管理してるわw 修正履歴が残ってないのは、バージョン管理していない頃と、 紙媒体で履歴を保存していたものだけ。 地震でてんやわんやですが、 「差分取れるし、履歴も読めます。ただ、沢山の紙の資料の中から 探すのに時間がかかるのでちょっと待ってください。 パソコンを直すよりも時間がかかりますがねwww」
俺なら、地震で仕事にならないなら、 別の場所に支社があるんだろう? そこに仕事まわすだろうな。 デジタルデータなら共有も簡単なので、そっちで差分見ればいい。 紙に保存した資料に頼ってるから、余計大変なことになってるわけで。 命の危険もある中で、地震で散らかっている倉庫を探しまわって 仕事をする必要はない。優先順位を考えれば当然そうなる。
>>545 紙で履歴保存してた頃にソース記述しとけば今でも見れたわけよ 俺は履歴は現行ソースと同等レベルで重要と思ってる 履歴がなくてコメントもろくにない中データ保存に分割してよくわからん計算してる理由わかるやつなんかそうそういないわ わかった時には脱帽したよフロッピー先輩w 履歴あればすぐにわかったんだろうがな 今の時代にデータ保存にそんなことしない無理すぎた >>542 火事になっても大丈夫なように複写は他の所にも保管はしてあるよ。 >>543 お前コピー機も知らないの? >>544 それは管理の仕方次第 >>546 探さなくても台帳、リリースノート、変更仕様書、等々キングファイルに綴じてあるからすぐ見つかるよ。 >>547 サブシステム毎に担当わかれてるからね。 こっちの命の危険なんか関係ないよ。 客先にはどんどん怪我人搬送されてたり、自家発電切れそうで縮退運転始まったり、 それこそこっちが一人二人死んだ位どうという事は無いよ。ただの労災。 命を預かる物作ってるのに、その責任に自分の命を代えられないほど情けない人間でもない。 支社があるような会社の運用ではないように見えるのだが
>>551 平時とは違うよ。 それこそ電子化されたもの見りゃいいからね。 電話が復帰したら関西に投げたし。 当日翌日があんな状態になってもちゃんと回っただけいい方だと思うけど。 >>552 古い物を知らん奴が、解決策も無く古い物は良くないと言ってもなんの説得力も無い。 中学生の政治への憤りみたいに見える。 資産を異なるメディアでバックアップする事と ソースコードからドキュメントを自動生成する事は完全に別問題なんだけどね 今後者のアプローチとして突っ込みが入ってるのに なんで災害を強調するの?
災害だと体験した人が少ない。 それは「俺にはわかるがお前らにはわからんだろ」 という上から目線をいうことができるということを意味する。 わからんと思うことなら説明するのが筋なんだが、 説明ができないので、別の方法で代用する。 それが「お前らにはわからんだろ」という言葉で 圧力をかけること。そのために災害を強調している。
何の根拠もなしに、古いものを知らないと断定出来る才能自体が老害だとは思う。
>>555 はこういう喩え話でも説明できる。 あるとき若者が戦争についてあれこれ議論しているとする。 戦争について興味が無い人が多い世の中で素晴らしいことだが そこで老人が現れて一言言う。 「戦争を実体験していないお前らに何がわかる?」 これでもう議論は止まってしまう。わからないのは事実だし それはどうしようもないこと。その老人に勝つことは出来ない。 これは老人が正しいことを意味するわけじゃない。 例え老人の言うことが100%間違っていたとしても、 「お前らに何がわかる?」と言われれば反論できない。 議論の内容ではなく、その外側から圧力をかけて 黙らせているだけにすぎない。実に便利で姑息な手段だよ。 何で、発作のようにはねっかえって来てるのかわからん。 システムも、アナログな管理でも、管理さえ出来てれば良いよね、ただの運用のための道具、手段だから。 ってだけの話でしょ。 よほどなんか負い目あるの?
ほんとね、理由言わずに無駄っていうやつ、何なんだろうねw 水掛け論始めたいのかってな。
>>561 > システムも、アナログな管理でも、管理さえ出来てれば良いよね、 管理できるのは最低限で、効率的に管理して コスト削減するのが、システム化の目的の全てでは? 当たり前すぎて、これだけで論破(笑)出来てしまう気がするが。 >>566 その、最低限が業種によって違うよね。 って話してるのに、何言ってるの? コスト削減、無駄の排除とそれは相反しないよ。 たとえれば、命綱はかける手間が無駄だから省略、作業場所に敷くマットは高いので敷かない、すべてロボットで窓ガラス拭きます!なんて話だよ。 その上で窓ガラス拭くならロボットで良いし、拭けないなら拭けるまで待っても死人が出ないからそれでいいね、って話だし、 災害時用の電波塔なら、拭けないなら拭けるまで待つなんて出来ないんだからいざという時は人が作業できるように体制は保持しようね、って話なんじゃん。 全然ソースコード関係ないけど。 >>567 じゃあ文句言う対象は俺じゃねーだろ。 「無駄」と言った奴に対して、 最低限は業種によって違う。 無駄じゃないかもしれないだろって 説教たれろよ。 一般論でしか無いし全く無意味な説教だがな。 管理さえできていればいいよね・・・そこで思考停止 管理できるのは当たり前で、効率的に管理するのが重要・・・思考停止していない。
>>568 何をそんなにいきり立ってるの? 明後日のカイゼンかなんかを提案して怒られて拗らせてるの? >>569 管理さえ出来ていれば良いとしか言いようがないでしょ。 もしアホ揃いで紙運用回す能力もないなら、それは「紙では運用管理出来ない」んだから、管理出来ていない≒何らかのソフトで運用しなければならない、だよね。 まんま同じで、システムだけでは回らないのであれば、それは「システムでは運用管理出来ない」なんだから、紙モノも残さんといかんな、って話じゃん。 何も否定してないのに、アホなの? 全部手段で道具で、目的は「満足に管理して業務を回すこと」だよね。 思考停止でも何でもないよ。 >>570 > 何をそんなにいきり立ってるの? 俺に言うべきじゃないことを俺に言うからじゃん。 > 明後日のカイゼンかなんかを提案して怒られて拗らせてるの? お前の思い込みって、ほんと面白いよなw そんなの実経験から思いつくの?w >>570 だから管理できるのは最低限だって。 ここから更に効率が良くてコストも低い方法に変えていくの。 >>571 俺に言うべきこととかどうでもいいよ。 よっぽど自己評価高いのな。 実体験から思いつくよ。よくこの類のダメ出しはするから。 >>572 何言われてるか理解できなければいいよ。 結果論として無駄に効率が悪くて無駄にコストがかかる運用なんて、その最低限を満たして無いよね、って話。 VCS標準化おじさんに原発おじさんに 面白い人がよく集まるスレですね
導入コストっつーか慣熟期間に一時的に落ちる効率が 導入後に取り返せる見込みがない場合ってあるよな。 太陽光発電システムを数年スパンで丸ごと入れ替える みたいな、全然元が取れてないパターン。
俺が正しい 俺だけが理解している 俺の意見が理解できないやつはクソ という論調の書き込みは読むに値しない 例え正しいことが書いてあったとしてもな
>>577 正しくないぜ 当然じゃないかハハハ( ´∀`) hoge[1] = 89123; hoge[2] = 123; hoge[3] = 1234; hoge[4] = 14323; hoge[5] = 1123; hoge[6] = 15623; hoge[7] = 3123; hoge[8] = 1323; hoge[9] = 1223; hoge[10] = 1234;
hoge[1] = 89123; hoge[2] = 123; hoge[3] = 1234; hoge[4] = 14323; hoge[5] = 1123; hoge[6] = 15623; hoge[7] = 3123; hoge[8] = 1323; hoge[9] = 1223; hoge[10] = 1234;
あー、これ系のソース書いたことあるわ。 バイナリファイル中のファイル位置、サイズだったか、 固定長電文のフィールド位置だったか。
データセットを DataGridView に表示するのに、バインドせずにループで回して代入。
0=Off, 1=On を表すパラメータと、0=On, 1=Off なパラメータが混在していて どっちがどっちかは列挙型の名前で区別するようになっているのだが その名前付けが間違っている enum FLAG_0_IS_OFF { OFF = 0, ON = 1 }; enum FLAG_1_IS_ON { ON = 0, OFF = 1 };
#define TRUE 1 ... if(hoge == TRUE){...}
>>590 if((hoge == hoge) == TRUE) A4紙ペラ1枚の仕様書兼設計書しかないのに、10万行のソースコード。
昔、偽装請...派遣でいった会社で ありとあらゆる引数が const boost::shared_ptr<XXX> &val となっている現場があった。 何かが、狂っていた。
開放領域への参照で落ちて地獄のデバッグよりか遥かにまし
C++の世界って相変わらず ごちゃごちゃしてんのなw 動くのに間違いっていうのが多すぎる
ループ変数がグローバルにおいてあって、 そのループ変数を使ったfor文の中から呼び出される 各関数内でループ変数がインクリメント・デクリメントされているコードに絶望した覚えがある
再帰処理の中で再帰の深さ調べて云々するプログラムにそんなのあったな
>>600 コードが仕様だ! コーディングミスの副作用が絡み合い何故か動いているのだが 書いたやつやめたから誰も手が出せない、なんとかしろという展開。 配列に間違って一つ余計なデータを加える + ループ回数を間違って最後の一つを処理しない = _人人 人人_ > 正常動作 <  ̄Y^Y^Y^Y ̄
>>603 最後にnull終端が(暗黙に)期待されてるバグありコードで たまたまメモリが0で埋まってて動いてるソフトが世界中に沢山ある C言語でbssセクションに配置された未初期化変数はzero-fillが保証されている ことを知らない無能は結構多いよね。
>>606 余計なデータだろう。 番兵はあくまでテクニックだ。 >>608 そんなの知らねーが未初期化でReleaseビルドの時だけ発生するバグを埋めるアホはよく見てきた 新人でもはっきり判断できるような可読性高いもの書け それがプロの最低条件 正確には「新人でも上級者でもわかる可読性が高いコード」な 新人が簡単に分かったとしても、 上級者が苦労するようなコードは本末転倒。 上級者がこっちのほうがわかりやすくシンプルだと思ってるのに でも新人はこんな高度なテクニックは知りませんからね。 複雑で冗長になりますが、新人でも知ってるテクニックだけ使いますよ。 というのは大間違い。 わかりやすさの基準は上級者が決める
>>608 俺の使ってたCスタートアップは.bssゼロフィルしてなかった 妥当な理由があったからなんだが、何だかモヤモヤした bssゼロフィルなんてものを前提にコード書く奴は素人 こういうバカはやっかいなバグをしこたま仕込むタイプ
グローバル変数とかスタティック変数は 初期値を入れてなければゼロが初期値ってのは前提でしょ
>>613 そういうのは処理系がエラーを吐けば問題ない 言語仕様なんて現実の処理系の前じゃ単なるガイドラインにしか過ぎん
言語仕様としてプラットフォーム依存も定義されてるよ
1クラスが6000ステップ以上のJavaソースをちらりと見た。 内部クラスを使っているかも知れんが、Javaってもっと細切れに クラスを作るものかと思っていた。
Javaだけじゃなくて、どんな言語でも、 クラスがある言語なら細切れにクラスを作るよ。
>>621 ダメな例だな まとまってるから解析は比較的しやすいがテストとなると内部の状態が多すぎてまともなテストできない クラスは小さいひとつのことに集中し他とはできるだけ疎結合 中級者はトリッキーはコードを好む これだけは間違いない
確かに上級者のコードは見やすい。 ロジックは複雑だがコードとしての見やすさ。
上級者:バカの相手をしない。馬鹿にかかわらない。 中級者:バカがいると頑張る。 初心者:バカをバカと認識出来ない。
上級者は比較的謙虚だよ。 まあ、悟りが入っているからだが。
ifもelseも全部一行に詰め込むガイジは死ね 読みにくいんじゃボケ!!!!!!!!!!!!!!
>>636 個人的には、 if(kinoko == stick){ }else{ } という書き方ではなく、 if(kinoko == stick) { } else { } って書く人は嫌い。 俺はできるだけ改行しないほうが好きだが、コメントの位置が上手くできないのが悩みどころ // このコメントはOK if(){ }else{ // このコメントを先頭にしたいけどelseはこの位置が好き }
こーだろ if(){ // 真の場合は・・・する }else{ // 偽の場合は・・・する }
>>637 嫌いだけど、 C#ってその形なんだよね つーか、elseはあまり書くべきでない。 if(){ // 真の場合は・・・する }else{ // 偽の場合は・・・する } ではなく、できるだけ if(){ // 偽の場合は・・・する return;(またはエクセプションをthrow) } // 真の処理 という形になるように常に心がける。 if else という書き方が深いネストを作るきっかけになっている事に気づかないと いつまでたっても、初心者、中級者のまま。
一画面で収まるなら別にネストしてていいや。 それ以上はオブジェクト化するかな
>>643 MISRA を否定するのか。是非とも MISRA の連中を説教してやってくれ MISRA-C ルール 15.5 推奨 関数は、その最後に1つだけの出口を持たなけらばならない >>643 ifでもelseでも最終的に同じ処理してからリターンしたい場合は? 決め付けるのは自称上級者 途中リターンが見やすいと思った場合は使うしそうでない場合はelseも使う >>645 C言語ではそっちの方がよかったんかね。 いまって関数単位で単一責務原則を適用して関数が小っちゃくなるから あまりこだわる必要なさそうだけど。 話ぶった切るけど今まで見た中で最高に頭沸いてると思ったのはこれ // 前略 /* * きっとキミは来ない 独りきりのcarch anything * silent kill. do ignore. */ } catch (Throwable e) { assert(true, "来ちゃった♪" + e); } 書いた人は壊れて辞めたらしい
>>646 あまり書くべきではない とか できるだけ心がける という、超初歩的な日本語の意味を理解できない馬鹿がいるとは… さすが初心者はプログラムだけでなく日本語も不自由と見える。 そう書くのが妥当なら書けばいいに決まってるじゃないか。 >>645 世の中のコードが全てCで書かれているとは知らなかった。 そんな世の中なら、さぞ住みにくかろう。 客先ですごいお金が絡むシステムがスパゲティコードだったから担当になるまえに怖くて会社辞めた
できるだけ〜になるように、常に心がける なんかおかしいか? ほんとに日本語不自由な奴ばっかだな。
>>645 > MISRA-C ルール 15.5 推奨 関数は、その最後に1つだけの出口を持たなけらばならない そのルールを守るのは簡単だよ。 途中でreturnしたくなったら、代わりに関数の最後にgotoすればいいw そのMISRAのバカルールはな大昔の最適化が物凄くしょぼかったコンパイラ で出たコードをこれまたしょぼいデバッガでデバッグするために関数の入り口と出口を アセンブラレベルで1つずつにするためのものなのだよ もう完全に時代錯誤
>>654 gotoもダメなんじゃないかな?みすら的に考えて。 みすらそう思う。 >>656 ならwhile(1)してbreakすればいいよw マルチスレッド対応が当たり前になった今クソ長いコードや分岐だらけとか終わってる シンプル・イズ・ベスト 大きな建造物と同様細かく作業を分けて小さな単位を積み上げていって大きくするのがセオリー
VB系だとよく脱出用の空ループで抜けたりするけどこれはみすら的にはどうなの? andやorがC言語系の&&や||と違って全部評価されちゃうからifで書いてくしかなくて それをまともにやるとifがネストになってくんだよね do if not test1 then exit do if not test2 then exit do if not test3 then exit do : exit do loop 上を普通に書くと if test1 then if test2 then if test3 then : ※各testは最小限で評価したい
客が読みにくいという理由でガード(関数の先頭あたりでリターンする)を すべて if else に書き直させられたが 何でくだらない仕事を増やすのだろうか
>>660 客の脳みそが腐っているんだからしょうがないんじゃね? 腐っててもお金は払ってくれるんだから、まぁ、ごみ処理だと思えば。 自称上級者とかほざいてた >>646 は、 そろそろ自分の馬鹿さ加減に気づく頃かな。 >>660 else;つけとけばいいだけ わざわざelse句として書く必要ない >>662 ケースバイケースってことを言ってるんだと思うよ。 バカだとは思わないけどなあ。 どちらのケースでもやりたいなら呼び出し元にコールさせればいい 分割がなされてないとそうなる
>>664 5:5 くらいでどっちのケースもあると思ってるなら、 お前も>>646 も頭に糠味噌つまってるくらい馬鹿だ >>666 バカっていいたいだけなんじゃないの? なんかあまり中身がないような・・・。 好みの問題だしなあ。価値観は優劣をつけるためのものじゃないと思うんだよね。 他人の価値観を自分の中に取り込んで自分の世界を広げるためのものなんだよ!!←できる人
>646 >ifでもelseでも最終的に同じ処理してからリターンしたい場合は? そういう、共通処理っていうのは呼び出し元の処理なんだよ いい加減に気づけ馬鹿 >>664 >>668 究極に頭おかしい人がきました。 好みの問題だと本当に思っているらしい。そりゃ、世の中クソコードで溢れるわ。 IDみたら同じやつか。こいつ、本当に糞コード生産マシンだろうな。
>他人の価値観を自分の中に取り込んで自分の世界を広げるためのものなんだよ!!←できる人 "←できる人"って、ばーーーーーーーーーーーーか!
>>673 待って!落ち着いて!いまから私が言うことに耳を傾けて。 びっくりするかもしれないけどホントのこと伝えたいから。 プログラムはケースバイケースなの!!なんでもありなの!!! ケースバイケースのことはあるが、今回のことは違う。 以上 馬鹿
>>669 じゃあif elseがない処理=呼び出し元の処理ということ?? 関数作る必要ないじゃんwww >>665 呼び出し元が複数あったときにコードが増えるんですがw 何のための関数化だよ せめて関数内で別関数としてコールする形式にしないと無駄が増える 経験的に、後から読むとき、関数最初でのreturnは見やすいけど、 途中でのreturnはelseのほうが見やすかったりする だからケースバイケース >>669 関数でローカルに取得したリソースの解放ってのは関数内部の処理だろう。 C++ならRAIIでやるところかもしれんが。 >>678 条件分岐を呼び出してあとに続く処理を実行する方を外から呼び出してもらうようにするだけ 分解すればあとの処理はifの条件にかかわることなく一回でテストが終わる ダラダラ一つのメソッドに書くとマトリックス的にテストケースが発生し産廃コードが誕生する >>680 そういう等価な書き換えでテストケースが減るわけがないんだがな。 C0カバレッジしか見てなくて途中returnのケースをテストしてないのかとも思ったが、 ひとつの関数だとマトリクス的にケースが増えるってのが意味不明だな。 どういう基準でテストしてるんだか。 >>681 if A else B C Cが別関数になってないとACとBCのテストパターンコードがいる 一方別関数の場合はAとBそれと独立してCで事足りる これが長いものになると前者は爆発的にパターンが増えていく 関係性がないものは分離する 関係性があっても関係性の部分だけを取り出し分離する 細かくなってればテストコード自動生成も実用性が出てくる デバッガで見るとreturnで関数の最後に飛んでいるから、 途中でreturnしてもいいんじゃないの? 一方職場でジャンプ関数使う人はいた。 でも1人でやってるプロジェクトなんで見て見ぬふりをしたw 自分以外がメンテナンスできないようにする人っているしね…
ジャンプ関数ってまさか longjmp()とcome_from()? gotoがましに見えるレベル
>>682 分岐網羅ならどっちにしろACとBCの2ケースになるように見えるが。 それともAとBとCの単体テストだけやっておしまいって話? ついでに言えば、これがどう>>680 の説明になっているのかわからん。 >>685 由緒正しき「継続」という奴だ,まさか,とかいっていいのか? come_fromって何かと思ったらサンプルコードじゃんw 「returnするのが面倒くさいからと」代わりにジャンプ関数使っていたな… (なんでも手製でツールを揃えないといけない時代で)独立したツールだったから 誰もソースコードチェックしなかったんだろうね。
hdqMNonUの戯言に耳を傾ける馬鹿は+5afeFvRみたいな知恵遅れだけだ。
人命にかかわる部分はたいていC/C++で書かれているから、C/C++を使う人だけ気を付ければ良いんじゃないだろかね。
>>680 >>682 に書いてあることの意味が分からない奴が、現役でプログラマしてるって事が恐ろしい… >>685 >それともAとBとCの単体テストだけやっておしまいって話? だったらお前はその上層と下層を全て含めた ABCDEFGHIJKLMN… の全てのケースを含んだテストを一生かけてやってろ。 ユニットテストのしかたもする意味もわかってない馬鹿。 単体テストのやり方がわかっていないからといって馬鹿とは限らない。 アインシュタインは単体テストのやり方を知っていただろうか。
単体テストのやり方がわかっていないから馬鹿だといってるのではない。 馬鹿だから単体テストのやり方がわかっていないと言っている。
AのバグとCのバグを合わせた結果、テストケースでは見かけ上正しい出力がされてグリーンになってしまいました、 ABとCが分けてなかったらどうやって隠れた問題を検出するんだ。
そもそも全てのプログラマがユニットテスト書くわけでもないしね(技術的にも仕様的にも)
ユニットテスト出来ない奴がいる事と、理想的なコード自体の書き方と、何の関係があるんだよ。 何がそもそもだ、ばーーーーーーーーーーーか!
【 オンラインTCGエディター 】 >>1 ,>>697 デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。 例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、 当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。 既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。 デュエマ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、旧ガンダム・ウォー、ライブオン、ディメンション・ゼロ、シャーマン・キング、カードヒーローなど のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書け。 マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストしろ。 個vs個、多数乱戦、チームvsチーム、個vsチームを実現し、P2P通信対戦プラグイン有り。 設計思想は 《 RPGツクール 》 が良いかな? 他に、優れたエディター有ったら挙げてみろ。 個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。 ↓ エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。 ↓ 遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。 バトスピ、ヴァンガ、デュエマなど発売済みゲームソフトが存在してるTCGはベンダーに研究させる。 ↓ 各社TCGを再現するテストプレイ ⇒ 更に改良や修正 + コード記述の仕様書(設計書)を作成。 ↓ 機能制限した下位版を制作しても原則として発売せず + 上位版デュエリ−グ用でサーバー稼動。 ↑ 下位版を仮に発売した場合の改造および商用利用には、別途で当社との契約が必要。 さ〜て、インド人ベンダーと日本人の翻訳担当SEを見つけよっと!ww http://wc2014.2ch.net/test/read.cgi/entrance2/1451262577/-16 971 名前:名無しさん@七周年[] 投稿日:2006/11/11(土) 00:56:10 ID:M8+ahUZV0 自称スーパープログラマー某 強烈加齢臭 メール見ない メール無視 ドキュメント見ない ドキュメント無視 説明聞かない 説明無視 話聞かない 話無視 ガム→むっちゃー むっちゃー むっちゃー むっちゃー 煎餅→バリバリバリバリバリバリ 菓子パン→モグモグモグモグモグモグモグモグモグモグ カップアイス→むっちゃー むっちゃー ペロペロペロペロ フロアすべてに響き渡る 超ばかでかいくしゃみ 当然手でおさえない 異音と異振動 ドスーン!ドスーン! ドカーン!ドカーン! バコーン!バコーン! ズドン!ズドン! 机が近いとマウスポインターが飛ぶ 誤操作誘発 書類だしたりしまうだけでドカンドカン 30秒ごとに口と鼻から異音 ふんっっ! ふんっっ! 備品破壊 貸与P C 破壊 他人のもの破壊 奴の作ったスクリプトとプログラムは使えない バグ製造機 電話や共有携帯電話 キーボードが油ベタベタ 奴に電話とPCとコンソールは触らせてはいけない
>>685 funcX(){ funcAB() funcC() } funcAB(){ if A else B retuen } funcC(){ C } ってことなんじゃねーの。funcCが、funcABの動作に影響しないんであれば、 テストパターンは減らないけど、テストパターンごとの確認観点が減るんじゃない? ABとCが常にセットにして呼ばれる仕様だとしたら、 関数が増えて見通しが悪くなるだけな気がするけど ユニットテスト利用する場合ってこうするほうがいいの?
ソースコード見て問題なければテストする必要ないと思うの
完璧なプログラムを書けばテストは必要ない。 テストに頼るのは甘え。
プログラムが完璧でもコンパイラがバグっていて間違った実行ファイルができることもよくある
プログラム通りにペリフェラルが動くと思ったら大間違いだ
コンパイラのバグは稀たが、スペックシートのミスは日常茶飯事
16bit系組み込みCで 配列の要素数が16bitに制限されるのを 無視したコード渡されてバグってた事あるな コンパイラからの警告一切無し
配列の添字が汎用レジスタのサイズ(≒int)の範囲に制限されるのは仕方ない でもまともなコンパイラなら制限事項として明記してある
>>710 要素が16bit 越えるって、どんなソフトなんだ? 型がByteだとして 65536Byte=64KByte 組み込みだとしても十分ありうる
>>714 それだけ大きくなったら、普通ポインタとか使うだろ? 組み込みなら標準ライブラリがないとか ヒープがないとか普通だからな
>>715 ROMに大きなテーブルだと配列使うでしょ >>717 Cの標準ライブラリが無いってことは最近では非常にマレ ROM容量の関係で使えないことはある これを無いって言うなら無い デカいのはprintfとか あとはfloat, double, long longもROM容量の関係で使えないことも 標準ライブラリを使うのをためらうくらいの規模なら、当然ヒープも使わない 当然OSレスで、シングルタスク+割り込みのみ もっと小さく、時計レベルのコードになると、そもそもコンパイラを使わない
>>719 printf使えなかったらデバッグできないじゃん! >>721 リアルタイム性が不要ならICE(デバッガ)が使える 動かしながら変数の読み書きが出来るヤツもある 原始的なのだとポートを上げ下げしてオシロスコープで見るとか、LEDを点灯したりとか >>722 ちげーだろ? そこはputs使ってるだろ。 見栄はらなくていいよw putsどころかそもそも標準入出力ないからな 汎用ポートの空いてるピン使うか JTAG使ってICEか計測器繋ぐかだな
>>726 真っ先に、シリアル入出力とprintfもどきを作るのはデフォだろ? 組み込みは感心する反面潰しきかないのがなんとも言えねぇ 組み込みは程々にした方がいいぞ
シリアル入出力はよく使うけど、.... 規模が小さいとデバッグ用だけにわざわざシリアルドライバを書かなかったり そもそもシリアル用ハードが無かったり使えなかったり 非常にリアルタイム性が要求されるDSPプログラミングとかだと割り込みなんか使いたくないし、 小型マイコンだとバッファ用にメモリが割けなかったり まあ物によってデバッグ方法もいろいろ
どんな低速でもソフトUARTぐらい作れるだろ ドライバって程かよアホが
低速マイコンでRAMも使わずにCPUも占有せず、場合によってはポートも使わないでソフトUARTか 頑張って作ってね
>>730 割り込み禁止にしてCPUサイクルでクロック作るのか タイマ割り込み駆使してクロック作るのか どっち? もう一個位は方法があるけど... まあ普通はそんなことはせずもっと普通の方法を使う スローCPU、RAM使えず、ピンが足りない、パフォーマンスがシビア とかだと使えないし
自分の主張を通す為に手段はどうでも良くなってるカワイソウな人は放っておこう
なんでマイコン1個でやろうとすんだよ そんな後付け条件出すなら信号垂れ流し用と信号待ち受け兼UART出力用のマイコン2つ使えばいいだろアホが
>>732 AVRやLPC810とかなら知ってるけど? つーか米粒の6ピンすらソフトで全二重UARTぐらい実装できるだろ アホが >>733 ソフトUARTつても実装は色々あるからな その全部かな つーかアホはオシロやロジアナも使えないのか >>736 いや、マイコンの規模によって、いろんなデバッグ方法があるって話だが デバッグ用にわざわざマイコンを積むのか? 金をかけて 組み込みはコストが非常に重要だったりサイズが非常に重要だったりするんだけど で、複数マイコンを積んだとして、マイコン間の通信はどうする? デバッグじゃなくてシリアル通信が目的になってないか? >>739 UART云々はシリアルでやるって流れから書いただけだよ 文脈読めアホが というか組み込みでデバッグ大変だわーで釣ってる奴が気に入らないわ 肝心なコアをMSに握られてるWindowsアプリのデバッグ考えるとただの愚痴にしか見えないんだわ
>>740 あり得ないデバッグ方法を突然書き出したお前が全て悪い >>742 誰が悪って言うならデバッグ方法いろいろとか書いといて具体的な方法は何一つ提示しないアホが悪いなんじゃないの? 組み込みはこういう口ばっかの奴が多くてうざいわほんと は?? 具体的な方法はいくつも書いただろうが 日本語が読めない?
そういやここ絶望的なコードのスレなんだが そもそも組み込みで絶望的な事なんてあるか? 作った品が売れないとかか?
>>745 >>721 は別のIDだしお前の発言かなんてわかんねーよ ID:Xzg+p3Xeで具体的なこと何も書いてねーなーってことだよ IDも判らないアホだって言いたいのか? >>746 いくらでもある 組み込みも規模はいろいろ 時計や簡単なオモチャレベルからWindowsを積んだようなものまで >>722 はおれだ 俺の言葉で書いたレス 証拠はないが >いろいろある >いくらでもある 吹いた 組み込み業界はこんなんばかりでまさに絶望的だな!
なんか知らんが、そのあと無理やりUARTでデバッグする書き込みが続いた
組み込みを知らないのに知ったかぶって >>730 を書いたのか 出来もしないのに 組み込みって一人で何でもやるような商売だから 人とのコミュ力が試されるなー
なんでわざわざUART使うんだよ 普通JTAGとかLFASTとか使うだろ
>>756 いや、だから組み込みにもいろんな規模のがあるんだって >>758 わざわざUARTを使う理由はいろいろある UARTを使わない理由もいろいろある 使わない理由は既にいろいろ書いた 使う理由は、 ログをテキストで(簡単に)残せる PCからいろいろな制御が出来る テストの自動化がやり易い などなど デバッガはデバッガで便利だが、シリアルデバッグもいろいろと便利 まあ>>726 は俺なんだけど >>727 に言いたいのは printfもどき作る暇があったらICE使ってステップ実行した方が効率的だってこと こういうこと言うのもアレだけど JTAGとかLFASTがシリアルじゃないとでも? プログラムトレースとかデータトレースはリアルタイムで吐かせようよ どうせ周辺のIPが勝手にやっといてくれるんだし ログっておいて後でデバッガで再生すりゃいいんだからさ
膨大かもしれないログ追えるんだ すごいな〜〜〜〜〜
>>764 なんで追えないの? 検索機能とか知らないの? 膨大なログを出すだけの実行コード行を ステップで一行一行実行していく気?w 膨大と言ってもせいぜい数百MB程度だから検索できない訳がない printf使ったって結果はファイルにリダイレクトするだろ 同じようなもんだ
ロギング ∧_∧ __ ( ・∀・) | i \ \ ( U U | i l =l と_)_) ____ | |__ノ ノ | i(;;)H| | ̄ ̄| ̄ ̄|
そもそも、小さいマイコンじゃそんなに多量には吐けない ブロッキングだと動作速度が大きく変わり ノンブロッキングだと間引かれる
小さいマイコンはバッファを大きく取る余裕がないから
971 名前:名無しさん@七周年[] 投稿日:2006/11/11(土) 00:56:10 ID:M8+ahUZV0 自称スーパープログラマー某 強烈加齢臭 メール見ない メール無視 ドキュメント見ない ドキュメント無視 説明聞かない 説明無視 話聞かない 話無視 ガム→むっちゃー むっちゃー むっちゃー むっちゃー 煎餅→バリバリバリバリバリバリ 菓子パン→モグモグモグモグモグモグモグモグモグモグ カップアイス→むっちゃー むっちゃー ペロペロペロペロ フロアすべてに響き渡る 超ばかでかいくしゃみ 当然手でおさえない 異音と異振動 ドスーン!ドスーン! ドカーン!ドカーン! バコーン!バコーン! ズドン!ズドン! 机が近いとマウスポインターが飛ぶ 誤操作誘発 書類だしたりしまうだけでドカンドカン 30秒ごとに口と鼻から異音 ふんっっ! ふんっっ! 備品破壊 貸与P C 破壊 他人のもの破壊 奴の作ったスクリプトとプログラムは使えない バグ製造機 電話や共有携帯電話 キーボードが油ベタベタ 奴に電話とPCとコンソールは触らせてはいけない
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、 BitTorrentがオープンソースで開発されています 言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか? Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします https://twitter.com/Lyrise_al ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw The Covenant Project 概要 Covenantは、純粋P2Pのファイル共有ソフトです 目的 インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します 特徴 Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW) 接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です DHTにはKademlia + コネクションプールを使用します UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります) 検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません f Enumを文字列のコード値にswitch文で変換して、それをswitch文で別のEnumに変換する ってのがいろんな所に書いてあった
いまどき変数名が衝突して不具合を生じてたとか馬鹿な報告を上げてくる下請け
>>786 釣りかもしれんが 納品検収テストで見つけられない発注元の方に絶望するわ 国や公務員からしてそんなことやってるから三菱になめられるんだよ
>>787 納品前の結合環境のバグだよ まともなフェーズ管理のある環境で働いたことのないガキは引っ込んでろ 「datas」って英語圏でも使ってるの見るね。間違いではないのかな?
int a[10]; int b[10]; int c[10]; があったとき、 a, b, c をまとめると datas それぞれは data だっていうのを聞いたことがある 信じるか信じないかはあなた次第
datumは見たことあるな miceとかも見たことあるな
indicesを最近まで知らずにindexesって書いてたわ
railsみたいにそういうの判っててindexesにしてるケースもある
2400bpsの通信速度のコンソールに9600bpsの通信回線の通信ログを吐き出すプログラム
C#で、糞長いメソッド内の処理を、意味のある単位にregionで囲ってるの見ると、切り出したくてムラムラする。
担当が逃げて押し付けられた、こんなコードに責任は持ちたくない でも読まなきゃいけない読めなきゃいけない… その妥協点がregionなのさ
ドキュメンテーションコメントに嘘書くのやめろよ! 嘘になっちゃうような修正をするなら、コメントもちゃんと見直してくれや
仕事でFORTRAN77の年代物の科学技術計算コードを最適化(並列化含)したことあるんだがあれはひどかった。 この世の糞が全て詰まってたコードだった。誇張抜きで
#regionて、IDEで見る以外に意味ないんだよね?
c++のコード引き継いだら #define private public てのを見たことある。 逆に新鮮だった。 もちろんこの行は消した。
>>806 unit test でもやってたんじゃね? #if true string TestFilter=" AND ET000.ID > 8023354 "; // 開発専用。まともに回すととても遅いので…こんなのやりたくないっす #else string TestFilter=""; #endif string Filter=" ET000.c_flg=1 AND ET000.memo LIKE '%start:2012/01%' " + TestFilter; string Sql = " SELECT * " + CONST_NEW_LINE + " FROM ET000 " + CONST_NEW_LINE +
Your joke is not Coooool!!!
情報エキスパートしか知らないのか、入門書を真に受けたのか 受注クラスに受注のすべてが書いてあった
// よくここで止まっていた(いつの間にか何故か解消しました)
>>822 それそれ 自分が書いたかどうかすら忘れて今っているので、今必死に読んでいるんだが、まるで人のコードを読んでいる気分だ >>804 シングルタスク(CPU1個)処理しか古い計算ソフトでは使えない。 並列化の描き方とは違う技術が必要。 逆に、当時のコンピューターに並列化したソースを読ませるとかなり遅くなる。 いや保守運用を全く考えない使い捨てレベルの俺俺コードを保守させられたって話だろ 素人が描いたVBAに対する愚痴と大して変わらん
一年前の自分のソースを見たときの俺 _ □□ _ ___、、、 //_ [][]// ,,-―''':::::::::::::::ヽヾヽ':::::/、 誰 書 こ // \\ // /::::::::::::::::::::::::::::::i l | l i:::::::ミ だ い の  ̄  ̄  ̄/ /:::::::::,,,-‐,/i/`''' ̄ ̄ ̄ `i::;| あ た 汚 ―`―--^--、__ /:::::::::=ソ / ヽ、 / ,,|/ っ の い /f ),fヽ,-、 ノ | 三 i <ニ`-, ノ /、-ニニ' 」') !! は ソ i'/ /^~i f-iノ |三 彡 t ̄ 。` ソ ハ_゙'、 ̄。,フ | ) | ,,, l'ノ j ノ::i⌒ヽ;;|  ̄ ̄ / _ヽ、 ̄ ゙i ) ス ` '' - / ノ::| ヽミ `_,(_ i\_ `i ヽ、 ∧ ∧ ∧ ∧ /// |:::| ( ミ / __ニ'__`i | Y Y Y Y Y ,-" ,|:::ヽ ミ /-───―-`l | // | | // l::::::::l\ ||||||||||||||||||||||/ | // | / ____.|:::::::| 、 `ー-―――┴ / __,,..-'| /゙ー、,-―'''XXXX `''l::,/| ー- 、__ ̄_,,-"、_,-''XXXXX | /XX/ XXXXXXXXXX| | _, /ノXXXXXXXXXX|
>>822 それは自分のスキルが上がったらそう思うんだよ(震え声) cでもなくc++ でもないみたいなソース渡された時はcの仕事受けるのやめようと思った cメインで書いてる癖に難しい処理で半端にc++ に逃げるくらいなら最初から全部c++ で書けよと
vector<int> v(2); v[0]=1; v[1]=2;
>829 betterCとしては想定内の使い方なんじゃないの?
簡単なコマンドラインツールなんかを c で書いてて map 使いたい時なんかはそんな風になるな。 だからって printf を cout で書き直したりはしない
C#ってどんなだったか 結局printfの書式文字列がオーパーツすぎた
江東区立深川図書館特殊 銅和加配 奇声あげて人をボコボコにぶんなぐってもOK お咎めなし 被害者が警察を呼んでくれと何度も言っているのに公務員は無視し続けてた 幼児が歓声上げて走り回る 見ぬふり 小学生が歓声上げて走り回る 見ぬふり 中学生が大声で談笑して走り回る 見ぬふり 高校生が閲覧机で談笑雑談 見ぬふり 公務員による恣意行為 etc なんのための施設か? →特殊な関係用 翌日、被害者を公務員が脅していた
ファイルローカルか公開へッダかでだいぶ違うが、後者だろうな
ソースコード自体じゃないんだが、俺が抜けた後にそのプロジェクトの保守になった人の運用方法が…… /source_new /source_new2 /source_new3 /source_new_rXXXX /source_new_rXXXY ... ってディレクトリがいつの間にか、各リビジョン毎に出来てて、中身丸々コピーして書き換えてる かつ、ソースのコメントには // リビジョンXXXXでの変更です! とだけ書いてあり、更に元々は // 下記の条件を満たす // 詳細は○○の仕様書を参照 みたいに書いてあったところがことごとく // リビジョンXXUU以前での変更です! というコメントに書き換えられて行ってるんだが…… ※なお、このプロジェクトはSVNでバージョン管理されている
俺が見た中で最凶。C言語。 len = strlen(hoge); strncpy(piyo, hoge, len);
ソースファイルがコメント含めて 12669行 このファイルで 最大のメソドがコメント含めて 1109行 メソド引数が 36個 非スタティックメソドにフィールド値を ref渡し -->MS純正
創業者のコードが汚いって従業員から言われていたからな
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 95649
Web系だとJavaScriptの広告スクリプトはインデントもなく難読化していてgoto文に似た 身近なクソコードの代表例といえるだろう。 おいらが見た最悪のコードはN88BASICをQuickBASICに書き直したの古い計算コードで、 行番号のN88BASIC構文と構造化(プロシージャ使用)が混載して併記され、プロシージャ 内部からいきなりサブルーチンコールし、すべてリターン値はグローバル変数、コメント無し、 goto文多用、マルチラインetc、行番号を模したラベル等々、などで書かれたソース。 これで難しい多項式計算していた。誰も保守できない年代物。
>>637 その気持ちは非常に理解出来るが、最終的に宗教論争になるから面倒臭い話になる。 え、 if(kinoko == stick){ } else{ } 普通こうじゃねえの?2つとも気持ち悪いんだけどw
宗教戦争なら俺も参加するぞ if(kinoko == stick) { } else { }
宗教戦争なら俺も参加するぞ if(kinoko == stick) { } else { }
function { if () { } else { } } つかどんな言語であれ その言語を代表するフレームワークとかで コーディング規約として明示されてるから それを守ればいいだけ 頭が悪いやつほど俺々ルールを作ろうとする
プロジェクトによっては整形ツールの設定やlintのルールが決まってたりするからな
>>857 その書き方は、ぶら下がりif文が書ける言語でぶら下がりif文を検出するためだけに意味があっただけ。 最近の言語は1行が長い場合が多いから、1行1文字でスカスカなコードはかえって読みづらい。 と、俺は思うのだが。 なんで同じソースましてや関数内にブレスの開始が違うものが混在してるのかが不思議、開始と終了は揃えたい
99%の凡人は可能な限り独自の書き方は避けて 優秀な人間の考えたフレームワークやライブラリのコーディング規約に倣うべし 過去の財産に倣うというのはプログラマに必要な資質の1つ
過去の財産に倣うというフレーズに資質とゆう単語を繋げてしまうと この人は抽象化して考えるくせがないんやなと思われてしまうで プログラマーに重要な資質の一つが欠けとるな、と
ノンプログラミングのBIツールを700万で導入 GUIで作れる優れもの 入れた奴はプログラマの人件費が浮くから長期的に安いと息巻いてた でも現在管理してるのは派遣プログラマの俺 VBAと違ってネットに情報無いから詰んでる
>>869 よかったな めっちゃ費用浮いてるやん! 会社が ノンプログラミングツールだからってプログラムの技量が低くていいってことにはならない やっぱり知識も注意力もいる ノンプログラミングツールのいいところは それに従事した人間が、汎用的な知識を得ることなく そのツール以外のことができない役立たずになることだ その会社とその仕事に依存せざるを得ないからずっと安くこきつかえる やったね!
>>871 汎用的な知識を持って初めてノンプログラミングツールだよな 知らない人間がやったらソフトウェア開発失敗の歴史を一通り体験することになる フレームワークとかでも一緒 フレームワークの使い方は少し知ってても 言語の仕様をろくにしてない馬鹿とかザラにいる 潰しがきかないというか、お前は一生そのフレームワークで食っていくつもりなのかとw そりゃIT土方にもなりますわ
プログラマになった時点で なんぼ汎用的でも所詮は人のつくったオモチャの知識で 頭埋め尽くされてるんやで…
>>875 コンピュータサイエンスの研究して提案してる側でないとそうなるよね >>874 それでもフレームワークはコミュニティが存在して詰まるポイントは情報交換してるから良い 弱小ベンダが作った独自ノンプログラミングツールはサポートも含め使い方解らない 某一部上場企業に出向してた時がcobolをラップした日本語でプログラミングする企業だったな。 もう史上最低レベルでわからんかった。それで皆やってたから俺の応用力がないんだろうけど。 プログラミングじゃなくてコピペで作る積み木をやってる感覚だった。ベースのソースファイルなんか1つで100万行超えてたからな・・・
>>880 しかも単体テストが出来ないから結合テストの時まで目視。作った段階じゃ動くかどうかもわからない。 本番環境じゃなくてテスト環境なのに、テストする為だけにプロセスコンパイル申請して(自分で勝手にコンパイル出来ない) リンカが動いてる時はなんと100人近いプログラマが一切動けない。だからバグ頻発させる案件担当は恨まれる。 1箇所でも変数やバグ修正する度に、修正した変数が使われてる関数全ソースを「紙に出力」して案件担当に報告する。 無論その関数も二段組で10枚を超えるようなものもザラ。 ソースも絶望だったが会社そのものも絶望だった・・・これで一部上場企業でISO取得してるってんだから 世の中狂ってると思ったわ。今もあんなんやってんだろうか・・・ ある有名大学を卒業した若手女子プログラマーが書いていたもの if for if else if else if >>4 else //上書き result 再帰n個まで対応として同じ処理をネストで内部にたくさん継ぎ足すのはなかなか
ネストが4階層以上あるコードが頻出してるかどうかで プログラマとしてのセンスの9割以上が分かると思う
ネストの4階層はよく言われてる事だろ ネストの深さは闇の深さってな
ネストの深さで分かるのは無能である事だけやぞ? センス関係ないやんw てか無能はコード見るまでもなく一言話せば分かるしw 迸っとるからな無能がwおまえらみたいにw
メソッドに抽出したりcontinue,break,returnで浅くする工夫なら普通はやるわな
もうさぁ・・・一般的に言われてるソースじゃなくて、実際の仕事で見たソースの話してくんない? 本でよく見るような話いらんわ。しょうもない。
中国やアメリカで仕事して日本に帰ってくると 未だにメールでやり取りしてて心を痛める毎日
>>905 アメリカはSlack 中国はQQとWeChat(日本のLINEみたいなやつ) 中国は一般人でもメールはほとんど使わない あとは何でもQRコードで電子決済 道路の両脇に並んでる崩れ落ちそうな肉まん屋ですら電子決済に対応してる 自転車乗るのはスマホ3タッチするだけ 深センあたりに行けば分かるがもう日本は完全手遅れ そんなにちがうものだろうか 国は嬉しいかもしれんが個人は
Methodオブジェクトパターンかメタプログラミング文脈ならありえる
バクレポ「機能しない 」 中身 { ;//ここに実装する }
>>916 それみて思い出したのがあったw BOOL xxx(xxx) { // なんかコンパイル通らないのでコメントアウト /* : */ return TRUE; } int func(prm1,prm2, …中略…,prmN) { // // 色々処理する(見通し悪い1400ライン) // return 0; }
修正に修正を重ねて稼働し続けてきたリソース。 ソース分析しろ言われて開いたらネストが13以上…
古いコードを延々と残しておくのをやめてほしいな。 ソースコードの半分以上が使われてないコードだったりして見通しが悪いったらありゃしない。 その割に修正履歴はクソの役にも立たないコメントが付いてる。
>>923 使われとらんのやったら消せばいいやろ 消さないおまえが悪い めっちゃ長いネストをプリントアウトして一生懸命読んでたら コメントだったでござる
未だに紙出ししてコード読むおじいちゃん居るんかよw
画面に収まりきらないとかメモ書き込んだりするならやるけどな それだけ元がひどいんだろ
画面に収まりきるコードてHello, Worldかなw
>>929 画面に収まるコードて25行以下のことやぞw 今どきのディスプレイにあわせて制約ゆるく解釈てんじゃねーよタコwww 25行っていつの話だω 縦400しかない頃か 90年代初頭でも480のハイレゾで30行くらいは行けたぞ
インデックスが一つも無いオラクルのシステム しかもパッケージだからイジるなと・・・ 検索に何分かかってるんだよ
>>919 voidが無かった時代もあるんだわ え、そんな問題じゃない? >>941 voidが無くてもva_listはあっただろ ↓経験10年以上の奴のプログラムがこれwwww bool Hoge::isExistElement() const { int cnt = 0; for (int i = 0; i < m_ElemList.size(); i++) { ++cnt; } return (cnt > 0)? true : false; } データ量が増えるとめちゃ遅くなるので、原因を調べたら この関数がループの中で繰り返し呼ばれてたwwww
return m_ElemList.size() > 0; あるいは for(int i = m_ElemList.size(); --i >= 0;) return true; return false; なんかの罠か? 全力で釣られてやったぞ
不要な行は消せば良い言う人いるが、 消したくても消せない環境があるのよ… クソコード × クソ規約 でお腹いっぱいぱい
おれが昨年作った糞コードを張りたいけど、 死ね!と言わない?
ムチャクチャだとされるCのコード #include <stdio.h> #include <stdlib.h> // 構造体の宣言 typedef struct { int num; char *str; } strct; int main(void) { // 実体を生成 strct *entity; // 動的メモリの確保。確保したメモリをstrct型ポインタにキャスト。 entity = (strct*)malloc(sizeof(strct)); // メンバの初期化 entity->num = 0; entity->str = (char*)malloc(sizeof(32)); // メモリに文字列を代入 sprintf(entity->str, "%s %s!", "Hello", "World"); printf("%s\n", entity->str); // メモリの解放 free(entity->str); free(entity); return 0; }
>>953 sizeof(32) が怪しいくらいじゃね? 個人的には main(void) も気になるけど、どの辺がムチャクチャ? typedefで小文字とstlctって名前も少々気持ち良くない
sprintf で思いっきりバッファオーバーフローしとる
>>958 そりゃsizeof(32) の指摘に含まれてるからあえて言う必要は無いんじゃね なぜ誰もfreeに突っ込まない?おまえら初心者ばかりか?
sejuku が話題になってるスレがあったけど見つからねぇ 長野透とかいうひとのソースを分析してみた 最近の C というか ideon のメモリ割り当てって安全なのか? #include <stdio.h> #include <string.h> int main() { char s1[7] = "hello "; // taken 0x10 bytes char s2[19] = "world! long length"; // taken 0x20 bytes char s4[16] = "ABCDEFGHIJKLMOP"; char *s3; s3 = strcat(s1, s2); printf("%08x[%s]\n", s1, s1); printf("%08x[%s]\n", s2, s2); printf("%08x[%s]\n", s4, s4); printf("%08x[%s]\n", s3, s3); return 0; } https://ideone.com/58GHMk >>966 >strcat(s1, s2); これは決定的にあかん奴やね… 解読不能 今起こり猿馬見れんだろ大会なの小倉の 日のお風呂中日本中4代目の枕にメール お願い泊なっている心も離れてない練習 ご紹介私の命の言葉としての勉強
画像データをコピーするとき愚直にforでコピーじゃなくて memcpyにしたらめっさ早くなった
てか、sizeof(32)て32byteだから別にオーバーフローしてなくね
すみません普通にsizeof(32)は4を返しました 治すならこんな感じ? entity->str = (char*)malloc(sizeof(32)); ↓ entity->str = (char*)malloc(sizeof(char) * 32);
sizeof(32)はsizeof(int)と等価やね。
| . . . . . . │. . .\ . . \ . . . . . . \ . . . . . . .\.∨| . . │. . . . . . . .|.| . . . . |\ . . \. . / . .\. . . . . . . .|│| . . こんな話を知っているかしら。 │. . . . . . . .|.|i . . . . 、 \ . . Х>― .斗\ . . . |│| . . │. . . . . . . .|八 . . . . \ ` ‐---/ 弌Y^ . . . . .ト|人厶 ある中国人が、 |. .| . . .l. .│ \\ . . \ 〈/V \ ヽ | . . . |├く ヘ 私の国には報道の自由がありません。 |. .| . . .| . .|____,\\. . \ \く___ノ | . |. ∧|. . . . . 〉 マスコミは党の命令で反日報道ばかり |. .| . . .|/| .斗≧=‐---- ノイ|/ 人_/〉 していますって言ったの。 |. . . . . ∧. .'. Y^Vj弌 __/ . j. . .イ . . . . . . . . . .V人 \__〉 |/. . /\イ すると、それを聞いた日本人が言ったそうよ。 \.〈\ . . \\ヽ. ′ ┐ ∧. ∧. . . .ソ 奇遇ですね、私の国のマスコミも反日報道 \ \ . . \トヘ. く ノ ∨__,>く ばかりしていますって、 ` ‐--- T\ / V ̄\ 乂__≧=‐-----rく / \ ( \_ノ、__,ノ/| / ト / ∧ _/ | \
>>979 英語ネイティブの外国人ってこんな感じでコードを読んでるのかな?