PHP の array_shift から考える、実体と名称の関係について

php-logo

PHP に array_shift という関数がありますね。
配列の最初の値を取り出す関数。

PHP: array_shift – Manual

array_shift() は、array の最初の値を取り出して返します。配列 array は、要素一つ分だけ短くなり、全ての要素は前にずれます。

それに対して、配列の最後の値を取り出すのが array_pop.

PHP: array_pop – Manual

array_pop() は配列 array の最後の値を取り出して返します。配列 array は、要素一つ分短くなります。

また、配列の先頭に値を加えるのは array_unshift
配列の最後に加えるのが array_push ですね。

ちょっとややこしいので整理

こんな具合かな。

  取り出す 加える
配列の最初 array_shift array_unshift
配列の最後 array_pop array_push

なぜこういう名前になっているか

以下、何か違ったら指摘してください。

array_shiftarray_unshift の場合

array_shift()array_unshift() って、
外から見たら「先頭の要素を取り出す(追加する)」という動作だけど
内部では先頭の要素を引いたり足したりすることで
配列のポインタがいっこずつシフトしていくから
その処理のことを指してこういう名前になってるんじゃないかな。

けど、実際に使う際により強く意識されるのは
配列がシフトするということより
要素を取り出したり追加したりすることの方なので
この名前に何となく違和感を覚えてしまう。

array_poparray_push の場合

逆の操作をする array_poparray_push
元々の配列のポインタには変化がなくて
末尾の要素を足したり引いたりするだけだから
pop したり push したりという処理の方が関数名になってる。

違和感の根底にあるもの

どうもこの、array_shift / array_unshift チームの名前と
array_pop / array_push チームの名前の関係がしっくりこない。

違和感の根底にあるのは、
「先頭の要素を取り出す」のと
「末尾の要素を取り出す」という
感覚としては同系列の操作の間で
その名前の指す事象が違っていることなんじゃないかと思う。

たとえば代わりに

せめてエイリアスとして
array_getarray_put でもあれば
このへんの感覚は変わっていたのかもしれない。

だれか提案してみてください。

イベントの名前も同じかも

実は来る6月1日に開催されるPHP カンファレンス関西のスタッフで
リレー記事を書こうっていうことになってて
この記事はそれにあたるものなので無理矢理つなげた感があるかもしれませんけれども、
まあそれはともかく

イベントの名称というのも
「まあそりゃそうなんだけど、でも実質こうでしょ」
という部分で、名前と実体が異なっているために
少し違った印象を与えてしまうということがあるような気がする。

例えば PHP カンファレンスは
確かに PHP のカンファレンスだから
「PHP カンファレンス」という名前。正しい。

そのためにどうもこう「なにかむつかしいことがおこなわれる」
という印象がついてしまってるんじゃないかという気もするんだけど、
実際には「PHP さわったこともないです!」っていう人から
「俺が PHP だ!」という人まで
すべての人のためのイベントなので、
気軽に来たらいいと思うんだ。

参加のお申し込みはこちらから。

逆に、懇親会は本当に名前の通り「懇親会」です。
この機会に居合わせて顔を合わせた者どうしで
懇親を深めましょう!という場なので
懇親を深めましょう!

セッションで発表した人とも気軽にお話しができるいい機会なので
特に「その界隈に知り合いいないしなー」っていう人におすすめです。
お待ちしてます。ビール!

リレー記事なので

こちらから引き継いで

次はこちらにお渡しします。

よろしくー。

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