0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

比較文でtrueやfalseと比べることにNGを出す理由

Posted at

boolean literalとの比較 (== false)、私は通常NGとします(jsみたいな特殊な言語を除く)。

C言語時代はバグの温床、昨今の言語でも冗長表記として忌避されます(lint設定として用意されているのを目にします)。
冗長であることの問題は、結局のところひとつ余分な思考ステップが追加されるのでコードリーディングを少し遅くさせること、1ステップ分が不具合を生みやすくすること、と考えます。

余分な思考ステップ

言語を読み慣れてコードを英語的に読めるようになってくると、という前提付きですが、
boolean literalを使わない場合、「(比較の)対象が真の状態か、偽の状態か(または是か非か)」を直接思い浮かべるようになってきます。
一方boolean literalを使うと、1) 「比較の結果がtrue/falseであり」2)「なので対象はこの状態」という思考ステップをいつまでも強いるように感じます。

下記で私はそれを体感するのですが、いかがでしょうか。

assert(
  alice.has(hat) &&
  !alice.has(sunGlasses) &&
  alice.has(dresses) &&
  !alice.has(rings) &&
  alice.has(shoes)
)
assert(
  alice.has(hat) == true &&
  alice.has(sunGlasses) == false &&
  alice.has(dresses) == true &&
  alice.has(rings) == false &&
  alice.has(shoes) == true
)

余談的考察と感想

if sum(a, b) == c のような比較、これは「処理結果」を何かと比較するつもり、で書きます。
boolean literal を使って比較文を書くのは(== true)、同じ感覚で書いているのかな、と想像します。
「それとは別の感覚でも読み書きできるんですよ」、というのが伝わればいいな、というのが今回の記事に込めた希望です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?