iakioの日記

2010-08-01

プログラミングのいろいろとわからないことに全力で答えてみる

| 19:05

わりと直感でプログラムを書いてしまうほうなので、どのように書くのが良いのか、何故そのように書くのかということについて説明するのは結構難しいのですが、考え方を整理してみる良い機会なので、自分はどうしているかというのを思いつくかぎり書いてみます。

変数の命名ってどうしたらいいのだろう

接頭辞を揃えるのは良い習慣だと思います。一方「どのような時に配列を使いたくなるか」という問題については、

1. foreachでぐるぐる廻したいとき

2. 関数引数戻り値として、まとめたい時

というのが考えられます。2.についてもう少し説明すると、関数というのは複数の引数をとり、1つの戻り値を返します(参照渡しという方法もありますが私は滅多に使いません)。

引数 -> +----+
引数 -> |関数| -> 戻り値
引数 -> +----+

ある関数に渡す引数があまりに増えてきた時に、1つの配列に纏めてしまいたいと考えるでしょう。

また、複数の値を戻したい時は

  return array($hogeCnt, $hogeTitle);

あるいは、

  return array('cnt' => $hogeCnt, 'title' => $hogeTitle);

と、配列を使って書くかもしれません。また、「複数の値を1つに纏めたい」という理由でクラスを使う場合もあります。

データベースの接続と切断

PHPスクリプトが終了すればデータベースとの接続は切断されるので、私はデータベースの切断処理は(PHPスクリプトの最後にすら)ほとんど書いたことが無いです。

一時変数

私はunset()はほとんど使ったことが無いですが、「この変数はここまでしか使っていないよ」という意味でunset()を書くのは悪く無いと思います。また、同じ意味で関数やクラスを定義してプライベート変数を使うのは、unset()より良い方法です。

なので、unset()を使いたくなったら、そこを関数にしてしまうことはできないか考えてみるのも良いでしょう。

いずれにせよ、あとからソースコードを見てみたときに「この変数の影響範囲はここまでだよ」とわかるよう書く、というのは良い習慣です。

三項演算子が嫌い

使わなくて良いと思います。おそらく「三項演算子じゃなきゃヤダ」と言うプログラマーはそれほど多数派では無いでしょう。

私が使うとすれば、どうしてもちょっとだけ一行で書きたいとき、たとえば

<tr class="<?php echo ($i % 2) == 0 ? "even" : "odd"; ?>">

みたいな使い方でしょうか。

md5って大丈夫なのか

md5がよく使われている理由はたぶん単に古くからあったからでしょう。大丈夫かといわれるとそれは用途によるのですが。

元の文字列を推測できないような一意の文字列を生成する、という用途であれば、単にmd5()やsha1()するよりも、秘密鍵を使ったhash_hmac()を使うのが良いと思います。

とりあえずここまで。後は今度直接聞いていただければ。

webbingstudiowebbingstudio 2010/08/02 21:02 うぇびんです。丁寧な解説記事ありがとうございます ^o^

WordPressを頻繁に扱っているせいかforeachが好きで、よく配列を使います。
やっぱり、配列は関数の戻り値が多いときに使うと良いのですね。

unsetも書いてみたものの結局管理がわずらわしいし、
はじめからきちんとクラスを定義すればいいわけで、次からはやめようと思います。

hash_hmac関数は、はじめて知りました。
WordPressのwp-config.phpに入っている、秘密鍵というのはなんだろうと思っていたのです。自分だけのキーをかませることで見破られにくくするんですね。

まとまったアプリケーションを自作すると、いろいろ勉強になります。
今度開発オフでお会いしたらご教授ください><