1
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.

演算子の括弧を省略しないのがリーダブルコード

Last updated at Posted at 2020-05-02

疑問

JavaScriptで条件式を3つ並べたとき括弧を省略できる?:thinking:

JavaScript
if (flag_a) {
  if (flag_b || flag_c) { }
}

をリファクタリングしたとき

JavaScript
if (flag_a && (flag_b || flag_c)) { }

中の括弧を省略できるかという疑問。

調査

括弧を省略できるか書き出してみた。

a b c a&&b||c (a&&b)||c a&&(b||c) a||b&&c (a||b)&&c a||(b&&c)
1 1 1 1 1 1 1 1 1
1 1 0 1 1 1 1 0 1
1 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 1
0 1 1 1 1 0 1 1 1
0 1 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0

括弧の有無で計算結果が変わるので括弧を外せない。

||より&&のほうが優先的に計算される。

演算子の優先順位 - JavaScript | MDNによると20個の規則がある。

しかし、20個も覚えてられない。

演算子の優先順位は言語によって変わるかもしれない。

たとえば、滅多にない例だが、JavaScriptでは!0 === 1falseになるが、Pythonではnot 0 == 1Trueになる。

結論

リファクタリングしないか、var flag_b_or_c = flag_b || flag_cと説明変数を挟むことがリーダブルコード。

そこはリーダブルコードにしなくていいと判断したら、括弧の有無で計算結果が変わらなかったとしても、演算子の括弧を省略しないことがリーダブルコード。 :smirk_cat:

1
0
2

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
1
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?