

リーダブルコードなどを読んで、否定はなるべく使わない方が良いというのは分かるのですが、  
どうしても使わざるを得ない状況もあるかと思います。  
その場合、例えばPythonでは以下どちらの書き方が良いのでしょうか？

[code]

    if not hasSomething()
    if doesNotHaveSomething()
    
[/code]

もしくは他の書き方があれば教えてください


CC BY-SA 3.0
2017-08-25T16:22:26.530
37493
2017-08-26T02:01:55.990
15279
question
python python3
否定形の読みやすさについて


「(否定を)どうしても使わざるを得ない」=「否定を使うことがリーダブル」と読めますが。


CC BY-SA 3.0
2017-08-25T17:36:33.953
37496
2017-08-25T17:36:33.953
13227
37493
answer


一般に「否定を使わない」というのは否定演算子を使うなという事ではなく、メソッド名などにおいての話なのではないでしょうか。  
否定形の要素があるとそれの否定で「否定の否定」が出てきてしまう事、一貫性が失われる事、などが原因ではないでしょうか。  
まさに、`doesNotHaveSomething()` などというメソッドを用意する必要はなくて、 `not hasSomething()` でいいよね？
という話だと思います。

（これに従うかどうかは主観の問題ですね）


CC BY-SA 3.0
2017-08-25T22:47:23.680
37498
2017-08-25T22:47:23.680
3054
37493
answer


リーダブルコードの主張はこうです

  * 名前に否定形は使わない
  * 条件式に否定は使わない

後者については、否定を使った方が読みやすい場合もあるとも書かれています。

> if not hasSomething()  
>  if doesNotHaveSomething()

リーダブルコードではthenとelseをひっくり返して前者の`not`を消すことを考えろといっているわけですが、それが出来ないのであれば、前者を使うほうがよいでしょう。

後者は、`doesNotHaveSomething()`が`false`を返したときに結局どういう状態なのか考えるのが大変です。これが「名前に否定形を使わない」とされる理由です。


CC BY-SA 3.0
2017-08-26T01:40:57.960
37500
2017-08-26T02:01:55.990
2017-08-26T02:01:55.990
5793
5793
37493
answer