ショートカットの基本アクションの解説がまだまだなので続きです.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のバージョン : v4.0.1
スポンサーリンク
「各項目を繰り返す」とは
このアクションではショートカット内の「リスト」に該当する出力を入力とし, その項目ごとに中身の処理を1回実行します.
リストの項目数が1なら1回、2なら2回…ですね.
パッと思ったのはswitch文ですが, あちらは整数値ごとに処理を書き分けられる点においてこの「各項目を繰り返す」は異なります.
こちらは処理部が一箇所しかないため, そのような処理をするには以降の使用例にもありますが例えばif文を使います.
逆に整数値しか扱えないswitch文ですが, 「各項目を繰り返す」は項目数のみが条件であり, 整数値でなくとも使用できます, というより数でなくとも使えます.
特殊変数
「各項目を繰り返す」では追加後に使用できる変数が追加されます.
ひとつは「繰り返しインデックス」と言い, リストの対象項目の番号を返します.
もうひとつは「繰り返し項目」と言い, こちらは対象項目自身を返します.
使用可能であれば検索候補, あるいは「変数」から選べるようになっています.
switch文っぽく使う場合はこの「繰り返しインデックス」を使うか, 「繰り返し項目」に何らかの条件付けを行うか…が定石でしょうか.
使用例
ここからは簡単な例を挙げてアクションの特徴を見ていきます.
①足し算
「各項目を繰り返す」ではリストを入力として実行しますから, 対象項目を足し算していくことが可能です.
予め初期値0の変数を与えておき, 「リスト」アクションに足し算したい数を並べておきます.
「各項目を繰り返す」の「項目」の部分を先程のリストに設定し, 「各項目を繰り返す」内で最初の変数を使って「繰り返し項目」を足し合わせていく簡単な内容です.
実際に実行して結果が正しいことを確かめます.
もしこのフローにおける「各項目を繰り返す」の「項目」を「繰り返しインデックス」に変更すれば, リストの内容に関係なくリストの番号自体を加算することになるため, 1+2+3=6が帰ってくることになります.
②シンプルなフィルター
次も足し算はしますが, その前に前述したようなフィルターをつけることにします.
まず先程と同じように足し算用の初期値0の変数を置きます.
続いてリストですが, 先程は「リスト」アクションを用いましたが結果がリスト形式であれば画像のように
- 「テキスト」アクションで改行したリスト
- 「テキストを分割」アクションで改行で分割
を用いることでリストと同じ扱いになります.
場合によってはこちらが使いやすいこともあるでしょう.
続いて「各項目を繰り返す」の中身です.
今回は「5の倍数である数だけ加算する」ことにします.
そのためにまず「計算」アクションで
- 「数字」…繰り返し項目
- 「演算」…係数
- オペランド…5
とします.
係数というのは余りの計算のことですね(こんな表現聞いたことありませんが).
ようは「数字」を5で割った余りを計算します.
結果が0であれば, 先程と同様に最初に定義した変数に加算します.
今回はリストとして1,3,5,12,20を挙げ, このうち5の倍数は5と20, これを足すと25なので合っていますね.
③ラベル付きフィルター
シンプルなリストだと項目があるのみです.
そこにラベルや属性を付けたい場合はこのままでは使えません, なので辞書アクションを利用します.
前回同様に「テキスト」アクションを使います(もちろん辞書アクションでもいいです).
辞書の記述はJSONがデフォルトですが, 先日紹介した通りショートカットアプリでは
キー=値
のようにキーと値を半角イコールで結ぶことで辞書1つ分の扱いとなります.
複数ある場合はさらに半角の&を間に挟みます.
使い勝手を考えると「テキスト」アクションに記述する元データは
キー1=値1
キー2=値2
・・・
と書いた方が楽ですから, これを前提に辞書にしていきます.
今回は「7科目の点数で80点以上のものをリストアップ」というショートカットを作ってみます(何の意味があるのかさっぱりですが).
まず前述の決まりに従って元データを記述した「テキスト」アクションを置きます.
このまま辞書にするには改行が邪魔であり, かつ&を間に挟む必要があるのでこれを両立するために「テキストを置き換え」アクションで改行である\nを&に置き換えます.
(表示を隠したまま画像化してしまいましたが「テキストを置き換え」の「正規表現」をオンにしてください)
これでショートカットにおける辞書構文となったので「入力から辞書を取得」アクションで辞書化します(画像ではわかりやすく"dict"という変数で置いています).
辞書にしたことでその辞書のキーと値をすべてリストとして取得することができます.
「辞書の値を取得」で「すべてのキー」と「すべての値」を予め取得しておきます(画像では前者を"key", 後者を"value"の変数で置いています, 使用例に合わせるとkeyが科目のリスト, valueは点数のリストですね).
準備が整ったので「各項目を繰り返す」を追加します, 「項目」については今回は点数の方を見るのでvalueを使用します, 目的によっては今回で言うkeyの可能性もあります.
「各項目を繰り返す」内でif文を追加し, 「繰り返し項目」, つまり点数が80以上かどうかを判定します.
これが通るということはその「繰り返し項目」が80以上ということですね.
そこで科目であるkeyの「繰り返しインデックス」番目を取得します.
これで条件を満たす科目(上文)とその点数(2文上)が得られたので「テキスト」アクションで好みの文体で整え, 「変数に追加」を用いてリストとして積み上げます.
これを表示して結果が正しいことを確かめます.
〆
「メニューから選択」のようなアクションを考えるとswitch文と同じようなアクションがあってもいいと思うんですけどね.
プログラムあるあるですが, 目的なく使用例を考えるって結構難しいです, 実用的であるものを期待するなら尚更です.
実用的過ぎると他の応用に繋がりにくい, 汎用的すぎるとつまらない, 難しいです.