タグ別アーカイブ: リーダブルコード

【JavaScript】ドルモガンの法則

論理式を等価な式に置き換える2つの方法

1) not (a or b or c) は (not a) and (not b) and (not c)
2) not (a and b and c) は (not a) or (not b) or (not c)

notを分配して and / or を反転する
逆は
not をくくり出す

if(!(file_exists && !is_protected)) console.log("Sorry, could not read file");
//以下のように書き換えられる
↓
if(!file_exists || is_protected) console.log("Sorry, could not read file");

参照: リーダブルコード

ここも
http://www.i-programmer.info/programming/theory/4977-dangerous-logic-de-morgan-a-programming.html

The first law is that
NOT( A AND B) = NOT A OR NOT B

The second law you can probably guess:
NOT(A OR B) = NOT A AND NOT B
//式の前のNOTを分配してORをANDに

【JavaScript】要約変数

大きなコードの塊を小さな名前に置き換えて、管理や把握を簡単にする変数のことを「要約変数」という

if(request.user.id == document.owner_id){
 //ユーザーはこの文章を編集できる
}

if(request.user.id != document.owner_id){
 //文章は読み取り専用
}

変数が5こも入っているので考えるのに時間が掛かる
このコードが言いたいのは「ユーザーは文章を所持しているか」
要約変数を追加すればこの概念を明確に表現出来る

const user_owns_document = (request.user.id == document.owner_id);

if(user_owns_docuemnt){
  //ユーザーは文章を編集できる
}
if(!user_owns_docuemnt){
  //文章は読み取り専用
}

if(user_owns_document)にしたら少しは考えやすくなった。
またuser_owns_documentを最上部に定義したことで、「この関数で参照する概念」を事前に
伝えることが可能になった

参照: リーダブルコード

【JavaScript】説明変数

以下のようなコードを

if line.split(':')[0].strip() == "root";

説明変数を使えば以下のようになる

username = line.split(':')[0].strip()
if username == "root";

式を簡単に分割するには式を表す変数を使えばいい。
この変数を「説明変数」と呼ぶことがある。
式の意味を簡単にしてくれる

参照: リーダブルコード

条件式の並び順はどのように決めるか

【リーダブルコード】条件式の並び順はどのように決めるか

【リーダブルコード】条件式の並び順はどのように決めるか

条件式の並び順
以下の2つはどちらが読みやすいか。について。

[coad]
if(length >= 10)
[/coad]

[coad]
if(10 <= length)
[/coad]

指針
左側
調査対象

右側
比較対象の式。あまり変化しない

英語の用法と合わせる。
「もし君が1年で10万ドル稼げるならば」や「もし君が18歳以上ならば」というのは自然だが、
「もし18年が君の年齢以下ならば」といのは不自然。

たしかに最初のは

もし長さ(調査対象)が10以下だったら

ですが、

もし10(調査対象)が長さ以下だったら

てたしかに。。

参照: リーダブルコード