FRepの【変数】と【IF】の作り方をまとめました。
変数とは「値を入れておく箱」だそうです。
そんな事言われてもプログラム素人で数学知識ゼロの私は何が何だかワカリマセンでした。
そうしたら…
他の人が作った変数を真似してみたらいいよ
と教えて頂きました。本当にその通りでした!
わからないながらも、そっくりそのまま真似したら何とか動きました。
なので、とにかく真似して作ってみてください。
その後で自分でやってみたくなった時に、どうしてそうなるのかを考えてみたら良いと思います。
FRep変数のルール
一応、FRep変数での主な決まり事を載せておきます。
が、既にあるプログラムの変数をそっくり真似するのならば、それほど必要はありません。
もっと詳しく知りたい方は公式公式FRepサポート変数リファレンスをご覧ください。
変数とは
FRepの変数とは「箱の様に値の出し入れができるもの」です。
プログラム実行中に変数という入れ物に値をセットして、その値を同じプログラムの中で使うことが出来ます。プログラムが終了したら値は基本的にリセットされます。※Taskerへは変数の値が引き継がれる様です。
変数名
変数名には半角英数とアンダーバーが使えます。冒頭に数字は使用できません。
変数に名前を付けることによって、ひとつのプログラム内でいくつもの変数を扱うことが出来ます。
型
変数には【(空)】【数値=num】【矩形=rect】【文字列=str】の4つの型があります。
システム変数
@で始まる【システム変数】は最初から値が決まっています。
【@start:再生開始時刻】【@now:現在時刻】【@lastmatch:直近の画像認識位置】等
演算文
演算子による四則記号や、変数の特殊参照により特別な値も出せます。
【+-*/】【.astime】【.asdate】【toast】等
関数での変数の扱い
プログラムが終了したら値は基本的にリセットされますが、関数からメインプログラムへの値は引き継がれます。メインプログラムから関数へは変数の値は引き継がれません。
例えば次の様になります。
■メインプログラムで変数mainに「main=1」を設定→関数呼び出し先での変数mainは「」で値は(空)です。
■関数呼び出し先で変数childに「child=1」を設定→メインプログラムに戻った後での変数childは「1」です。
関数で設定した変数をメインプログラムでも使用する際には、手動入力になりますので注意深く設定しましょう。大文字小文字が違うだけでも別の変数として扱われる様です。同じ変数として値を引き継ぎたい場合には全く同じに入力します。
カウントとポップアップ
では、とにかく作ってみましょう!
「カウントしながらポップアップを表示して10になったら終了」というプログラムを作ってみます。
実際に動かすとこんな感じです。
※音量にご注意ください
下の方にポップアップが表示されて、数字が1つずつ増えていくのが見えます。
最後に「終了です!」という文字も確認できました。
プログラム作成
プログラム1
【記録の管理】-【プログラム作成】-【新規作成】します。
【条件・制御の設定】-【変数】を追加します。
変数の制御設定が表示されるので、タップして追加します。
初期設定である[var=num:0]になっています。
このまま使いたいので、何もせずに適用します。
[var=num:0]になりましたのでこのまま適用します。
これでプログラム1完成です。
プログラム4
実はプログラム4の変数は、2つの変数の演算文が隠れていました。
[var=num:var+1]を作ります。
この様な設定にします。
【変数名】緑枠の▼をタップすると、そのプログラム内で使用した変数名が出てきます。
var以外の新しい変数名にしたい場合は、緑太枠のvarをタップして文字を入力します。
今回はそのまま[var]を使います。
【型】橙枠をタップすると、型(数値・矩形・文字列)と特殊参照のポップアップと変数クリアが指定できます。
今回はそのまま[数値]を使います。
【引数1】紫枠▼をタップすると、そのプログラム内で使用した変数名と、システム変数の内容がプルダウンメニューになっています。指定すると0の位置に変数名がセットされます。
ここでは[var]をタップします。
【演算子】桃枠の+は初めは隠れていて黒い枠になっています。その黒い枠をタップすると演算子のプルダウンメニューになっています。型が数値になっているので四則記号等があります。型が文字列の場合はsub等になります。
ここでは[+]を指定します。
【引数2】青枠の▼をタップすると、そのプログラム内で使用した変数名と、システム変数の内容がプルダウンメニューになっています。指定すると0の位置に変数名がセットされます。
ここではプルダウンメニューは使わずに、[0]をタップして[1]に変更します。
【演算文】(黄色枠)が[var=num:var+1]になれば完成です。
適用をタップして戻ります。
[toast:var]を作ります。
【型】のプルダウンメニューから[ポップアップ通知]を指定します。
【引数1】のプルダウンメニューから[var]を指定します。
[toast:var]になったら適用をタップして戻ります。
2つの演算文
2つの演算文が指定できたらプログラム4は完成です。
適用をタップして戻ります。
プログラム8
【型】のプルダウンメニューから[ポップアップ通知]を指定します。
【引数1】ではプルダウンメニューを使わずに、「0」をタップして「終了です!」と入力します。
[toast:”終了です!”]という演算文が完成したら、適用をタップして戻ります。
ループと待機
プログラムを見て、該当箇所にループと待機を入れてください。
ループは[無限][回数指定のループ][1回だけの区間]が指定できます。
ここでは[無限]を指定しました。
プログラム5【IF】
【IF】は変数と組み合わせて、条件の成否によってプログラムを分岐します。
【条件・制御の設定】-【If文】を追加します。
If文の制御設定が表示されるので、タップして追加で条件を指定します。
【複合条件】緑枠をタップすると、2つ以上の条件がある場合にどうするのかを指定できます。条件が1つの場合はどれを選んでも結果は同じです。
今回は条件が1つ[var=10]だけなので、[And If]のままにします。
【値1】紫枠▼をタップすると、そのプログラム内で使用した変数名と、システム変数等がプルダウンメニューになっています。
ここでは[var]のままにします。
【比較演算子】桃枠の==をタップすると比較演算子のプルダウンメニューになっています。
ここでは[==]のままにします。
【値2】青枠の▼をタップすると、そのプログラム内で使用した変数名と、システム変数等がプルダウンメニューになっています。
ここではプルダウンメニューは使わずに、[0]をタップして[10]に変更します。
【条件文】(黄色枠)が[and:var==10]になれば完成です。
適用をタップして戻ります。
条件[and:var==10]が成功したとき[→7.待機]と失敗時[↓次へ]のプログラム分岐先を指定します。
適用をタップして戻ります。
プログラム完成
この様なプログラムが完成しました。実際に動かしてみて動けば成功です!
次は時間を制御する変数のプログラムを作ってみましょう。
プログラムの説明(解説)
一応解説もしておきますが、今後も出来ているプログラムの変数を真似するだけならば以下は読まなくても大丈夫です。
1.[変数]–[var=num:0]
[変数名var(変数variableの省略)]は[型がnum(数値)]で[値は0]という意味です。
プログラム4の四則計算をする前に[var=0]を宣言します。そうしないと[var]が(空)のままで、演算文が成り立たずに[+1]をしても値は(空)になってしまいます。
2.[ループ]無限–If文が動く証明として無限ループにしました。
3.[待機]1.0秒–待機を入れないと、プログラムがあっという間に終了してしまって見えません。
4.[変数]–[var=num:var+1][toast:var]
(1)[var=num:var+1]–変数varに[var+1]をします。つまり…
ループ1回目は[0+1]なので変数var=1になります。
ループ2回目は[1+1]なので変数var=2になります。
ループ3回目は[2+1]なので変数var=3になります。(以下略)
(2)[toast:var]–変数varをポップアップ表示します。つまり…
ループ1回目は変数var=1なので[1.0](小数点第一位まで)を表示します。
ループ2回目は変数var=2なので[2.0]を表示します。
ループ3回目は変数var=3なので[3.0]を表示します。(以下略)
5.[If]–[and:var==10]
[var=10]になるまで失敗時[↓次へ]でループを繰り返します。
[var=10]が成功したときは[→7.待機]に分岐してループから脱却します。
6.[ループ]無限
7.[待機]
8.[変数]–[toast:”終了です!”]
「終了です!」をポップアップ表示します。
内容を直接指定する場合は変数名は不要です。
以上です。
コメント
Frepの変数「var」を定義した後にタッチ操作の座標にvarを代入しても動作しません。タッチ操作の座標を変数にすることはできないのですか?
「タッチ操作の座標を変数にする」ことも可能ですよ。
座標指定時に▼から変数を指定すると[var.x]と[var.y]になりますが、varを数値として定義した場合は「.x.y」を手動で削除していますか?
座標指定では、変数は「矩形」が初期設定なので[var.x]と[var.y]になっています。
もし、var1=100 と定義した場合は(=数値なので)横軸縦軸それぞれに[var1][var2]だけで設定してみて下さい。
※数値ではなく、変数に矩形(lastmatch等)を定義した場合は[var.x][var.y]となります。
p.s.
頂いたコメントがスパム判定され、自動的に除外されておりました。
コメントの反映とお返事が遅れて申し訳ありませんでした。