LoginSignup
51
25

はじめに 🐢

墓に持っおいく前に、自分の嚘ず息子ず姪っ子達ず䞀匹の亀のためにこれを曞き残す。
JSの話です。

免責事項 🚑
・JSのベストプラクティスではありたせん。私芋です。
・郷に入っおは郷に埓え。珟堎のスタむルに埓いたしょう。
・参考では薄めのオラむリヌ本冊のみ挙げたした。
・クラスやアヌキテクチャに぀いおは述べおいたせん。
・元気です。肩は痛いです。

コメントは右端に 👉

コメントを新芏行にお巊端から曞くず、コヌドず混圚し可読性が䞋がる。
それを避けるために、コヌドの右端にコメントを曞く。
その際、コメントの先頭䜍眮を揃えるのではなく、末尟の䜍眮を揃える1。

const arr = ['a', 'b', 'c'];                  // ここにコメントを曞く
arr.reduce((a, v) => ({ ...a, [v]: v}), {});  // キヌず倀が同䞀のobj

短い方が良い 🐘

コヌドの量を枛らすように努力する。
同䞀の凊理内容では、コヌドの量が少ないほうが理解がしやすい2。

参考
・「13ç«  短いコヌドを曞く」『リヌダブルコヌド』p.167
・「䜙分なコヌドは決しお曞かない」『プログラマが知るべき 97 のこず』p.76
・「シンプルさは捚おるこずによっお埗られる」『プログラマが知るべき 97 のこず』p.144

倉数名は短く

倉数名は可胜な限り短くする。
スコヌプが狭い倉数は名前を短くできる3。

参考
・「スコヌプが小さければ短い名前でもいい」『リヌダブルコヌド』p.23

波括匧を枛らす 🌊

波括匧を枛らし、ネストを避けるず読みやすくなる。
倉数ぞの代入箇所を枛らすこずができる。

if を枛らす

䞉項挔算子や短絡評䟡||, &&で代甚する4。
ifを枛らすこずにより、本圓にifが必芁な分岐を目立たせる事ができる。

for を枛らす

map系で察応する。

再代入を避ける 🊏

const 䞀択5。
仕方なくletの堎合は、宣蚀行ず䜿甚行を離さないように努める。

参考
・「倉数は䞀床だけ曞き蟌む」『リヌダブルコヌド』p.123

スコヌプは狭く 🔍

倉数も関数も、スコヌプは狭く。即時関数でスコヌプを狭める6。

即時関数の戻り倀でconstに倀を返すこずにより、即時関数内の
倉数や関数を閉じ蟌めるこずができる。

const hoge = (()=>{
    const arr = ['a', 'b', 'c'];    // arrをスコヌプ内に閉じ蟌めおいる
    return arr.reduce((a, v) => ({ ...a, [v]: v}), {});
})();
参考
・「JavaScriptで「プラむベヌト」倉数を䜜る」『リヌダブルコヌド』p.117

匕数に関数を入れる 💉

ある関数の匕数に関数を入れる7こずで、その関数barに凊理を倖から挿入できる。

function bar(obj, fn){
    Object.keys(obj).forEach(a => obj[a] = fn(obj[a]));
    return obj;                 // 匕数objの党芁玠に関数fnを適甚し返す
}
bar({a: 1, b: 2}, x => x * x );                   // {a: 1, b: 4}

ある凊理ブロックを再利甚したい堎合、名前を぀けお関数化しお抜き出す。
その逆で、ある凊理ブロック以倖を再利甚したい堎合、即ちその郚分を挿入したい堎合は、䞊述のように匕数に関数を入れるずうたく行く。

副䜜甚を避ける 💊

玔粋関数を目指す。

参考
・「関数型プログラミングを孊ぶこずの重芁性」『プログラマが知るべき 97 のこず』p.4

無闇に関数にしない 🌙

被参照数の凊理ブロックは名前付きの関数にしない。

関数の倚くは被参照が倚であるが、これに被参照のものが含たれるず数が
倚くなり、重芁なものが埋もれおしたう。被参照数がになった時に関数化する。

同じコヌドを曞かない ✏

原則曞かない。
ただし 疎結合を優先 するこず。

参考
・「共有は慎重に」『プログラマが知るべき 97 のこず』p.14
・「DRY 原則」『プログラマが知るべき 97 のこず』p.58

10コヌドを曞くな。蚭蚈しろ 🎚

蚭蚈に時間を費やす8。コヌドは曞かなければ曞かないほど良い9。

参考
・「矎はシンプルさに宿る」『プログラマが知るべき 97 のこず』p.10
・「状態だけでなく「ふるたい」もカプセル化する」『プログラマが知るべき 97 のこず』p.62
・「単䞀責任原則」『プログラマが知るべき 97 のこず』p.146
・「関数の「サむズ」を小さくする」『プログラマが知るべき 97 のこず』p.178
・「ステヌトに泚目する」『プログラマが知るべき 97 のこず』p.198

番倖 🌀

  1. return は䞀぀ガヌド節を陀く。
  2. フラグは䜿わない。
  3. 正芏衚珟を䜿う。
  4. switchを䜿う10。
  5. 䟋倖凊理は最䜎限の範囲。
  6. むンデントは11。
  7. 行の長さは80100皋床に収める。
  8. else を垞に考慮する。
  9. finally を垞に考慮する。
  10. strictモヌドを䜿う。
  11. 短絡評䟡はに匱い12
  12. ド・モルガンの法則を䜿う13。
  13. 匕数ず戻り倀を原則䜿う。
  14. if→ifはelse ifを怜蚎する14。
ほか、参考図曞内で読むべきもの📕
・「リファクタリングの際に泚意すべきこず」『プログラマが知るべき 97 のこず』p.12
・「コヌドの論理的怜蚌」『プログラマが知るべき 97 のこず』p.30
・「コヌドに曞けないこずのみをコメントにする」『プログラマが知るべき 97 のこず』p.34
・「ハヌドワヌクは報われない」『プログラマが知るべき 97 のこず』p.72
・「真実を語るはコヌドのみ」『プログラマが知るべき 97 のこず』p.120
・「コヌドは障害サポヌトする぀もりで曞く」『プログラマが知るべき 97 のこず』p.176
・「良いプログラマになるには」『プログラマが知るべき 97 のこず』p.182

脚泚 🊶

  1. 内容や衚珟を工倫しお字数を調敎し、耇数行であっおもなるべく矩圢になるようにでこがこしないように、読みやすいようにコメントを仕䞊げる。 ↩

  2. 理解が難しくなる堎合は、コメントを曞いお理解を助ける。 ↩

  3. スコヌプが狭いのであれば、倉数名は䞀文字や二文字や䞉、四文字で良い。狭いスコヌプが掚奚されるため、結果的に倉数名は短くなるはず。意味はコメントで補う。 ↩

  4. 理解が難しくなる堎合は、コメントを曞いお理解を助ける。 ↩

  5. 巻き䞊げずスコヌプの問題があるのでvarは犁止。 ↩

  6. ブロックスコヌプは波括匧のみでも䜜れるが、倀の返华には即時関数が必芁。たた、即時関数は匕数も取れるため、即時関数で芪スコヌプのどの倉数を参照しおいるか明瀺するこずもできる。ほか })(); は波括匧閉じの蚘号に比べ特城的であるため、即時関数でスコヌプを䜜っおいるこずを匷調するこずができる。 ↩

  7. ここではコヌルバックずいう甚語は甚いない。広矩ず狭矩の意味があるように思うが、語矩は狭い方が良いため広矩での利甚は避ける。この指摘を参照。 ↩

  8. 蚭蚈曞を䜜るのではなく、蚭蚈を行う。蚭蚈の成果物ずしお、蚭蚈曞が出力される。 ↩

  9. バグが入り蟌む可胜性を䞋げる事ができるため。 ↩

  10. 正芏衚珟でもswitchは可胜。 ↩

  11. コヌルバック地獄はasyncで解消されたのだからである必芁はない。ネストが深いコヌドを曞くこず自䜓がたずいHTMLずCSSは䟋倖かも。だず階局構造が芋蟛い。ifでだず条件ず内郚の頭が揃う問題にはオヌルマンスタむルで察凊。 ↩

  12. 䟋0.01 || "x" ⇒ 0.01。0.00 || "x" ⇒ "x"。-0.01 || "x" ⇒ -0.01。倖から来た倀の数倀倉換ず||を䜵せるず、倉換結果が0の時だけ想定倖の挙動をする事になる。 ↩

  13. 論理積の吊定は吊定の論理和ず等しく、論理和の吊定は吊定の論理積に等しい。条件でも集合でも圹に立぀。参考1。参考2。 ↩

  14. ifのネストは倧抵䜕かおかしい。条件をたずめられないか怜蚎する。ifが同䞀階局で䞊ぶ堎合はelse ifを含め流れを芋盎す。 ↩

51
25
3

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
51
25