Groovy物語 Twitter

2011-09-02

Story #13 ツキのマップ

「というわけで、お前にマップの使い方を教えてやってくれって、おじさんから頼まれたんで今日は俺がじっくり教えてやろう!」
「ねぇ、あんたっていつも思うんだけど会話の仕方を知らないの?主語がないから何がなんだかわからないのよ」
「はぁ?Groovyの話に決まってんだろ?ったく…これだから引き受けたくなかったんだよな」
「うるさいなぁ、何なのそれ!なんで私があんたなんかにイヤイヤ教えてもらわなきゃならないわけ??」
「お前はGroovyのこと、もっといっぱい覚えたくないのかよ」
「え…?そりゃぁ覚えたいけど」
「じゃあ、つべこべ言わずに…い、一緒にマップ…覚えてみない?」
「へ…?な…なんなのよ!調子狂うなぁ…わかったわよ、一緒にやってあげてもいいわよ」
「…よーし!それじゃあまずは空マップからだ」

[:]

「これが空マップだ、空って言うくらいだから、何も入ってないマップだな」
「ちょっと待ってよ、空とかそういう話の前にマップってなんなのよ?ダンジョンのマップとか?」
「(はぁ?これだから…)ええと…そうか。まずはマップっていうのが何かってところから、か」
「い・や・な・ら・教えてくれなくても、いいのよ?」
「まぁ、そう怒るなよぉ…」
「…!」
「よ、よし、じゃあ続きやるぞ」
「まずはマップっていうのは何かってところだけど、お前リストは知ってるんだよな?」
「ええ、知ってるわよ」
「よしよし、じゃあリストとの違いで説明するかな。例えばこんな“ツキ”のリストがあったとする」

def tsukiList  = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']

「喧嘩売ってんの?」
「(スルー)さて、例えば '3月' っていう文字列アクセスしたい場合、お前ならどうする?3月、つまり美月だぞ」
「(ムカーっ!)ううーーー!そんなの簡単じゃん!3番目なんだから」

assert tsukiList[2] == '3月'

「でしょ?」
「ほほー、ゼロオリジンにひっかからなかったな」
「あったりまえじゃん!からかわないでよ」
「へへーお許しを、ミツキ様(笑)」
「で!なんなのよそれが」
「まてまて、じゃあ次の場合は?」

def tsukiList2 = ['6月', '10月', '5月', '12月', '9月', '11月', '3月', '1月', '7月', '8月', '4月', '2月']

「ええと…、7番目だから…」

assert tsukiList2[6] == '3月'

「どうよ」
「正解!」
「ただ並び替えたじゃん!これがなんなのよ?」
「お前ってほんとにせっかちだなぁ…それじゃあお待ちかねのマップに行くぞ。上のtsukiListをマップにするとこんな感じになる」

def tsukiMap = [
  jan: '1月',
  feb: '2月',
  mar: '3月',
  apr: '4月',
  may: '5月',
  jun: '6月',
  jul: '7月',
  aug: '8月',
  sep: '9月',
  oct: '10月',
  nov: '11月',
  dec: '12月'
]

「長くなるのね」
「違うそこじゃないって、見にくいから適度に改行を入れてやっただけだよ… 注目するのは各月の前の“英語:”の部分だ」
「この英語って各月の英語の頭文字よね?」
「そうだ、それで、美月にアクセスするには、こう書くんだ」

assert tsukiMap.mar == '3月'

「へぇ〜!ドットと英語でアクセスできるんだ」
「英語って言ってるところはキー(key)、各月の方がバリュー(value)って言い方をするのが一般的だ。だから、この例だと 'mar' って文字列がキーで、'3月' がバリューになるってわけだな」
「ふーん、ところで、キーっていうのは文字列なのに '' で囲まなくていいの?」
「ああっ、文字列の場合省略できるんだよ、別に 'mar' って書いても意味は同じだな」
「意味は同じだけど、簡単な書き方…ってことはシンタクスシュガーね!」
「お、その単語も知ってるのか、おじさんお前に色々教え込んでるんだなぁ」
「ええ!マスターはやさしいもん!」
「はいはい、お前年上がそんなに好きなのか」
「そ、そういうんじゃないもん!」
「まぁどうでもいいや、それでな、マップにしとくとさっきの順番がぐちゃぐちゃになったリストみたいな場合でも結果が変わらないんだよ。こんな感じでな」

def tsukiMap2 = [
  jun: '6月',
  oct: '10月',
  may: '5月',
  dec: '12月',
  sep: '9月',
  nov: '11月',
  mar: '3月',
  jan: '1月',
  jul: '7月',
  aug: '8月',
  apr: '4月',
  feb: '2月'
]
assert tsukiMap2.mar == '3月'

「それから、キーとバリューの組み合わせが合ってれば全く同じマップとみなされるから」

assert tsukiMap == tsukiMap2

「も成立するんだぞ。順番は関係ないんだ」
「へぇ〜、そうなんだぁ。なるほどなるほどねぇ、面白い!」
「おっとヤバイ、そろそろ休み時間終わっちまうな。とにかくマップっていうのはキーを使ってアクセスできる便利なものって覚えておけばいいんだ、分かったか?」
「分かったわよ!なんで上から目線なのよ」
「ハハハ、よーし、それじゃあ続きはまた放課後な」
「またね」

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/fumokmm+tale-of-groovy/20110902/1314968258