プログラミングをしない人にPHPを少しわかりやすくする関数 “not” #phpadvent2012

php-med-trans

PHP でこの関数を定義して書いておけば、
後からプログラミングになじみのない人が見たときにも
少しだけわかりやすくなるんじゃないか、
というお話です。

「じゃない方」の処理

WordPress に is_home() という関数がありますね。
いま表示しようとしているのがメインページなら true を、
そうでなければ false を返します。

なのでメインページにだけ表示したいものがあるときは
こんなふうに書けばいいですね。

if ( is_home() ) {
	//メインページだけやりたい処理ですこんにちは!';
}

逆に、メインページじゃないときだけ表示したければ
まあこんな感じでいいわけですけども

if ( ! is_home() ) {
	//メインじゃないページの処理ですお元気ですか!';
}

プログラミングをしない人にとって
この ! はなかなかの曲者みたいです。

! は悩ましい

複数のコンピュータ言語で ! は否定を表すので
何かひとつでも経験があればそれの意味はわかると思います。

でも知らなかったらびっくりマークが何のためにあるのかわからないし
「反対の意味」にしたいときにどうしたらいいのかわからない。

なのでこういうことだって起きます。

WordPressでホーム(トップページ)とそれ以外で表示を変えるとき | イシダウェブ工房

「is_home()」ってタグがあるんだったら、ありもしない「is_not_home()」ってのもどこかに存在するんじゃないかなーって、って考えてしまって、延々と探してしまった

そういえばあってもいいよね、と思って一応 is_not_home を作ってはみましたけど

それぞれの関数についてこんなものを用意するわけにもいかない。

そこで関数 not

意外なことに “not” は PHP の予約語じゃなかった。
なので not という名前の関数が作れます。

function not($value) {
	return !$value;
}

これで ! の代わりに not() が使えるようになります。

何がうれしいのか

例えば PHP では

その変数または配列の要素ないしはオブジェクトのプロパティがセットされていて、かつ false に相当する値ではない

(要するに「空ではない」)ことを判別するのに !empty() を使うことがよくありますけど

$hoge = 'ほげほげ';
if (!empty($hoge)) { 
    echo '$hoge は空じゃないみたい'; 
}

先ほどのように、知らなかったらこの ! が何だかわからない。

ところが not を使えば

if (not(empty($hoge))) { 
    echo '$hoge は空じゃないみたい'; 
}

not empty っていうんだから空じゃないって意味よね、と
少しだけわかりやすくなる気がしませんか。

「わからないなら書くな」?

! が否定を表すというのはかなり基本的なことなので
もうそれがわからないならコードを触らない方がいい
という意見もあるかもしれません。

でも、できることなら自分で書きたいじゃないですか。
別に受発注管理システムをまるっと作ろうっていう話じゃないんです。
テンプレートを見て、少し処理を変えたいっていうだけなんです。

なのでプログラミングの心得のない人が後で修正することを前提としたテンプレートなどでは
最初に書く人が ! じゃなくて not にしておいてあげれば
もしかすると少しだけ楽になるかもしれないね、という提案です。

気をつけたいこと

not はもともと存在しない俺関数なので、
詳しくない人がこれを見て
「ああ not でいいんだ」と信じちゃったら後で困るかもしれません。

また知識のある人が見たら
「なんだこの not とかいう謎の関数は」と一瞬悩むかもしれないし
カッコが増えて余計複雑に感じる人もいるかもしれないし
うっかり閉じ忘れておこられるかもしれない。

もちろんみんなが ! を覚えてくれたらそれで解決なのであって、
書きたかったから書いただけなのであまり本気で取り組まない方がいいです。

関連エントリ

  • このエントリーをはてなブックマークに追加