みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
macOS 10.13.6
FileMaker Pro 18 Advanced
FileMaker Server 18
お世話になります。
スクリプトステップの「If」について教えてください。
例えば、検索結果の対象レコード数で処理を分岐する場合
0件 ・・・カスタムダイアログでエラーを出してOKボタン(OKボタンのみ) → 全レコードを表示 → 現在のスクリプトを終了
1件以上・・・以降の処理を続行
If [ Get ( 対象レコード数 ) = 0 ]
カスタムダイアログを表示 [ "エラー" ; "該当レコードがありません。" ]
If [ Get ( 最終メッセージ選択 ) = 1 ]
全レコードを表示
現在のスクリプト終了
End If
End If
上記のように書いても問題ありませんか?
Else でレコードがあった場合の処理を書くべきでしょうか?
以降の処理でも If で分岐させる必要があると、入れ子になって見づらいので
上記のように書いていて、動いてはいますが、正しいのかどうか不安になってきました。
宜しくお願いいたします。
Offline
あとから見直したときに自分(と後継者が)分かりやすいように書けば良いでしょう。
(簡潔で短く書けてもあとから何だか分からないなら意味がない)
現時点で入れ子になっていますよね?
また、2つめの If はカスタムダイアログに選択肢(2つ以上のボタン)があるのですか?
メッセージからは選択ができるように読めませんが(OKとキャンセル)があるとか......
ボタンがひとつしかないなら If で分岐する必要はないかと。
Offline
Moz様 早速のアドバイスありがとうございます。
カスタムダイアログのボタンは「OK」の1つだけで「キャンセル」は作っていません。
ボタンが1つなら分岐しなくてもいいんですね。
ボタンを作ったら、必ず Get ( 最終メッセージ選択 ) = 1 で分岐させないといけないのだと思い込んでいて
ボタンの部分の入れ子は仕方ないのだと思っていました。
こちらで相談してよかったです。
とてもスッキリしました!
ありがとうございました!
Offline
書き方の流儀の話ですので、好き嫌いがあると思いますが。
昔情報学基礎の講義で散々言われてたのが、フローチャートを書くときに、全ての処理は、最初のボックスから最後のボックスで完結させる、という流れです。つまり、途中でフローチャートの中止・終了を作ってはいけない、ということです。(構造化という理論の一部です)
実際に運用の流れをみていると、全てがこれにあてはまるとは言えないでしょうが、最近のC以降の関数呼び出し型のオブジェクト指向言語では、これを守らないと書けなかったり、スタックを浪費したり、誤動作になったりすることがあります。また、のちにメンテナンスで処理を追いかけるときに、読みにくくなります。FileMaker のスクリプトは、昔のCOBOLのような手続き側の言語に近いのですが、フローを考える上である程度守ったほうがいいと思います。特に、そのスクリプトがサブスクリプトとして呼び出される可能性があれば、より厳格に守ったほうがいいです。
ですから、できれば、
If ()
エラー処理など
処理終了
end
条件に合う処理
という書き方は避けて、
If ()
条件に合う処理
else
エラー処理など
end
という形にまとめるほうがいいかもしれません。(この書き方も流儀があって、エラー処理を最初に書いておく、という人と、先に本来の処理を書いていく、という人があります)
Last edited by Shin (2021-07-05 13:52:17)
Offline
Shin様 ありがとうございます。
なるほど〜!詳しい解説を教えていただきましてありがとうございます。
サブスクリプトとして呼び出しているものの中にも「else」を略していましたので、直します!
構文を守るべき理由を教えていただいたので、これからはちゃんと書きます。
常に「条件に合う処理」を先に書く、と決めておくだけでも読みやすくなりそうですね。
動画なども見ながら基礎的なことも勉強していこうと思います。
ありがとうございました。
Offline
Pages: 1
[ Generated in 0.005 seconds, 10 queries executed - Memory usage: 557.65 KiB (Peak: 564.78 KiB) ]