FileMakerでファイルを作るときに使う小ネタ・小技、よく使うスクリプトなどがあります。今回は「変数名を計算で作る」です。
変数名を計算で作るて何それ?意味あんの?はい。多分。例えば変数名に今表示しているレイアウト名を含ませたいとか。
なるほど、で、変数の名前を計算で作ることなんて出来るん?「変数を名前で設定」なんてないけど。はいできます。
スクリプトステップで順を追っていきます。
変数名を計算式で作るの巻
変数の名前:まず変数「$変数名」を作成します。
作りたい変数名をここで作ります。変数名を名前で作りたいくらいだから計算式を含めるわけですね。例えば「”$$” & Get(レイアウト名) & “ウインドウサイズ” みたいな。変数の名前ですから「$」や「$$」がちゃんと付いていることがポイントです。
変数の値:次に変数「$値」を作成します。作りたい変数に入れたい値をここで作ります。
変数名を作る変数:もう一つ変数を作ります。こいつが「変数名と値のセット」を作ります。名前は何でもいいので、ここでは「$へんすうづくり」にしておきます。ここからややこしいですよ。
$変数名と$値を作りました。これを計算によって現実のものとするため $へんすうづくりの値にLet関数を使います。Let関数は変数を定義することができるからです。
Let ( 変数名 = 値 ; 計算)
基本はこんな構文です。変数=値を作ってそれを前提に最後「計算」します。変数を複数仕込んでいったりもできますが、今回は複数ではなく、変数=値 をひとつだけ使います。
○○ = △△ と前段に入れることで、変数○○ の値は△△ですよと宣言しています。
○○と書けばLet関数の中だけで通用する変数です。
$○○と書けば計算式の外でも変数としてセットされます。
$$○○ = △△ という式を前段に入れれば、グローバル変数としてセットされます。
ですので、次のようなLet関数を作ることで、さっきの変数名と値が本物になります。
Let ( $変数名 = “$値” ; “” )
最後の計算結果が “” なのは計算結果なんか必要ないからです。変数とその値がセットされればいいだけなので。
で、Let ( $変数名 = “$値” ; “” ) これ、「こういう形」の計算式が必要なんですが、このまま書くと駄目です。「こういう形」じゃなく「この式」として計算されてしまいますから。さっきせっかく作った$変数名が消え失せて「$変数名」になっちまいますね。
順序としてLet計算式内の変数名を書くべきところには「$変数名」ではなく、さっき作った実際の値(作りたい変数名)が書かれなければなりませんし、値を書くべきところにはさっき作った実際の値(作りたい変数名の値)が書かれなければなりません。
Let式の前に、値を当てはめたLet式の形をしたテキストとして作ってやる必要があるってことです。
こんな形になります。
"Let(" & $変数名 & "=" & Quote( $値 ) & "; " & Quote("") & ")"
ややこしいですね。$変数名と$値はさっき通り作った値が代入され、Let計算式は式風のテキストです。
こいつを、あらためて計算式として実際に計算させます。難関のひとつ、Evaluateを使います。テキストを計算式として認識させるやつです。
Evaluate ( "Let(" & $変数名 & "=" & Quote( $値 ) & "; " & Quote("") & ")" )
できました。これが$へんすうづくりの値です。値の結果は “” で、空だし意味ないのですが、その前段で変数をセットしています。すでに目的は達成しているんです。
スクリプトステップでちゃんと書くとこうなります。
変数を設定 [ $へんすうづくり ; 値: Evaluate ( "Let(" & $変数名 & "=" & Quote( $値 ) & "; " & Quote("") & ")" )]
使い回せる汎用的な「変数を名前で設定」
ということでまとめると手順は以下のとおり。
- $変数名 作りたい変数名を作る
- $値 作りたい変数の値を作る
- $へんすうづくりをコピペ
Let関数は複数の変数をセットできますから、上記まとめて1つの計算式内で済ませることもできます。
手順を踏むことでLet関数が難しいと思う人でも簡単に扱えます。スクリプトステップとしてちゃんと書くとこうですね。
- 変数を設定 [ $変数名 ; 値: 作りたい変数名 ]
- 変数を設定 [ $値 ; 値: 作りたい変数の値 ]
- 変数を設定 [ $へんすうづくり ; 値: Evaluate ( “Let(” & $変数名 & “=” & Quote( $値 ) & “; ” & Quote(“”) & “)” )]
この3行をコピペして変数名と値をその都度作ればいいだけで、いつでもどこでも「変数を名前で設定」を使い回せます。
Let関数ではこの三つを計算式の中に書くだけです。
Let ( [ $変数名 = 作りたい変数名; $値 = 作りたい変数名の値; へんすうづくり = Evaluate ( "Let(" & $変数名 & "=" & Quote( $値 ) & "; " & Quote("") & ")" ) ]; へんすうづくり )
※ $へんすうづくりの名前が気に入らない人は好きなカッコいい名前に替えてOK。何だっていいんです。
この情報の元ネタは昔どなたかの天才的ブログを読んで知ったのですが、当時何を書いているのかさっぱり判らず、理解するのに長い年月が必要でした。
せっかく長い年月をかけて理解して汎用性の高いものを作れたので、忘れないようにここに書いて復習しておくのです。