ディクショナリ系のイテレートプロトコルのお勉強(Association)が理解できていない。。。
昨日のつづき。
実はいろいろ調べたけど、この辺よくわかってなかったり。。。
自由自在SqueakのP199〜P201参照。というかまんま。。。
まとめるというか、サンプルコードを記載のみ。
例によっていつものDBからデータを持ってきた後のデータで。。。
data := result rows collect:[:each | each dataKeyedByFieldName].
- KeysDo: (Keyを取り出してイテレート)
(data at: 1) keys do: [:each | Transcript cr; show: each]. "↑が" (data at: 1) keysDo: [:each | Transcript cr; show: each]. "こう書ける。"
- ValuesDo: (値を取り出してイテレート)
(data at: 1) values do: [:each | Transcript cr; show: each]. "↑が" (data at: 1) valuesDo: [:each | Transcript cr; show: each]. "こう書ける。"
- KeysAndValuesDo: (Keyと値の両方でイテレート)
(data at: 1) keysAndValuesDo: [:key :value | Transcript cr; show: key. Transcript space; show: value].
- associationDo: (キーと値のペアーのイテレート)
Associationとはキーと値のペアのこと。(これがわかっていない。Dictionaryとの使い分けってどうするんだろう?)
イテレートブロック内の中で要素をAssociationとして参照できる。(???)
keyでキーが、valueでで値が取り出せる。
(1 -> 'one'
)でAssociationが作れる。(->メッセージで作成)
(data at: 1) associations do: [:association | Transcript cr; show: association key]. (data at: 1) associations do: [:association | Transcript cr; show: association value]. "↑が" (data at: 1) associationsDo: [:association | Transcript cr; show: association key]. (data at: 1) associationsDo: [:association | Transcript cr; show: association value]. "こう書ける。"
何がわからないかというと、文だけでみると、スペース入れてdo:しているのと違いが大文字になってスペースがなくなっただけ。
ということ。読みやすさが大事ということなのかな?使い分けというか、慣例がよくわからなかったです。。。はい。。。
あと、今データベースからかえってきた値はOrderedCollection(順序付き集合)の中にDictionary(連想配列)が入っているので、
クエリのORDER BY 等の条件は保持されると思ってるというか、保持されてるんですが、データの持ち方おかしいんでしょうか?
Associatonって何?使うといいことあるの??? (? ?)って状態です。。。