Help us understand the problem. What is going on with this article?

FileMakerにおけるグローバル変数の管理:値セット編

はじめに

対象読者

要旨

グローバル変数は便利だけれど無闇矢鱈に使うとバグの元になるので、適切に管理してあげると黒歴史を作らずに済むようになります。

では FMPA において、グローバル変数を適切に管理するにはどのようにしたらよいか?

FMPA はメタ的な内容を記述管理することが苦手なので、グローバル変数を扱う「スクリプト」そのもので管理しなくてはなりません。

前回の記事では「宣言すること」を主題としました。本記事では、「宣言したグローバル変数へ、いかにして値をセットするか」を主題とします。

前置き

前回記事を読んできてください。よろしくお願いいたします。

本題

グローバル変数への値セットにおけるルール

さて、早速本題に入ります。

グローバル変数へ値をセットする際のルールを、以下のように決めておきます。

  • 個別のスクリプト内で直に値をセットすることをやめる
  • グローバル変数一つにつき、値をセットするためのスクリプトを一つ作成する

以下、それぞれについて解説します。

個別スクリプト内で直に値をセットしない理由

普通に開発していたら、グローバル変数への値セットは、個別スクリプト内で直におこなうものと思います。

ただ、そうしていると、開発規模が大きくなるにつれ、また、経年にともない、またまた、複数の開発者でまぎれることにもより、どのスクリプトでどんな値のセットのされ方をされているのか、把握しきれなくなっていきます。いくのですよ。

そのグローバル変数に入るべきでない値が入ってしまうというケースも起こり得るでしょう。その際、ヴァリデーション/サニタイズ処理が必要になったら、個別スクリプトの各々に、処理を書いていくのは、途方もないことです。

が、そんなときでも、グローバル変数一つにつき、値をセットするためのスクリプトを一つ作成しておく、という手法を採っておくことにより、ヴァリデーション/サニタイズ処理を書く箇所は一箇所で済みます。

個別スクリプトのコンテクストに依存する値については、引数として受け渡しすればよいことです。

値をセットするためのスクリプトを作成

というわけで、値をセットするためのスクリプトを作成します。以下のような感じです。

image.png

それぞれ中身を覗いてみます。

image.png

image.png

image.png

image.png

image.png

といった感じです。
(コメント注記のところには FMPA の ver. や、転記元となるドキュメント URL を入れておく、というのもオススメです。仕様が変わることもありうるので)

値セットのためのスクリプトを分けておくことで、わざわざドキュメントを見に行かないと覚えていられないような注記をコメントに書いておいても、雑然とした具合になりません。

今回の例では、引数を受け取る処理もなければ、ヴァリデーション/サニタイズ処理も書かれていませんが、必要に応じて書けばよいでしょう。「例えばどんなの?」とか、もしリクエストあるようでしたら、追記します。

おわりに

まとめとして。

  • ファイルで使われるグローバル変数をすべて宣言し、一目瞭然の状態にしておく
  • それぞれのグローバル変数に値をセットするためのスクリプトを、一つずつ用意する

この二つを守って開発していけば、あとはデータビューアを活用することにより、グローバル変数で地雷を踏んで吹き飛ぶ経験をすることは無くなることでしょう。

かといって、何でもかんでもグローバル変数にすれば良いわけではなく、ローカル変数でなくてグローバル変数でなければならない理由があるかどうか、を常に問い続けておくことをオススメします。

グローバル変数は、適切な用量・用法を守って、便利に使いましょう!

余談

くれぐれも、グローバルフィールドをグローバル変数代わりに使ってはなりません! とだけ書き残しておきます。

追記 2019/12/09
こちらについて、理由を以下コメント欄にて回答しています。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした