tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

XOR でペアのパラメータを処理する

MySQL のストアドを書いていて、入力パラメータのチェックで、「開始日」「終了日」みたいなパラメータがあって、「ペアになっていなかったらエラー」みたいな処理が必要でした。(開始日・終了日両方設定か、開始日も終了日もなし、みたいな感じ。開始日だけとか終了日だけはダメ。)

で、最初は

IF ( startDate IS NULL AND endDate IS NOT NULL ) OR ( startDate IS NOT NULL AND endDate IS NULL ) THEN
    エラー処理!
END IF;

みたいに書いていました。でも、このペアが3つだか4つぐらいあるんだよね。テストコード書きつつも、「これじゃそのうち絶対間違えるなぁ。。。」と思って思案していたら、ふとひらめきました。

これって XOR(排他的論理和)じゃん!

XOR 使うとこんな感じです

IF ( startDate IS NULL XOR endDate IS NULL ) THEN
    エラー処理!
END IF;

だいぶすっきりです。ペアのパラメータ有無のチェックには XOR なんですねぇ。Perl とか他の言語でも使えそうです。