̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2014/11/24 通巻675号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 性能を暗黙的に示すルールを作るな - リーダブル・コード(29) ある値を出力とする関数名を付けるとき、その値の名前を関数名に含めるのは 当然ですが、関数名は動詞である方が読みやすいです。 しかし、動詞をカラフルに するな(リーダブル・コード(9))という方針から、動詞に関して悩む必要は なく、Get+出力値の名前、にすればよいです。 たとえば、時計の時(Hour) を出力する関数なら、GetHour() となります。 たとえ、関数の中で時を計算していたとしても、CalculateHour() という名前に すべきではありません。 なぜなら、関数名はインターフェースなので、内部の 実装に依存する名前を付けてしまうと、内部の実装を知らなければ使えない面倒な 関数であったり、再利用性が低い関数であったりしてしまうからです。 もし、 あるライブラリーでは GetHour、別のライブラリーでは CalculateHour という 名前だったら、同じ機能の関数であると思うでしょうか。 しかし、書籍「リーダブルコード」には、MinuteHourCounter クラスの HourCount() というメソッド名が良くて GetHourCount() というメソッド名が 悪いと書かれています。 理由は、Get は「軽量アクセサ」であることが暗黙的に 意味しているからです。 つまり、HourCount() は重たい処理かも知れない というのです。 はたして、これは良い方針なのでしょうか。 MinuteHourCounter クラス(Aクラスとする)と別のクラス(Bクラスとする) に共通するスーパークラス的なインターフェースを作るとき、大抵、Aクラスと Bクラスの実装は異なります(同じならスーパークラスになるでしょう)。 そうなると、HourCount と GetHourCount に名前を分けなければならず、 使う人はサブクラスによってどちらかが使えなくなってしまいます。 性能に関して関数名から知りたいと思うかもしれませんが、同じ機能であれば 2つも関数はないので選ぶ必要すらありません。 つまり、高速であることを 常に心がけるために、軽量アクセサに対する特別なコーディングルールがあった としても、そもそも軽量アクセサであるかどうかを判断するケースはありません。 つまり、軽量アクセサ(性能)にコーディングルールを作ることは、プログラム を高速にする必要性に対する対策になっていないのです。 ただ、同じ機能が使える2つの関数は存在する可能性があります。 汎用的な関数と専用の関数があるときです。 一般に、専用関数が速いですが、 そうとも限らないという問題が考えられます。 ただ、速度に問題がある関数なら、 関数のドキュメントに速い関数へのリンクがあるものです。 コーディング ルールで判断して、それが正しいという保証はありません。 そもそも、処理速度を良くしたいプログラムは、プログラムを作成した後で 時間がかかっている関数を調べるものです。 時間がかかっているトップの 関数から対処していく方が効率が良く、手当たり次第にボトムアップに性能に 気を付けるのは効率が悪いからです。 例外として、関数名に Fast が含まれていれば関数名だけで判断できます。 GetHourFast() のような感じの名前です。 ただ、これはコーディングルール ではありません。 ちなみに、HourCount というメソッド名(メンバー関数名)は、動詞が含ま れていないので、プロパティにすべきです(C++でも工夫次第でプロパティは 作れます)。 プロパティにアクセスするコードは、変数へのアクセスと同じ コードになるので、速いはずであることと勘違いしやすいので、使うべきで はないという考えもできるはずですが、あまり指摘されていません。 参考 リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック オライリージャパン ISBN-13: 978-4873115658 15.2 クラスのインターフェースを定義する 注目ニュース 一覧 ◇ Microsoft、Professional 相当の無償版 Visual Studio Community 2013 を公開。 http://www.forest.impress.co.jp/docs/news/20141113_675880.html … WSH のデバッグも可能。 代わりに Express 版が無くなる。 ◇ MS、.NETのオープンソース化を推進。LinuxとMacへの対応を視野に。 http://builder.japan.zdnet.com/tool/35056505/ … オープンにするのは、.NET のサーバー側のみ。 ◇ 攻めに転じたMicrosoftは何を目指すのか?無料Officeアプリ強化、容量無制限OneDrive、Dropbox連携。 http://www.itmedia.co.jp/pcuser/articles/1411/18/news059.html … 最近の MS の大型提携のまとめ。 ◇ 24のプログラミング言語をブラウザ上で実行できる paiza.IO。環境構築の手間ゼロ。 http://www.itmedia.co.jp/news/articles/1411/18/news157.html … 転職サイトだが、ブラウザーで動かない C言語も動かせる。 数秒間のみ。デバッガーはない。 ◇ LEDで照らした物にID情報を付与できる新技術、富士通研が開発。 http://www.itmedia.co.jp/news/articles/1411/17/news065.html … QRコード付けるとカッコ悪くなってしまうものに。 ◇ 癒しを倍増させるハイレゾ音源の作り方、そして容量半分で 生の音 に迫る新技術とは? http://www.itmedia.co.jp/lifestyle/articles/1411/10/news063.html … 時間軸解像度ど上げて、ハイレゾよりもっと生の音になる。 ◇ アップル、Apple Watch 用開発ツールキット WatchKit をリリース。 http://japan.cnet.com/news/service/35056755/ … Apple Watch を使うシーンは、すべてスマホで置き換え可能なのだが。 ◇ iPad Airと同じ液晶?フルHDを超える9.7型Win8.1タブレットが発売。 http://akiba-pc.watch.impress.co.jp/docs/news/news/20141109_675137.html … タッチ操作に対応した Windows ストアアプリがあれば。 ◇ iOS でアプリが偽造アプリに置き換えられる脆弱性。 http://japan.cnet.com/news/service/35056364/ … 警告が出るため、あまり問題ではない。 ◇ お気に入りの入力機器をBluetooth接続に変換できるアダプタが14日に発売。 http://akiba-pc.watch.impress.co.jp/docs/news/news/20141110_675133.html … iPhone など Bluetooth しか接続できない機器に。 ◇ Linuxマルウェアという死角をなくせ。グーグル傘下VirusTotalの取り組み http://japan.zdnet.com/security/sp/35056503/ … MS Word に近い数の Linux マルウェアにオープンソースは対応できるのか。 ◇ GALAXY Note Edge レビュー。 http://japan.cnet.com/news/commentary/35056798/ … 側面ディスプレイである必要性が弱い。 ◇ 音沙汰がなくなった Google Glass。不安視されるグーグル製ウェアラブルの未来。 http://japan.zdnet.com/article/35056747/ … 他社のウェアラブルは、腕時計型ばかり。 ソフトウェアデザイン館 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