はじめに
IRIS, Cacheには、%List型でデータを格納する方法があります。
# 他言語で言うところの配列に相当します。
%List型を作るには、主に$listBuildを使用します。
set list = $listBuild("日本", "平安時代", "藤原道長", "紫式部")
他にも、$listを使用しても作成が可能です。
変数が「list」なのでちょっと見難いですが、変数「list」に配列の位置を指定して格納していきます。
k list
set $list(list, 1) = "日本"
set $list(list, 2) = "平安時代"
set $list(list, 3) = "藤原道長"
set $list(list, 4) = "紫式部"
w $listToString(list) // -> 日本,平安時代,藤原道長,紫式部
また、2番目の引数に「*」を入れることで「配列の最後」を示す事を利用して、「* + 1」を行う事で、配列の位置を指定しなくても順番に格納していくことが可能です。
k list
set $list(list, * + 1) = "日本"
set $list(list, * + 1) = "平安時代"
set $list(list, * + 1) = "藤原道長"
set $list(list, * + 1) = "紫式部"
w $listToString(list) // -> 日本,平安時代,藤原道長,紫式部
こっちの方が汎用性があるので好みですね。
明確な位置指定がない場合は、「* + 1」の記法が良いと思います。
リストの取得方法
一般的な取得方法(IRIS/Cache)
この%List型データから特定位置の値を取得する方法は、Cacheでは主に$listGet or $listが使われていました($listNextでも取得は可能です)。
set list = $listBuild("日本", "平安時代", "藤原道長", "紫式部")
// ここからリストの取得
set country = $listGet(list, 1) // 日本
set era = $listGet(list, 2) // 平安時代
set name = $listGet(list, 4) // 紫式部
// 出力
w !,country // -> 日本
w !,era // -> 平安時代
w !,name // -> 紫式部
このように、変数に対し$listGetのN番目を指定して格納していました。
→ リストの数が多い場合、結構な行数を消費して全体が見にくくなる要因になったりします。
また、改修によって当初の位置から、配列の位置変更が発生した場合は、ちょっとした改修になってしまいます。
※$listNext()については、下記記事を参照して下さい。
IRISで追加された新取得方法
IRISになり、$listGetがとてもオシャレかつスタイリッシュに取得できるようになりました。
set list = $listBuild("日本", "平安時代", "藤原道長", "紫式部")
set $listGet(country, era, , name) = list
// 出力
w !,country // -> 日本
w !,era // -> 平安時代
w !,name // -> 紫式部
オシャレ過ぎる・・・
まるで、javascriptの分割代入のようですよね!
今までList位置毎に取得していたのがスッキリ一行で記載できるようになりました。
%DynamicObjectでも期待しちゃうよね・・・
もしやこれは・・・、%DynamicObjectも分割代入で取得できるようになったんじゃ・・・
※%DynamicObjectは、json風の記法になります。
set data = {"country":"日本", "era":"平安時代", "name":"紫式部"}
set { country, era } = data
set ary = ["日本", "平安時代", "紫式部" ]
set [ country, era ] = ary
あ、うん・・・<SYNTAX>エラーが発生したかぁ・・・
%DynamicObject系は、まだまだjavascriptのように分割代入出来ないようです。
こちらも併せて機能アップして使いやすくして欲しいですね~。
今後のIRISバージョンアップで期待していますよ!!
おわりに
CacheやIRISのバージョンアップ時に、時折既存のオブジェクトスクリプトに新機能が追加されたりします。
バージョンアップ時には、リリースノートをチェックしておきたいですね。