汚いコードとは何か?
ガジェット通信 / 2012年12月22日 14時0分
今回はメカAGさんのブログからご寄稿いただきました。
■汚いコードとは何か?
プログラミングを知らない人には、プログラマが言う「汚いコード」というものが実感できないかもしれない。それをシンプルに説明してみる。
たとえば円周率の3.14。円周率を使って円の面積を求めるプログラムが組まれているとする。3.14という数字が書かれているコードがある。
それがどうしたの?と思うかもしれない。ところがこのコードは汚いのだ。「え?なぜ?!」というのが、非プログラマの反応だろう。
もっと精度よく計算するために3.1415を使いたくなったとする。その場合、それまで3.14だったところを3.1415に修正するわけだが、プログラムが巨大になると、その箇所は膨大になる。どこかを修正し忘れたりする。
ある場所では3.14で計算し、別な箇所では3.1415で計算すると、同じになるはずの数値が同じにならない。これをバグという。
* * *
ではどうすればいいか。プログラムのある箇所で「PI=3.14」と定義すればいい。そしてそれ以外の箇所ではPIを使い、絶対3.14という数値を使わないことに「決める」。
そうすればPI=3.14の箇所だけ「PI=3.1415」と修正すれば、全部直るわけだ。直し忘れもなくなる。
ところがある箇所ではPIを使い、別な箇所では3.14をそのまま使っていたりすると、PI=3.1415と修正した瞬間に、そのプログラムは正常には動かなくなってしまう。
つまりPIと書いてあったり、3.14と書いてあったり、はたまた別の箇所では3.141とか書いてあるプログラムは「汚い」のだ。
* * *
3.14ぐらいコードを検索すればいいんじゃない?と思った人!たとえば6.28という数値が使われていたらどうだろう。もちろん6.28=3.14*2だ。でも3.14を検索しても6.28は見つからない。円周の計算ではこちらの数値のほうが頻繁に出てくるかもしれない。
* * *
これを読んで多くの人は、じゃあ、ちゃんと「3.14を使わずにPIを必ず使いましょう」「6.28を使わずに(PI*2)を使いましょう」と、みんなで約束を決めて守ればいいじゃん、と思うことだろう。その通り!つまりそれが「綺麗にコードを書く」ということなのだ。
え?そんな単純なこと?と思うかもしれない。もちろん現実はこんなに単純じゃない。
* * *
たとえばコピペ。あちこちから使えそうなコードを切り貼りして組み合わせる。確かに手間を省ける。でもあちこちから持ってくるから、ある箇所は3.14を使っていて、別な箇所は3.1415を使っていたりする。定数の定義も「PI」だったり「PIE」だったりする。
プログラムは一見動いているけれど、なんかちょっとおかしい。微妙に計算が合わない。そんな感じになる。コピペで作ったプログラムというのは、大雑把な形になるのは早いが、バグがなかなか取りきれないというのは、こういうこと。
誰かが書いた膨大なコードをちゃんとチェックして、円周率が同じ値に統一されているかを確認する作業は結構大変で、場合によっては自分で書いたほうが早いし確実ということもある。
* * *
単純過ぎて実感がわかない?じゃあ具体例。
惨憺たる評価だった某オンラインゲーム。何かとサーバーがダウンすることで多くのユーザーの不評を買った。おそらく通信エラーの処理をしていなかったと思われる。
社内でテストした時はLANだから安定していて、通信エラーが起きなかったのだろう。でも正式リリースして世界中のPCとインターネット越しに通信するようになると、いろいろな理由で通信エラーは起きる。
通信エラーが起きることを前提にプログラムをしていないと、内部のデータが矛盾してしまい、サーバーが止まってしまう。エラー処理というのは命綱のようなもの。「なくてもとりあえず動くからいいや」と手を抜くと、必要な状況になったときに悔やんでも悔やみきれない。
* * *
しかもエラー処理というのは、後から付け加えて済ませることができるようなしろものではない。ときどきオマケみたいに考えている人がいるけれど、実は一番複雑な部分。時には設計全体の方向性を決定づけてしまうほど。
銀行の送金で途中でエラーが起こった場合、お金がどこにもなくなってしまっては困る。かといって両方の口座に残っていても困る。送金が完全に完了するか、送金が全く行われないか、どちらかでないといけない。これはトランザクション処理といってコンピュータサイエンスの一分野。
まずエラー処理はなしである程度作って、後から付け加えようというものではないのだ。
執筆: この記事はメカAGさんのブログからご寄稿いただきました。
【関連ニュース】
この記事に関連するニュース
-
RTA走者が利用する“バグ”を分析 ソフトウェア開発に役立つか? 「スーパーマリオシリーズ」4作で調査
ITmedia NEWS / 2024年5月7日 8時5分
-
太陽光発電施設にサイバー攻撃か 中国ハッカー集団「武器庫」名乗り乗っ取り 遠隔監視機器800台が被害、不正送金に悪用
zakzak by夕刊フジ / 2024年5月1日 11時49分
-
ITエンジニアが足りず「メカエンジニアを職種転換」 成功のポイントとは?
ITmedia ビジネスオンライン / 2024年4月23日 7時15分
-
タンパク質の動きを3Dで見る!創薬を加速する0.5フェムト秒の挑戦
ASCII.jp / 2024年4月18日 11時0分
-
受講者の質問をAIで回答するソリューション「UnivTutor(TM)」を提供開始
PR TIMES / 2024年4月15日 15時15分
ランキング
-
1「お酒と一緒にカフェイン入り飲料を飲むことはやめて」 農水省がカフェインの過剰摂取について注意喚起、過去には中毒死も
ねとらぼ / 2024年5月11日 15時39分
-
2「スタバのアプリで支払えない」「エラーが出た」 スタバでシステム障害発生
ねとらぼ / 2024年5月11日 18時23分
-
310歳の“小学生ギャル男”、ギャル彼女との関係に「カップル商売」の指摘 “稼いでる”の憶測に管理者「ただの小学生男子だぞw」「ちゃんと調べて」
ねとらぼ / 2024年5月10日 17時25分
-
4「ガチンコファイトクラブ」元2期生、現在は有名タレントの“マネジャー”だった……竹原慎二の“再指導”で約20キロ減「中途半端にやめやがって」
ねとらぼ / 2024年5月10日 12時50分
-
5中小企業でもできる!サイバー攻撃被害別撃退法 第8回 ランサムウェアのソフトを売買する市場が拡大、サイバー攻撃はビジネスに~中小経営者もサイバー対策の重要性の認識を
マイナビニュース / 2024年5月10日 13時0分
記事ミッション中・・・
記事にリアクションする
記事ミッション中・・・
記事にリアクションする
エラーが発生しました
ページを再読み込みして
ください