コード改善録[レコードのエクスポート]

 FileMakerでは定番の機能であるエクスポートを例に、コードの改善方法を考えていく。

元のコード

 「レコードのエクスポート」ステップの実行後に、エラーかどうかによってダイアログを出し分けるスクリプトになっている。

レコードのエクスポート [ダイアログあり:オフ; フォルダを作成:オフ]

変数を設定 [$error; 値: Get ( 最終エラー )]

If[$error = 0]

   カスタムダイアログを表示 ["エクスポートしました"]

Else

   カスタムダイアログを表示 ["エラーが発生しました¶エラー番号:" & $error]

End If

1.変数名

 変数名が「$error」だと、何のエラーのことを表しているかわからない。名前を「$exportError」にすると、何のエラーか一目で分かるようになる。

レコードのエクスポート [ダイアログあり:オフ; フォルダを作成:オフ]

変数を設定 [$exportError; 値: Get ( 最終エラー )]

If[$exportError = 0]

   カスタムダイアログを表示 ["エクスポートしました"]

Else

 カスタムダイアログを表示 ["エラーが発生しました¶エラー番号:" & $exportError]

End If

2.Ifブロックの改善

 このコードで最も分かりにくいのは、IF文でダイアログを使い分けているところである。なぜ理解しにくいかというと、Elseの文脈的意味が曖昧になっているからである。また、実際の運用ではエクスポート後の処理を書き足していく場合が多い。そうすると、エラーの処理が「レコードのエクスポート」ステップから遠く離れてしまう。そこで、エラーをすぐに対処するようにする。エラーは発生直後にチェックし、エラーならスクリプトを終了する。

レコードのエクスポート [ダイアログあり:オフ; フォルダを作成:オフ]

変数を設定 [$exportError; 値: Get ( 最終エラー )]

If[$exportError ≠ 0]

 カスタムダイアログを表示 ["エラーが発生しました¶エラー番号:" & $exportError]

現在のスクリプト終了 [テキスト結果: ]

End If

カスタムダイアログを表示 ["エクスポートしました"]


 エラー処理がエクスポートステップから離れることがなく、Else文もなくすことができた。注意点として、スクリプト開始時と別のレイアウトにいる場合は、終了前に「レイアウト切り替え[元のレイアウト]」を入れる。

3.論理値の表現

If条件内では、結果は論理値として扱われる。値が空白か0ならFalse、それ以外の値ならTrueになる(GetAsBoolean関数を通すと考えるとわかりやすい)。よって、

If[$exportError ≠ 0]

は、

If[$exportError]

と書くことができる。どちらも$exportErrorが0以外の場合にTrueになり、$exportErrorが0ならFalseになる。後者の方が「もしエクスポートエラーなら」と自然言語的に読むことができる。

改善後のコード

 以下が改善後のコードである。曖昧さがなくなり、処理の流れも一目瞭然になった。

レコードのエクスポート [ダイアログあり:オフ; フォルダを作成:オフ]

変数を設定 [$exportError; 値: Get ( 最終エラー )]

If[$exportError]

 カスタムダイアログを表示 ["エラーが発生しました¶エラー番号:" & $exportError]

現在のスクリプト終了 [テキスト結果: ]

End If

カスタムダイアログを表示 ["エクスポートしました"]

投稿者プロフィール

奥田
スモールの未来探究部 所属
FileMaker開発エンジニア

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です