̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2014/10/27 通巻673号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 実装依存回避のために独自の定義をするな - リーダブル・コード(28) C言語の整数型の代表である int 型は、CPU によってビット数が異なることがあり、 扱える値の範囲が CPU によって異なることがあります。 最近では、int 型は 32ビットの整数、マイナスは 2の補数、のものが大半を占めているため、あまり 気にすることはないのですが、論理的に 1%でも可能性があれば(パレートの 法則を無視して)ビット数の実装に依存しないようなコードになるような対策を したくなるものです。 最も対策が簡単なのは、独自の型をで定義することです。 int 型のビット数が 変わっても、型の定義内容を変更すれば、独自の型を使っているコードに 変更が要らなくなるからです。 つまり、変更する箇所を局所化するという 効果があるのです。 独自の型に付ける名前は、どんな名前でも局所化の効果はあります。 極端な話、 自分が作成したモジュール(の略称)を付けるだけでも効果はあります。 たとえば、SampleModule を作成した時は、SM_int という名前にするといった ことです。 独自の名前といっても、名前の一部に int が付いているので、 int 型であると推測しやすいから読みにくくはないでしょう。 ちょっと接頭辞 がうっとおしいぐらいです。 しかし、ちょっと待ってください。 これは実装依存を回避するための対策なので、 int 型の定義が変われば、SM_int 型は int 型ではなくなるのです。 つまり、 SM_int でありながら、int 型ではないということになるので、紛らわしくなって しまいます。 これは読みにくいコードです。 int を使わない代わりにつけられるので多いのは、word です。 Windows SDK でも WORD という型があります。 初期の Windows が開発された当時は、16ビット CPU が主流でしたから、CPU が扱える基本的な整数型という意味であるワードは 16ビット整数を指していました。 しかし、現在の主流は32ビット整数です。 Windows SDK では、DWORD が 32ビット整数なのですが、ワードの意味と違って いるため、DWORD の WORD は、CPU のワードは意味が違うものとして理解して おく必要があります。 これは DWORD を読んだだけでは類推さえできず、むしろ 誤ってしまうのです。 これは読みにくいコードになります。 Windows ほど 普及してしまえば慣れますが、久しぶりに C言語で Windows するときには、 やはり迷います。 ISO 標準である C言語(C99以降)では、int32_t という型が typedef で定義 されています。 これは、int や word と違って、32ビット整数であることは 間違いありません。 では、SM_int32 型を使えばいいかというと、あまり よくありません。 論理的に間違いがないこと以外に、もう1つ考えなければならないことは、 それが普及しているかどうかです。 ある程度普及していたら、ネットで 調べることができます。 他のソースでも使われている可能性もあり、そのとき 覚えていれば、調べる必要はありません。 そして、普及している範囲が広いほど よいです。 いくら論理的に良いアイデアであっても、チーム、グループ、 会社、団体で独自のルールを作るより、世界的に普及している名前の方が よいのです。 普及しているほど、多くの人の審査を受けているわけですから 論理的にも問題ないことが多いでしょう。 システムテストが済んでいる仕様 なので、積極的に使うべきでしょう。 最近では、int 型は32ビットが大半を占めているため、独自の型を定義するより int 型のままでも問題なく、むしろ読みやすいという状況なのです。 もし、 int 型のビット数が違うCPUに移植した場合、一瞬で置き換えるツールは いくらでもあります。 一瞬×まれ≒0なので問題なしです。 数字を無視して 論理的に考えると判断を誤ります。 参考 ISO/IEC 9899:1999 - 7.18 Integer types 注目ニュース 一覧 ◇ アップルやアマゾンにも圧力。法人税回避対策に乗り出したEU。 http://japan.zdnet.com/cio/sp_12mikunitaiyoh/35055222/ … ダブルアイリッシュと呼ばれる節税策の対抗策が、小国を苦しめると脅す企業。 ◇ Excel方眼紙をWebアプリ化する Forguncy(フォーガンシー)がついに発売。無料評価版も公開。 http://www.publickey1.jp/blog/14/excelwebforguncy_1.html … メールアドレスを登録すれば、お試しできる。 ◇ Bashの脆弱性 Shellshock について知っておくべきこと。 http://builder.japan.zdnet.com/html-css/35054625/ … Windows 以外は影響範囲は広いが、対策の基本は Bash を最新にすること。 ◇ SSL 3.0の深刻な脆弱性 POODLE、専門家が警告。 http://itpro.nikkeibp.co.jp/atcl/idg/14/481709/101700029/ … Internet Explorer なら、設定で対処可能。 ◇ ログイン情報が狙われている。 SnapchatとDropboxの情報漏えい。 http://cloud.watch.impress.co.jp/docs/column/infostand/20141020_672060.html … 推測しやすい簡単なパスワードを使っていたんじゃないかとするIT企業。 ◇ MicrosoftのOffice等とSaaSの雄Salesforceが統合へ。時代の変化の大きな象徴。 http://m.jp.techcrunch.com/2014/10/14/20141013microsoft-and-salesforce-promise-windows-office-and-onedrive-integration/ … CRMクラウドとMSオフィスの統合。 ◇ Windows ServerがDockerを採用する、とはどういうことなのか。 http://www.publickey1.jp/blog/14/windows_serverdocker.html … Azure ではなく Windows Server でもコピーオンライトによる早い仮想環境。 ◇ 平等院鳳凰堂に職人の落書き。瓦下の板、そのまま後世へ。 http://www.asahi.com/articles/ASGBH3H7GGBHPLZB00F.html … 修理は大変だ、というつぶやき。 ◇ 無償のオンラインアプリ作成ツール Windows App Studio が日本語に対応。 http://www.forest.impress.co.jp/docs/news/20141016_671661.html … まだベータ版。 ホームページの最も上に制限事項がある。 ◇ ビジネスプロセス上の労働者が半分になる、2020年までにITが引き起こすビジネスの変化トップ10。 http://www.publickey1.jp/blog/14/2020it10.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