コミッタ:バグトラックで一悶着・・・

バグトラックに報告したバグを仕様でしょうと言われて、報告者(と思しき人)が仕様がないなんて言わないでくれ、と少々お怒りの様子^^; でも、仕様がないじゃない、仕様なんだから

でもこれは回避できたはずなんです。と言うのはこの U D 、報告されたチケットを見て「あぁ、仕様通りだな」でスルーしてしまったのです。そこでちゃんと解説してあげればよかったんでしょうが、誰か指摘するだろうと他力本願でスルーしてしまったんです。これは失敗だった。ちゃんとそのときにハッシュの解説でも書けばよかったんだから。そんなわけで今から軽く書きます。THE 仕様書 備忘録。

正直、なでしこにマトモな仕様書が存在していない以上、仕様自体分かりにくいのだから、この報告者さんには怒る権利があると思う。でまたこの一件でコミッタとしては、仕様書を書かないと、と思うわけですが・・・^^;全然やってません。口だけですねora

仕様書備忘録:ハッシュの仕様

ハッシュというデータ形式では、キーからのアクセスが重視されていて、個々のデータの並び順はさほど問題にされていません。また、配列と文字列が互いに暗黙に型変換されるように、ハッシュと文字列も互いに暗黙に型変換されます。これで次のコードで起こる現象を説明できます。

ハッシュ変数のテスト
テストとはハッシュ
テスト@「1.国語」=70
テスト@「2.数学」=100
テストを表示
 

このコードを実行すると、2.数学=100
1.国語=70
と表示されます。なぜ1を先に作ったのに、2が上に来て1は下に来ているのか。その理由は、ハッシュ変数にとって「」が先か「」が先かという順序は重要でなく表示するために暗黙の型変換が行われた際に、目で見て順序が明らかな型である文字列へと変換されるからです。

慣れないと分かりにくいですが、ハッシュはいわば順序と無縁なデータ形式で、一方で文字列配列は順序を持ったデータです。それらの間で頻繁に暗黙の型変換が相互に行われるので、あたかもハッシュにだって順序があると錯覚してしまうわけですが、実際にはそうではなく、ハッシュに順序は無いわけです。