今回はショートカットアプリでルーチンを作ってみます.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のバージョン : v2.0
スポンサーリンク
ルーチンとは
ルーチンとはそのままの意味で「繰り返し」を行うプログラムです.
同じ作業を繰り返したい, あるいは時間やフラグを見て一つ以上の処理を行いたいときに使う常套手段の一つです.
例えばパソコンで使うマウスやキーボード, スマホでのタッチ操作は, それが行われたことを中でずっとチェックしています.
Windowsをはじめとする多くのアプリケーションはイベントドリブン, つまり何らかのイベントが起こってから然るべき処理を行い, プログラミングでもそれを想定して組むわけですが, マウスをクリックした, タッチパネルをタップした…というより根本的なイベントを認識するのはイベントドリブンではまず不可能で, 必ずどこかでそのフラグが立つのを待っているのです.
ショートカットアプリでにおけるルーチンの骨組み
ショートカットアプリでルーチンを行うには
- 次の場合(if文)
- ショートカットを実行
の2つのアクションを組み合わせます.
画像の場合, 「次の場合」を満たしたときに選択したショートカットを実行します.
「ショートカットを実行」では自分自身を選択することも可能のため, 条件を満たせばこの「次の場合」と「ショートカットを実行」の間にある(追加する)処理を繰り返すというわけです.
もちろん「その他の場合」に「ショートカットを実行」を置けば「次の場合」の条件を満たさなかった場合に処理を繰り返させることになります.
どちらにするべきかは目的に応じて判断しましょう.
あとはこの前後, 中身に色々と「肉付け」していけば良いです.
2つ例を挙げましょう.
例1:大小比較
「入力を要求」から任意の実数を入力し, それが「次の場合」で指定した数より大きいかどうかを判定します.
「次の場合」で
- 入力:より大きい
- 数字:9
とすれば「入力した値が9より大きければ条件を満たす」ことになりますね.
今回はその場合に再び自分自身を呼び出して繰り返させ, そうでない場合に終了させています.
「入力を要求」で9より大きい数を入れ続ける限り, アプリを終了させるなどの例外を除いていつまでも繰り返します.
今回は自分自身を呼び出しているため, 「ショートカットを実行」アクションの「実行中に表示」のスイッチはオフでも構いません(オフにすると処理がスムーズになる印象です).
例2:しきい値を用いた2次方程式の近似解当て
今度はショートカット内で決めた2次関数に任意の実数を「入力を要求」で入力し, 結果の絶対値が(これもやはりショートカット内で決めた)しきい値より
- 小さい:入力した実数が近似値であると判断し終了
- 小さくない:入力した実数が近似値とは言えないと判断し最初から繰り返し
というルーチンを作ってみます.
関数は今回 にしました, つまり
の近似解を求めるのが目的であり, 因みにこの解は
です.
まずしきい値を設定するために
- 数字
- 変数を設定
でしきい値を具体的に決め, かつ変数を定義・代入しておくことで後で使い回せるようにします(画像赤枠).
続いて「入力を要求」で変数 に代入する値を決定, 続けて に代入する操作を行います(画像青枠).
前回紹介した通り, ショートカットアプリでは複数の変数を同時に演算することができないため, それを行うために状況に応じて一方を一度「アクションの入力」に代入する必要があります.
数式を定義することもできないようですし, まぁここは仕方ないですね.
画像青枠で見える範囲では
- 「入力を要求」で に代入する値を指定
- まず2次の項を計算するために「変数を設定(変数名x)」を定義し先程の入力の値を代入
- 「計算」で2乗し, 変数 x^2 に代入
(※ゆえにこの時点で変数 x は不要ですが, 1次以下の計算で x 自身を再利用する必要があるため定義してあります) - 「変数を取得」で変数 x の値を「アクションの入力」へ上書き
となっています.
5. 前のアクションで「アクションの入力」に x の値が入っており, 「計算」で-1を足し算することで の値を計算.
6. 変数(変数名 x-1)に 5 の結果を代入(←執筆中に気づきましたがこれは不要でした)
7. 前のアクションで「アクションの入力」に x-1 の値が入っているので, 「計算」を用いて x^2 の値を足し算
…となっています.
これで「入力を要求」で入力した値 から の値が「アクションの入力」に代入されています.
最後に方程式 の実数解ということで, 得られた値 と の絶対値 と, はじめに設定したしきい値を評価します(青枠が終わった次の「計算」アクション).
これで準備が整ったので
- 次の場合
- ショートカットの実行
を組み合わせたルーチンを使います.
今回は上記最後で得られた絶対値と, 最初に設定したしきい値とを比較します.
入力である絶対値の値がしきい値より小さければ良いので, 「次の場合」は
- 入力:より小さい
- 数字:しきい値(変数)
となります.
ループさせる必要があるのは今回の場合「条件を満たさなかった場合」ですから「ショートカットを実行」は「その他の場合」に追加します.
後は好みに応じて通知を表示させるなどすれば完了です.
実行してみましょう.
しきい値に外れる値を入力した場合, 近似値とみなされず繰り返すかどうかを問われるようにしてあります(キャンセルボタンも表示してこの時点で終了する選択肢も).
しきい値に収まる値を入れれば, きちんと近似値に相当するとみなされました.
〆
PICライクな命令文しかないため, 数式の構築, 代入がとてもめんどくさいですね.
今回はシンプルなルーチンでしたが, 「ショートカットを実行」で他のショートカットを呼び出せば今度はサブルーチンとして働かせることも可能になります.
なので関数については別のショートカットに作っておき, サブルーチンで呼び出す方が一つ一つのフロー全体がスッキリして見やすくなります.
この辺は他のプログラミングと変わらないですね.