こんにちは。iQeda [@iQeeeda] です。
これから何度かに分けて「論理」の解説を行っていきます。
初回である今回は「命題」という用語について説明をします。
命題
「正しいか、正しくないか判断できる文」のことを命題 (proposition) と呼びます。
命題の結果は必ず、真 (true) か 偽 (false) となります。
true と false どちらも満たしてしまう、
またはどちらも満たさないものは命題ではありません。
プログラマーにとっては、if 文の「条件」と言った方がわかりやすいかもしれません。
完璧な条件パターン
- とあるバス会社の乗車料金ルール A
- 乗客の年齢が 6 歳以上
- 100 円
- 乗客の年齢が 6 歳未満
- 0 円
- 乗客の年齢が 6 歳以上
命題の作成
乗客サンプルを用意して、命題を作成してみます。
- アリス (13 歳) の年齢は 6 歳以上である
- 真 (true) の命題
- ボブ (4 歳) の年齢は 6 歳以上である
- 偽 (false) の命題
- チャーリー (6 歳) の年齢は 6 歳以上である
- 真 (true) の命題
命題の結果
結果を乗車料金に当てはめます。
- 13 歳アリスの乗車料金
- 100 円
- 4 歳ボブの乗車料金
- 0 円
- 6 歳チャーリーの乗車料金
- 100 円
網羅的
条件に漏れがないようにすることを「網羅的である」と言います。
漏れがある条件パターン
- とあるバス会社の車料金ルール B
- 乗客の年齢が 6 歳より上
- 100 円
- 乗客の年齢が 6 歳未満
- 0 円
- 乗客の年齢が 6 歳より上
上記ルールには「漏れ」があります。
乗客がちょうと 6 歳の場合、いくらになるのか定義されていません。
これはルールとして不適切です。
排他的
条件にダブりがないようにすることを「排他的である」と言います。
ダブりがある条件パターン
矛盾あり
- とあるバス会社の車料金ルール C
- 乗客の年齢が 6 歳以上
- 100 円
- 乗客の年齢が 6 歳以下
- 0 円
- 乗客の年齢が 6 歳以上
上記ルールには「ダブり」があります。
6 歳以上と 6 歳以下では、両方に 6 歳があります。
これはルールとして不適切なだけではなく、矛盾があります。
矛盾なし
- とあるバス会社の車料金ルール D
- 乗客の年齢が 6 歳以上
- 100 円
- 乗客の年齢が 6 歳
- 100 円
- 乗客の年齢が 6 歳未満
- 0 円
- 乗客の年齢が 6 歳以上
上記ルールには「ダブり」はありますが、矛盾はありません。
MECE (網羅的で排他的な分割)
網羅的で排他的になるよう、大きな問題を小さな問題として分割していくことを、
MECE (Manually Exclusive and Collectively Exhaustive) と言います。
if 文の条件は「網羅的で排他的な分割」がなされていることが必須です。
if 文で命題を表現する
- とあるバス会社の乗車料金ルール A
- 乗客の年齢が 6 歳以上
- 100 円
- 乗客の年齢が 6 歳未満
- 0 円
- 乗客の年齢が 6 歳以上
命題を if 文で表現してみましょう。
if (乗客の年齢が 6 歳以上である) {
「料金は 100 円」と表示する
} else {
「料金は 0 円」と表示する
}
網羅的で排他的になるように、小さな 2 つの問題として分割できています。
つまり「漏れ」も「ダブり」もありません。
ここまで当たり前の話に聞こえたかもしれませんが、
用語として「命題」と「網羅的で排他的な分割」は押さえておいてください。
CS シリーズ
次回
前回
お仕事ください!
僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。 なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。
カテゴリ「CS」の最新記事
コメント