海未「それではキーワードリストですが・・・言葉で説明するのは、少しややこしいです。ですから、まずはコードを見てみましょう」
[{:umi, 2}, {:rin, 1}, {:nozomi, 3}]
希「これって・・・タプルのリストやん?」
海未「そうです。最初の要素がアトムになっているタプルのリスト、というのが定義なのですが、いずれも既知の概念ですからコードを見た方が早いかと」
凜「特別な書き方があるわけじゃないの?」
海未「省略記法ならあります」
[umi: 2, rin: 1, nozomi: 3]
海未「凜なら分かりますね?」
凜「あ~っ!この前のマップといっしょにゃ!」
海未「キーと値のペアを管理するという意味では、キーワードリストはマップと似ているんです」
希「なんか見えてきたで。リストだから、順序があるんやろ?」
海未「そうです。省略記法を使っても、あくまでタプルのリストですから。リストに対して行える操作はキーワードリストにも使えます。例えば・・・」
[umi: 2, rin: 1, nozomi: 3] ++ [nico: 3, maki: 1, eli: 3] # => [umi: 2, rin: 1, nozomi: 3, nico: 3, maki: 1, eli: 3]
length [umi: 2, rin: 1, nozomi: 3] # => 3
凜「おー、まんまリストにゃ」
海未「マップのような要素アクセスもできます」
[umi: 2, rin: 1, nozomi: 3][:rin] # => 1
海未「ただし、性能特性はリストと同じですから、マップとの使い分けはちゃんと考えないといけませんね」
希「ランダムアクセス向きではないんやね」
海未「マップに使える関数、リストに使える関数、どちらもキーワードリストに使えます」
Dict.size [umi: 2, rin: 1, nozomi: 3] # => 3
Dict.keys [umi: 2, rin: 1, nozomi: 3] # => [:umi, :rin, :nozomi]
List.reverse [umi: 2, rin: 1, nozomi: 3] # => [nozomi: 3, rin: 1, umi: 2]
List.last [umi: 2, rin: 1, nozomi: 3] # => {:nozomi, 3}
凜「length
でもsize
でも要素数取れるとかもうなんでもありにゃ」
希「性能だけ気を付ければ、便利に使えそうやね」
海未「これで、主なデータ型については一通り終わりましたね」
希「boolean」
海未「え?」
希「booleanを忘れてる気がしてきたん」
海未「・・・では、それを次回に」
希「せやな。じゃ、次回は論理演算と比較演算にしよか」