以前紹介しましたがもっと良い方法で行います.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のバージョン : v4.0.1
スポンサーリンク
前回のやり方
以前は関数に関わる「引数」や「戻り値」を, 自分で決めた区切り文字を使って「テキスト」アクションに貼り, それを入力として「ショートカットを実行」アクションに渡していました.
その後関数側で改めて「テキスト」アクションに貼り付け, これを「テキストを分割」アクションで指定の区切りで分割し, 更に「リストから項目を取得」アクションで欲しい値を取り出す…という手法でした.
これでも問題ないと言えば問題ないのですが, アイデア自体がシリアル通信的ライクで見た目は必ずしも良いものでなく, また汎用性に欠けるものでした.
「辞書」アクションを使う
今回は「テキスト」アクションに直貼りするのでなく, 「辞書」アクションを使います.
「辞書」アクションは自分自身を出力とすることができ, また辞書と認識できる構文であればそれを入力として改めて辞書にすることが可能なのでこの仕組みを利用します.
基本構文
では簡単な例を挙げて仕組みを見てみます.
メイン側
まずはメイン側のショートカットです.
今回は2つの値と入力させ, その和と積を関数側で計算, その結果を更に足し合わせるというショートカットと作ってみます.
まず「入力を要求」アクションで2つの値を入力させます.
実際には(必要であれば)色んな処理をこの後行うこととなります.
続いて関数用のショートカットを呼び出します.
まず「辞書」アクションを追加し, 関数用のショートカットの入力としたい値を放り込んでいきます.
このとき
- 今回はシンプルな構成なのでそのまま辞書に入れていますが関数に渡す値はまったく同じモノ, 同じ値である必要がないのは言うまでもありません
- 辞書の「キー」は関数側で値を取り出すのに必要なだけなのでメイン側と同じである必要はありません
に注意します.
そしてこの「辞書」アクションを入力として「ショートカットを実行」アクションを配置します.
今回の使い方を考えると関数側のショートカットを実行時に表示するメリットはありません, なので「実行時に表示」はオフにしておきます.
「ショートカットを実行」アクションが処理されると, 関数側のショートカットの最後の出力がメイン側の「ショートカットの結果」として出力されます.
この後紹介しますが今回は関数側も辞書として最後に出力する予定なので「ショートカットを実行」アクションの後に「入力から辞書を取得」アクションで「ショートカットの結果」である辞書を改めてメイン側の辞書として再構成します.
あとは取り込んだ辞書の数に応じて
- 「辞書の値を取得」
- 「変数を設定」
の組み合わせで辞書から値を拾っていきます.
あとは関数側のショートカットから取り出した値を使って必要な処理を行います.
今回の例だと和と積を足し合わせる処理も関数側で行っても良かったですがあえてメイン側で行っています.
関数側で行う場合は最後の出力は1個分ということですね.
関数側
続いて関数側のショートカットです.
まず「テキスト」アクションで「ショートカットの入力」としてメイン側の「ショートカットを実行」で渡した辞書に相当する入力を貼り付けます.
これを改めて辞書とするために「入力から辞書を取得」を追加することでメイン側から渡されたデータが関数側で再び辞書となります.
あとは先程と同じく「辞書の値を取得」→「変数を設定」で個々の値を取り出します.
あとは目的に応じて好きな処理を行います.
今回は和と積を求め, 改めて別の変数で置きます.
メイン側でも説明しましたが戻り値として「辞書」アクションを追加し, メイン側に出力したい値を追加していきます.
戻り値としての辞書は最後に置かないとこのショートカットにおける「最後の出力」にならないため, 厳守する必要があります.
これが辞書を使った基本的な使い方となります.
確認
最後に望んだ通りの結果になるか確認します.
画像の例だと(1+2)+(1×2)=3+2=5なので合っていますね.
〆
引数および戻り値として辞書アクションを使うことで, 行き来する値を簡単に追加, 修正できるようになります.
辞書アクションであれば入れ子にした複雑なデータも取り扱い易くするため尚更こっちを使った方が良さそうです.
前回も指摘した通り, ショートカットを関数として使うメリットは
- 全体が大きくなってしまった場合に見た目をスッキリさせる
- 「引数」だけ異なり, あとはまったく同じ操作を複数繰り返す, まさに「関数な処理」を行う
などにあります.
前者もつまるところプログラミングでは常套手段ですね, ひとかたまりの処理は基本関数として用意し, メインの処理では必要に応じて関数を呼びます…というやり方です.
さもないとダラダラと長ったらしい文章になって見づらくなってしまいますし, 逆にそうすることでデバッグしやすくなります.
ショートカットアプリの場合はそれに加えて目的次第で他のショートカットに転用することも可能です.