̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2015/ 3/23 通巻683号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 配列を pointer と名付けるな - リーダブル・コード(33) C言語の配列とポインターはよく似ていますが、同じではありません。 しかし、変数名の一部に配列(Array や arr や Vector)やポインター (Pointer や ptr や p)のどちらかを含めるとき、その変数がプログラ ミング言語的に配列なのかポインターなのかによってどちらかを選ぶ べきではありません。 まず、プログラミング言語の話をします。 C言語の配列は、メモリー上で同じ型の変数が並んでいるものです。 int array[3]; は、 int array[0]; int array[1]; int array[2]; のように3つのメモリー領域が存在します。 C言語のポインターは、アドレスを格納する変数が1つだけあるものです。 int* pointer = array; は、pointer 変数に array 配列の先頭アドレスが1つだけ格納されています。 このような違いがあっても、配列でもポインターでも [ ] を使って配列の 要素にアクセスできます。 たとえば、pointer[0] と array[0] は同じ メモリー領域の値になります。 [1], [2] も同様です。 (もちろん、 pointer が配列の先頭を指しているものとします。) 機械語レベルで CPU が動作する内容は異なります。 array[2] は、array 配列変数があるアドレスに + 2 * sizeof(int) を加算したアドレスの メモリーの内容にアクセスします。 pointer[2] は、pointer 変数がある アドレスから変数の値をリードし、こうして得られた配列のアドレスに + 2 * sizeof(int) を加算したアドレスのメモリーの内容にアクセスします。 配列のアドレスを得る処理において内容が異なるのですが、同じ [ ] を 使った書き方になります。 次に、リーダブルコードの話をします。 一般的な配列ではない変数と、配列変数を次のように宣言したとします。 int variable; int variables[3]; これらの変数に値を代入(出力)する関数は、次のようになります。 void FunctionA( int* argument ); void FunctionB( int* arguments ); ちなみに、話は逸れますが、 void FunctionB( int arguments[] ); という書き方もできますが、引数で [ ] を使った場合、それはポインター型の 引数を指定したこととして、int* 型と同じ処理になります。 (なぜなら、 配列のすべての要素を渡さなくても、アドレスを渡すだけで、配列にアクセス できるからです。) 話を戻して、FunctionA と FunctionB の引数に注目してください。 どちらも int* 型です。 FunctionB には、arguments 引数が配列であるという情報は 渡されないのですが、arguments[2] のように配列要素にアクセスすることは できます。 CPU にとって配列であるかどうかは必要ない情報なのです。 しかし、プログラミングをする人間にとっては、arguments が配列を指して いるかどうかの情報がなければ、arguments[2] と書いていいかどうかを判断 することができません。 かろうじて、今回の場合、引数の変数名が英語の 複数形であることから配列であることが推測されるでしょうが、複数形では ないのに配列であるコードはいくらでもあります。 では、配列引数の名前は複数形にするべき、というルールにしたらよいか というと、配列でなくても複数形の名前を付けることもあるため、これも よくありません。 分かりやすい文章の表現を具体的なルールにすると逆に 分かりにくくなるケースが頻発するのですが、あえてルールにするなら、 Array や Vector のように明確な単語を変数名に含めるべきです。 配列の 引数には * を禁止にして [ ] を付けるというルールは良いと思いますが、 残念ながら、自動変数(ローカル変数)にはそのような記述ができないため 統一性に欠けます。 前回、ハンガリアン記法を使うな、という話をしましたが、使っている現場 で配列とポインターをハンガリアン記法で表現すると、多くの場合、配列 変数にも接頭辞 p(ポインター)を付けることが多くなります。 これは、 ハンガリアン記法を強制されたことで、システム ハンガリアン記法だけが 定着し、機械的に型に対応する接頭辞を付けるという習慣ができ、ならば 意味的に配列であるかということが軽視され、型は疑いようのないポインター 型だから接頭辞 p を付けてしまおうという考えになるからのようです。 ルールによって強制されたことで表現の放棄が起きてしまうのです。 参考 http://homepage3.nifty.com/mmgames/c_guide/15-07.html 注目ニュース 一覧 ◇ Apple Watch ハンズオン。最新情報と使用感や機能、デザインなど。 http://japan.cnet.com/news/commentary/35061920/ … Apple Watch のまとめ。 ◇ 女子大生が考えた オシャレなウェアラブル端末。 http://japan.cnet.com/news/service/35061896/ … 光や震動で通知。 画面が無い分、おしゃれにできた。 ◇ アップル、新MacBook発表。重さ920g、待望の薄軽モデルはRetina搭載で14万8800円から。 http://japan.cnet.com/apple/35061517/ … より薄くなった。 ◇ 新 MacBook の USB Type-C 搭載を考える。業界全体に及ぶワイヤレス化の影響。 http://japan.cnet.com/news/commentary/35061840/ … USB コネクターの数は減ったが、今後はワイヤレスを中心になる。 ◇ Microsoft、XiaomiのAndroid端末に Windows 10 ROM提供へ。 http://www.itmedia.co.jp/news/articles/1503/19/news065.html … ROM を取り換えるのは中国ならでは。 ◇ FREAK脆弱性、いまだ Android、iOS の人気アプリなどに影響。 http://japan.cnet.com/news/service/35061964/ … 暗黙的にクラウドに接続するアプリが多いため、アプリに入力した情報は洩れる。 ◇ Apple Pay にセキュリティの懸念が浮上。 http://japan.cnet.com/news/service/35061743/ … 時々、銀行はお金の流れを止めないためにセキュリティを低くする。 ◇ Google Code が2016年1月に終了へ。スパムや悪用に苦慮。 http://builder.japan.zdnet.com/tool/35061746/ … Google のオープンソースは狙われやすいのか。 ◇ Google Appsのドメイン登録者情報28万件、不具合で開示。 http://www.itmedia.co.jp/enterprise/articles/1503/16/news031.html … WHOIS情報をアーカイブするサービスによって恒久的に入手可能に。 ◇ Google Project Zero、メモリを物理的に攻撃できる脆弱性を発見。 http://news.mynavi.jp/news/2015/03/14/048/ … メモリーに入っている命令をウィルスに変える可能性が出てきたのか。 ◇ Khronosの次期グラフィックスAPI、Vulkan。 http://pc.watch.impress.co.jp/docs/column/kaigai/20150317_693050.html … AMD の Mantle がベース。 ◇ 特許権に画期的なテクノロジは不要?ノーベル賞受賞者のLED発明から考える。 http://japan.cnet.com/sp/patent/35061953/ … 独特な課題であれば取れる。 ソフトウェアデザイン館 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