JSクリーンコードのヒント:返されるオブジェクトのタプルを使用しないでください


私はRecord & Tuple Proposalについて話すつもりはありませんが、この悪い習慣についてです.
function createSomething() {
  const thing1 = { 
    aProperty: 'indeed'
  };

  function thing2() { /* ... */ }

  return [thing1, thing2];
}
この例では全くすべて間違っている.正直に私は実際の生産コードでそれを見て驚いた.

問題は命名を失うことだ
では、上記のものを使う例を見てみましょう.
// Having a typo won't cause any errors
// but you won't find the usages.
const [thang, thing2] = createSomething();

// This is not just valid, but super misleading!
// You accidentally changed the order and you had no errors!
const [thing2, thing1] = createSomething();
我々は、リターンで何もなしでまだcreateSomethingの中でまだ無傷の名前を失っています.(Reactチームは実際にこれを使用してフックの名前を指定します-しかし、彼らはまた、linterルールを介して命名を実施しようとします).

ハウツーとスタイル
単にオブジェクトを返します.
return { thing1, thing2 };
これがあなたの使い方です.
// will cause error
const { thang, thing2 } = createSomething();

// order does not matter, no penalty 
// if you misremember the order
const { thing2, thing1 } = createSomething();
💪 🦾 💪 🦾 💪 🦾 💪 🦾