[php]needle in a haystack
プログラミングをやっていると、慣習的に用いる変数名、引数名と言った物があります。例えばfor文の変数はi、j、kとか。たまに知らない慣習もあります。今回調べたのは「haystack」と「needle」。文字列検索系の関数の引数名としてよく使われています。例えば下記のstrposやらstrstrやら。
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )
この習慣はphpだけのものではなくて、C言語から来ています。
char *strstr(const char *haystack, const char *needle);
で、実際のところ、なんでhaystackとneedleなのかというところですが、恥ずかしながら、私はhaystackという英単語を知りませんでした。haystackは「干し草」という意味のようです。needleはもちろん「針」ですね。
英語がわかる人には常識なのかもしれませんが、英語には、haystackとneedleという単語を用いた慣用句があるんです。
- needle in a haystack: 見つけることが不可能なもの、捜しても見つかりそうにないもの、無駄骨
- find a needle in a haystack: 干し草の山の中の針を見つける、見つかる望みのないものを見つける
- look for a needle in a haystack: 干し草の山の中にある1本の針を探す、無駄骨を折る
だいたい同じような意味で用いられます。
C言語が定義された頃は、文字列検索関数が対象文字列(haystack)から目的の文字列(needle)を見つけ出す様は、干し草の山の中から針を見つけるくらいに大変なことだった、ということでしょうか?(適当に考えていますが、そういう意味としかとれないですよね)
プログラミングの世界にもうんちく話ってありますよね。
他にもこういった慣習をご存知の方はコメントに書いてください!