̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2015/ 1/26 通巻679号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ this ポインターを省略するな - リーダブル・コード(31) Python では this ポインターに相当する self を省略できません。 なぜでしょうか。 設計書を書く目的は、設計内容を文章化(形式知化)することで、設計した本人 以外や将来の自分でも理解できるようにするためです。 アジャイルの開発方法では、 包括的なドキュメントよりも動作するソフトウェアを重視していますが、だからと いって設計の形式知化を怠ると、車輪の再発明という無駄を繰り返してしまいます。 ソースコードを読むとき、理解に必要な暗黙的なルールが多いほど理解不能になり ます。 それは、自分勝手なレアな略語であったり、理解に必要な情報が書かれて いないことだったりします。 現在は検索技術が発達しているので、検索可能な状態にするだけで、だれでも 分かるようになります。 それはつまり、キーワードを省略しないで書くことです。 変数名や関数名の内容を知りたいとき、その変数に代入しているコードや関数定義 のコードやドキュメントを見ることで理解できます。 しかし、検索するキーワード が重複していると検索結果が大量に表示されてしまい、その中から人力で探さなけ ればならなくなります。 具体的には、ローカル変数(auto変数)や、内部リンケージ のグローバル変数(static グローバル変数)などです。 名前空間をサポートする プログラミング言語では、グローバル変数も重複する可能性があります。 この問題の対処法は、this ポインター(プログラミング言語によっては self) を省略しないできちんと書くことです。 また、名前空間は省略する(Python の import)のではなく、内部リンケージで略語を定義(Python の from 〜 import や、XML の名前空間)します。 その略語も内部リンケージであることを表す コーディング ルールに準拠させます。 this があるだけで、検索対象が大幅に削減されます。 全文検索ツールの結果が 減るわけではありませんが、検索結果から探す範囲が大幅に減ります。 もしくは、 this の型を検索するだけでよくなります。 型が分かれば、ドキュメントも検索 できるようになり、詳細な情報も得られます。 それに、重複した検索結果のうち、 本当にこれで合っているのだろうかという確証が得られ、迷うという時間を削減できます。 さて、this を省略した次のコードの Name は、どの Name 変数なのか分かるでしょうか。 (中略)の部分には大量のコードがあり詳細は分からない状況であるとします。 void SampleClass::Method() { (中略)   Name = "Tom"; } Name のような汎用的な名前は、全文検索ツールで検索しても検索結果が多すぎて 使い物になりません。 (かといって、Name ではなくもっと重複しにくい名前に してしまっては、分かりにくくなることもあります。 分かりやすくなるのは適切 な抽象度になった場合だけです) SampleClass のメンバー変数であるとは限りません。 ローカル変数の可能性が ありますし、グローバル変数の可能性もあります。 this を書くだけで、そんな迷いをする無駄な時間は無くなります。 メンバー変数 に対する m_ で始めるようなコーディング ルールも要りません。(ルールは少なく するべきです) また、-> を含めて(他の多くの言語ではピリオドを含めて)検索 すれば、メンバー変数に限定して検索することもできます。 void SampleClass::Method() { (中略)   this->Name = "Tom"; } ちなみに、Python では、this が引数に書く必要があります。 this という キーワードさえ暗黙的にしないという効果を狙っています。 (ただ、this 引数は何かを検索可能にはなっていませんが、ローカル変数であることは 明示されています) 参考 「self記述省略不可」はOOPでないから? http://python.matrix.jp/pages/columns/misunderstanding.html 和訳 なぜPythonのメソッド引数に明示的にselfと書くのか http://coreblog.org/ats/translation-of-why-explicit-self-has-to-stay/ 注目ニュース 一覧 ◇ 最新技術をいち早く搭載するWindows 10。国内PCへの搭載は秋冬モデルになる見通し。 http://pc.watch.impress.co.jp/docs/column/ubiq/20150122_684838.html http://www.gizmodo.jp/2015/01/windows_10_6.html … Windows 8.1 よりも更に進化したデスクトップ。 ◇ IEと.NET Frameworkのサポートポリシーが変わります(1年後ですが……)。 http://www.atmarkit.co.jp/ait/articles/1501/23/news031.html … 最新版以外は無保証に。 ◇ 370万人が参加したデモ行進が、うさん臭く感じる理由。 http://bizmakoto.jp/makoto/articles/1501/20/news024.html … 欧米人が気付かない欧米流「表現の自由」の押しつけ。 ◇ 折りたたみでテンキー付、Androidベースのフィーチャーフォン AQUOS K SHF31。 http://k-tai.impress.co.jp/docs/news/20150119_684194.html … タッチパネルは使えない。 ◇ パスワード認証キラープロトコル、FIDO 1.0仕様公開。 http://www.itmedia.co.jp/enterprise/articles/1501/21/news020.html … パスワードを使わない ICカードとの違いは? ◇ Microsoft、ネットワーク解析ツール Microsoft Message Analyzer v1.2を公開。 http://www.forest.impress.co.jp/docs/news/20150120_684491.html … TCP/IPレベルのネットワーク データの解析。 ◇ ついにキャズム超え。コミック市場の4分の1は、すでに電子書籍になっていた。 http://japan.cnet.com/sp/t_hayashi/35059325/ … 新しいものか古いものかの二項対立の思考法は分かりやすいが正しくない。 ソフトウェアデザイン館 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