プログラミングと法律の相違点 _ 演算子(3) ANDが好きな人たち
"及び" と "並びに"
法律上のANDは一般に"及び"と"並びに"が使われるようです。
"かつ"は使われないみたいですね。文化なんでしょうか。
AND条件をやたら聞いてくる
司法書士試験の過去問を解いていると頻繁にこの手の"AND条件系"が出てきます。決まって効力発生タイミングはいつですか?と聞いてくるのです。
どう考えてもANDを含む条件式が真になったときじゃないの?ひっかけなのかな?という感想なのですが…
とにかく好きみたいです。不思議です。
事例1 - 農地の売買
以前にこの記事でもサンプルソースを書いたものです。
if( isSpecificSuccession() && isAgriculturalLandLawPermission() ){
reg.ownerShipTransfer();
}
もっとシンプルにして
if( A && B ){
X();
}
にしましょう。
Aも真でかつBも真のときに初めてX()が実行されるというコードです。
しかし司法書士試験の過去問では頻繁に、Aが真になった。次にBが真になった。X()が実行されるのはAが真になったときですか?って聞いてくるのです。答えはもちろん×ですが、解説を見るとわざわざAが最初に真になったパターンとBが真になったパターンが書いてあって冗長だなあ。という感想を抱きました。
事例2 - 財産分与による所有権移転登記
これも典型パターンみたいです。
1. 離婚協議成立
2. 財産分与による協議成立
結論から言えばこの2つの条件は"AND"条件ですからともに真のときに
所有権移転登記をうつことができます。
if( 離婚協議成立() && 財産分与協議成立 ){
所有権移転登記()
}
こんなかんじのサンプルになるでしょう。
この手の"AND"条件系によるものは他にも問題として出てくるみたいで、
とにかく中の人たちは好きな問いかけのようです。
この問題も解説では、先に協議離婚が成立した場合は~、先に財産分与協議が成立した場合は~、と場合分けした文章があったりするのですが、シンプルに"AND"条件系か!よっしゃもうわかったし次いこ!という感覚でいいんじゃないでしょうか。
それでもやっぱり例外がある
試験範囲では1個ほど重要な例外がありました。それが準正です。
中身は深追いせずに以下の仕様から原則のサンプルコードを示します。
仕様 父母が結婚かつ自身が認知された場合に嫡出子になる。
if( child.is父母婚姻() && child.is認知() ){
child.changeTo嫡出子();
}
今までならこれで良かったのですが、これに修正が加えられてます。
それがこちら
if( child.is父母婚姻() ){
if( isEmpty(child.getDateOf嫡出子()) ){
child.setDateOf嫡出子(child.getOf父母婚姻日時());
}
if( child.is認知() ){
child.changeTo嫡出子();
}
}
とにかく父母が結婚した時に嫡出子になってたことにしてあげよう。ということのようです。だから後から認知されても"AND"条件だと認知時に嫡出子になってしまうところ、父母の婚姻時に嫡出子になってた(つまり遡って)ことにしたのです。法律の勉強をしてるとたまに条文通りに動いてないところがありますが、そこがまさにおもしろいところとも言えます。
終わりに
"AND"条件系はここまでです。書いたとおりにしか動かないプログラムと違って法律は書いた通りにうごくけれどたまに変えれる。という感覚が勉強する中で出てきました。これは今の民法大改正への理解にも繋がったのですが、その前に次回は演算子の優先順位について書いていこうと思います。
この記事が気に入ったらサポートをしてみませんか?