Experts.jp日本に、もっとエキスパートを。3.3で追加される「&」の新機能と@at-rootについて解説しました。今回は新しいデータタイプの「マップ」について解説します。マップは色々な使い道があると思いますし、使い方によってはかなり便利なものですので、ライブラリを作っている方などは特に覚えておくと良いと思います。マップとはマップは任意の名前と値のペアが集まったもので、名前をキーにして値を設定したり、取り出して使います。マップの書き方ですが、名前と値をコロン(:)で区切り、複数記述する場合はカンマ(,)で区切り、それらを丸括弧(())で囲みます。CSSのスタイルの書き方とちょっと似ていますね。value3;}マップの値には、マップも含めたすべてのタイプのデータを書くことができます。3.3よりも前までは、複雑なデータ構造を作るにはリストを使って頑張るしかありませんでした。マップを使えば、より分かりやすく書くことができますし、専用の関数もあるのでデータを扱いやすくなります。マップ用の関数マップ用の関数は5つあります。$key)map-get()map-get()は、指定したキーの値を取得する関数です。$key)次のようにして使います。key1);}これをコンパイルすると次のようになります。10px;}指定したキーがマップにない場合は、nullが返されます。map-get()を複数回使うことで、ネストされたマップから値を取得することができます。);}これをコンパイルすると次のようになります。red;}何回もmap-get()を書くのは正直面倒くさいですし、コードが読みづらいですね。map-merge()map-merge()は、2つのマップをマージする関数です。$map2)基本的には1つ目のマップの後に、2つ目のマップが追加されますが、同じキーがある場合は2つ目のマップの値で上書きされます。$map2);この場合、$new-mapの値は次のようになっています。value500)key1は両方のマップにあるので、2つ目のマップの$map2の値が使われています。key3の後に$map2にあったkey4とkey5が追加されています。このような特徴を利用して、ライブラリ内の設定用マップなどを自身のプロジェクトに合わせて上書きするといったこともできます。map-keys()map-keys()は、1つのマップ内のすべてのキーをカンマ区切りのリストで返す関数です。引数にはマップを指定map-keys($map)それではサンプルを見てみましょう。map-keys($map);}これをコンパイルすると次のようになります。key3;}ネストされたマップ内のキーを取得するには、map-get()を併用する必要があります。);}これをコンパイルすると次のようになります。nested-key2;}map-values()map-values()は、1つのマップ内のすべての値をカンマ区切りのリストで返す関数です。引数にはマップを指定map-values($map)使い方はmap-keys()と同じです。値にマップが含まれるため、実際にはエラーが出ます}map-has-key()map-has-key()は、1つのマップ内に特定のキーがあるかどうか調べる関数です。$key)戻り値はtrueかfalseです。リスト用の関数マップにはリスト用の関数も使うことができます。nth()length()zip()join()append()index()使い方とコンパイル結果を簡単にまとめると次のようになります。3.3から複数の変数を指定できるようになったので、マップのキーと値を別々の変数に入れて利用することができます。$bg-color;}}}これをコンパイルすると次のようになります。blue;}これまでと比べて、断然扱いやすいものになっていると思います。可変長キーワード引数マップを可変長引数のような感じでミックスインや関数に渡すことができます。可変長引数と可変長キーワード引数のそれぞれの場合を、次のミックスインを使って解説します。$color;}まずは可変長引数を使った場合です。#ccc」が$borderに、2つ目の「#fff」が$bgColorに、そして3つ目の「#333」が$colorに渡されます。これをコンパイルすると次のようになります。#333333;}次にマップを使った可変長キーワード引数の場合です。キーはミックスインの引数名に合わせる。キーはミックスインの引数名に合わせる。box($config...);}コンパイル結果は可変長引数の場合と同じになります。マップを使った場合は、キーと同名のミックスインの引数に値が渡されます。キー「color」はミックスインの引数の「$color」に対応するということです。そのため、マップ内のキーをミックスインの引数の順番に合わせて記述する必要はありません。ちなみに、可変長引数と併用することもできますが、その場合は可変長キーワード引数を可変長引数の後に記述する必要があります。3.3から追加されたkeywords()関数を使って、可変長キーワード引数をマップに変換する関数をつくることができるようです。マップのような構造のリストリストで2つの値をペアにして、マップのようにして使っていた場合、そのリストに対してマップ用の関数を使うことができます。trueただし、将来的にはこのようなリストに対してマップ用の関数を使うことはできなくなるようで、コンパイル時には警告が出されます。3.3が使えるようになったら、マップに切り替えていった方がが良さそうです。おわりに新しいデータタイプ「マップ」を解説しました。