当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2008年5月13日火曜日

@Containsと@IsMemberの違い

※リストの検索としてよく使われる関数に、@Containsと@IsMemberがある。
だが、これらの使い方を誤ると正しい結果を得られず、動作不正になってしまうことがある。


下の二つのボタンは、いずれもLISTという変数の中を検索するサンプルプログラムである。
しかし、実行してみると結果は違うことになっている。
(上が「あります。」で、下が「ありません。」になる)

これはどういうことかと言うと、@Contains関数と@IsMember関数の検索手法の違いにある。
@Contains関数は、リストの中に検索条件で指定した文字列が含まれていれば一致とするのに対して、
@IsMember関数はリストの各要素が検索条件で指定した文字列と完全に一致していれば一致とするのである。

つまり、@Containsでは、"ABCDEFG"や"ABCD"の中に"ABC"が含まれるので、検索に一致しているが
@IsMemberでは、"ABC"というリストの要素がないために、検索に一致するものはないとしているのである。


※ロールの判定に@Contains関数を使うことがあるが、似たようなロール名にしているとエラーになることがあるので注意が必要である。
(実際には、[ロール名]で判断されるのでエラーにはなり得ないが、本来の判定方法からすれば、@IsMemberが正しいと言えるだろう)

@Containsの場合
LIST := "ABCDEFG":"DEF":"GHI":"ABCD";
@If(@Contains(LIST;"ABC");@Prompt([OK];"検索結果";"あります。");@Prompt([OK];"検索結果";"ありません。"))


@IsMemberの場合
LIST := "ABCDEFG":"DEF":"GHI":"ABCD";
@If(@IsMember(LIST;"ABC");@Prompt([OK];"検索結果";"あります。");@Prompt([OK];"検索結果";"ありません。"))

0 件のコメント: