̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2013/10/28 通巻643号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 説明変数を書くことを面倒くさがるな - リーダブル・コード(13) 1行に複数の文を書くな、というコーディングがよく見られます。 これは、1行に1つの文があるという思い込んでいる人にも楽に読めるように する効果がありますが、1つの行に複数の処理を書かないようにして複雑に ならないようにするという期待も込められています。 本題に入る前に、このルールの副作用(問題点)を挙げましょう。 二次元座標を表す x と y の変数があったとします。 これらの変数を 原点の座標に設定して描画するコードは、次のようになります。 x = 0; y = 0; DrawAt( x, y ); // DrawAt 関数は描画する関数のサンプル 1行に複数の文を書くときは、2つのスペースを置くと読みやすくなります。 ただ、このコードは、1行に複数の文を書くなというコーディング・ルールに 違反するため、次のように変えました。 x = 0; y = 0; DrawAt( x, y ); 1つ1つの文は行が分けられたことで読みやすくなったのですが、 x を代入する行の説明、y を代入する行の説明をすることが難しくなりました。 意味を考慮しないで機械的に複数の行に分断してしまったために、 x と y の両方で表現できていた「原点」を表現できなくなってしまったからです。 このルールに対処するには、空行を活用して、ブロックで原点を表現するしか ありません。 x = 0; y = 0; DrawAt( x, y ); 最初のコードと比べると長くなってしまいました。 空行が増えたことでスッキリ した印象を持って読みやすくなった気持ちもわかりますが、一覧性が失われて しまい、全体の処理を理解することが難しくなってしまっています。 一覧性を 重視するなら、次のようにした方がもっと良いでしょう。 x = 0; y = 0; DrawAt( x, y ); この1行で、原点に描画するという1つの処理になりました。 1行に複数の 文を書いてはいけないのは、1行で何を表現しているのか説明できないときです。 1行に1つの文に限定しても、1行を複雑にすることはいくらでもできます。 count = atoi( time ) * 60 + atoi( strchr( time, ":" ) + 1 ); 1行で count に何かの値を代入している処理ですが、何かをコードから読み とることは難しいでしょう。 この文を読みやすくするには、式の途中の意味の ある値を変数に入れることです。 hour = atoi( time ); minute = atoi( strchr( time, ":" ) + 1 ); count = hour * 60 + minute; この hour, minute 変数のことを説明変数と言います。 説明変数を書くことで、 大きくて複雑に見える処理を小さく簡単な処理に分割して確実に理解していく ことができるようになったのです。 ただし、説明変数は、何かの概念に対応 できるものにしなければ読みにくくなります。 hour_60 = atoi( time ) * 60; minute = atoi( strchr( time, ":" ) + 1 ); count = hour_60 + minute; hour_60 は、hour の 60倍の値だよ、と説明できるかもしれませんが、 hour(時)のように一般に知られている1つの概念ではないので、 チャンキングがしにくく読みにくいのです。 説明変数を書くと、書かないときよりタイプ量は増えますし、 変数名を考える手間が増えます。 しかし、テストや保守のことまで考えると、 読む機会の方が多いため、全体の開発期間は短縮できるのです。 説明変数を書くと処理速度が遅くなったり、使用するメモリーが増えてしまうと 思うかもしれませんが、そうはなりません。 変数に代入されない計算結果も 無名の変数のような領域(レジスター、または、メモリー)に格納されるからです。 参考: リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック オライリージャパン ISBN-13: 978-4873115658 8.1章 説明変数、8.2章 要約変数 注目ニュース 一覧 ◇ 第5世代は、iPad Air として登場したiPad。iPad miniはRetina Displayに刷新。 http://pc.watch.impress.co.jp/docs/news/20131023_620522.html http://japan.cnet.com/apple/35038839/ … Android タブレットに比べると割高だが、スッキリしていて上品。 ◇ OS X Mavericks正式発表、驚きの無料アップグレード。iWorkも実質無料。 http://internet.watch.impress.co.jp/docs/news/20131023_620537.html http://pc.watch.impress.co.jp/docs/news/20131023_620690.html … Mavericks に対応した Windows 用仮想環境で動かせるらしい。 ◇ Surface 2/Pro 2 で年末商戦にかけるマイクロソフト。 http://www.itmedia.co.jp/news/articles/1310/24/news118.html … 発表してサプライズの翌日発売。しかし注目されたかが問題。 ◇ OS Xがネコ科をやめたところで、Windowsに公式ネコ科テーマなどが登場。 http://pc.watch.impress.co.jp/docs/news/yajiuma/20131023_620526.html … そんなこと意識してたのか。 ◇ 8Kパネルの裸眼立体視ディスプレイが登場。 http://www.itmedia.co.jp/lifestyle/articles/1310/23/news145.html … 左右の目を合わせると、8Kの2倍の情報量。 ◇ 地デジ対応カーナビからB-CASカードがなくなる! ルネサスが地上RMP方式をデモ。 http://monoist.atmarkit.co.jp/mn/articles/1310/24/news026.html … B-CASカードをソフトウェアに置き換え。 ◇ Windows 8.1 にぴったりの Skype。Skype for Windows 8.1が正式にリリース。 http://www.forest.impress.co.jp/docs/news/20131023_620660.html … ロック画面や Internet Explorer との連携も。 ◇ オフィススイートに5万円払うのは時代遅れなのか。 http://techtarget.itmedia.co.jp/tt/news/1310/21/news06.html … セキュリティを考えるとクラウドベースが増えると思えない。 ◇ 民間の積極性が後押し オープンデータに本腰入れる横浜市。 http://www.itmedia.co.jp/enterprise/articles/1310/22/news016.html … ガバナンスの問題が山積み。 ◇ Windows 8/8.1の使い勝手を極限までXPに近づけるソフトが発売。 http://news.mynavi.jp/news/2013/10/22/241/index.html … 問題は使い勝手だけじゃないが。 ソフトウェアデザイン館 Sage Plaisir 21 ホームページ >>> http://www.sage-p.com/ メルマガ >>> http://www.mag2.com/m/0000083983.html ブログ >>> http://blog.livedoor.jp/sage_p/ ツイッター >>> http://twitter.com/Ts_Neko ダウンロード >>> http://www.sage-p.com/freesoft.htm サポート掲示板 >>> http://www.sage-p.com/kg_ban09/z6037C8.cgi 東日本大震災 >>> http://www.sage-p.com/saigai.html メール >>> ts-neko◇sage-p.com ←◇を@に変えてください 緊急メールは件名に「うどんメール」を付けてください。 このメルマガの登録・解除 - http://www.mag2.com/m/0000083983.htm