notの意味を再確認する -否定の意味を持つ接頭辞の罠-


プログラミングの話はほとんどありません。

突然ですがみなさん、unhappy(≒ sad, 不幸せ/悲しい)not happyは同じ意味だと思いますか?

 

悲しい嬉しい(happy)の反対。」
happyの反対はunhappy。」
unhappyun-happy、つまりnot-happyだから...」

というロジックで「Johnが嬉しければ笑い、悲しければ泣く」という処理を行おうとした以下のようなコードがあるとします。

if (John.isHappy) {
  John.smile();
} else {
  John.cry();
}

一見これでよさそうですが、not happyの時に泣かせてしまうと、Johnはそこそこ嬉しい時も別になんとも思っていない時にも泣いてしまいます。

どうやらunhappy = not happyではなさそうな感じがします。

 

「でもunnotとちゃいまんの?」

notの意味

not(数学やプログラミングでいうところの¬, ~, !)は、真偽を反転させる効果を持ちます。

「John is happy.」の否定形は「John is not happy.」ですが、言い換えるとこれは「It is false that John is happy.」であり、「happyである」ことを否定しているに過ぎません。つまり、notはあくまでも「〇〇ではない」だけです。

「ポジティブ/ネガティブ」という概念を使うからややこしくなるわけで、大事なのは「真偽が反転する」ということです。

 

「ほんでunnotは何がちゃいまんの?」

接頭辞unの意味

unは、後ろに続く語の表す性質を否定する接頭辞です。notの持つ意味に加え、反対(opposite)逆(reverse)といった意味を表します。

否定の接頭辞には他にdisnonなどがあり、それぞれ少し異なる否定を意味します。

e.g.

  • dis
    反対(opposite)欠如(absence)を意味する。(like/dislike, agree/disagree, etc.)
  • non
    notと同様に、補集合を表す。「俺か、俺以外か。」

un以外の接頭辞の詳しい解説はここでは割愛します。

un-動詞

動詞の前にunがつくと、その動詞の逆の行為を意味します。

  • do(<行為を>する) / undo(元に戻す)
  • install(インストールする) / uninstall(インストールしたものを削除する)

un-形容詞

形容詞の前にunがつくと、その形容詞の表す状態の反対にあたる状態を意味します。unがつく形容詞には以下の2つのパターンがあります。

  1. 相反する2つの状態しか存在しない形容詞
    このパターンに当てはまる形容詞はその状態が0か100かにしかなり得ないので、一方であることが偽であればもう一方であることが真となり、一方である時に同時にもう一方でもあることはできません。

    • available(入手可能) / unavailable(入手不可能)
      availableでなければunavailableunavailableでなければavailable
    • able(できる) / unable(できない)
    • fair(公平な) / unfair(不公平な)

    このパターンはnotで否定した時と同じ意味になります。ただし、notで否定した方が若干弱い否定になります。

  2. どちらでもない状態が存在する形容詞
    このパターンに当てはまる形容詞は、その状態の程度が連続スペクトル上で変化し、一方でももう一方でもないという状態が存在します。比較級がある形容詞はこれに当てはまります。

    • lucky(幸運な) / unlucky(不運な)
    • important(重要な) / unimportant(取るに足りない)
    • comfortable(快適な) / uncomfortable(不快な)

ややこしいパターン

形態論のちょっと難しい話。

  • unlockable
    unlockableは以下の2つの意味で解釈できます。

    1. unlock-able: unlock(解錠)できる
    2. un-lockable: lock(施錠)できない

un-副詞

  • unnecessarily(不必要に)
  • unnaturally(不自然に)

un-名詞

名詞につく時も、反対の意味が強く出ます。

  • unhappiness(不幸): unhappyの名詞形。
  • uncola: 7up(清涼飲料)のこと。「コーラではないもの」[1]

non-名詞とun-名詞はよく似ていますが、少しだけ違うところがあります。

  • non-Japanese: 日本人でない人。(「日本人」という集合に属していない)
  • un-Japanese: 日本人っぽくない人, 日本的でない。(「こんな人が日本人であるはずがない」「こんなのは日本式に反している」というニュアンス)

7upをnon-colaとしなかったのも、対抗心の現れなのかもしれません。

まとめ

  • notは真偽を入れ替えるだけ。
  • unnotの持つ意味の他に「反対」や「逆」を意味する。

unnotは日常会話ではほぼ同義で使われることもありますが、厳密には意味が異なります。

unhappyであればnot happyでありますが、not happyだからといってunhappyであるとは限りません。

「bool型の変数名や条件式にはできるだけ肯定的/ポジティブな意味を持たせましょう」というのはよく言われることだと思いますが、unのような否定的な接頭辞がつく言葉の言い換えには気をつけた方がよさそうです。

 

「なんとなくわかったわ。おおきに!」

脚注
  1. 60~70年代にコーラに対抗して7upを売り出すためにUncola campaignが行われた。 ↩︎