JavaScriptの魅力的なクリーンコード: 基本ガイド

JavaScript開発の世界には、みんなが気づいていない成功への秘訣があります。それは、クリーンで、簡潔で、正確なコードを書くことです。クリーンなコードは、道具ごとにきちんと配置されたキッチンのようなものです。簡潔なコードは、要点に直行するミニマリストのメニューです。そして、正確なコードは、最高の精度で実行されるシェフの代表的な料理です。

この記事では、これらの原則の重要性を探り、クリーンなコードの実践を示す10のJavaScriptおよびTypeScriptのコードスニペットを提供します。

1. 意味のある変数名

クリーンコードの基本的な側面の一つは、意味のある変数名を使用することです。"x"や"temp"のような暗号的な名前は避け、変数の目的を伝える記述的な名前を選びましょう。

// あまりクリーンでない
const x = 42;

// クリーンで明確
const age = 42;

2. 一貫性のあるフォーマット

一貫性のあるフォーマットは読みやすさの鍵です。単一のスタイルガイドに従い、それに一貫してください。TypeScriptには、TypeScript専用のフォーマットルールを使用します。

// 一貫性のないフォーマット
function initGreeting() {
  console.log('Viva Nicaragua Libre');
}

// 一貫性のあるフォーマット
function initGreeting(): void {
  console.log('Viva Nicaragua Libre');
}

// 無名関数
const initGreeting = (): void => {
  console.log('Viva Nicaragua Libre');
};

// 関数を呼んで挨拶を表示
initGreeting();

3. ネストされたコールバックを避ける

コールバック地獄、別名「運命のピラミッド」は、コードの追跡を困難にすることがあります。プロミス、async/await、または他の非同期制御フローメカニズムを使用して、コードをクリーンでメンテナンスしやすく保ちましょう。

// コールバック地獄
getUser((user) => {
  getProfile(user, (profile) => {
    displayProfile(profile);
  });
});

// プロミスでクリーナー
getUser()
  .then(getProfile)
  .then(displayProfile);

4. コメントは控えめに

複雑なロジックを説明するにはコメントが不可欠ですが、自己説明的なコードを書く努力をしましょう。あなたのコードがクリアで簡潔であれば、それ自体が語ることが多いです。

const calculateTotal = (): number => {
  const total: number = arrSales.reduce((acc: number, currentValue: number) => acc + currentValue, 0);
  return total;
};

const arrSales: number[] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];

// コメントされたコード
const total = calculateTotal(); // 合計金額を計算

// クリーンなコード
const total: number = calculateTotal();
console.log("合計:", total);

5. 分割代入の利用

オブジェクトや配列を扱う際、分割代入を使用すると、コードをよりシンプルにし、読みやすくなります。

interface Developer {
  fullName: string;
  age: number;
}

const developer: Developer = {
  fullName: "Alvison Hunter",
  age: 45,
};

// 分割代入を使用しない場合
const fullName: string = developer.fullName;
const age: number = developer.age;

// 分割代入を使用する場合
const { fullName, age }: { fullName: string; age: number } = developer;

6. マジックナンバーを避ける

マジックナンバーは、文脈が欠けているハードコードされた数値値です。それらを名前付きの定数や変数に置き換えましょう。

// マジックナンバー
const status = 3;
if (status === 3) {
  console.log(`現在のステータス: ${status}`)
}

// 名前付き定数
const STATUS_COMPLETED = 3;
if (status === STATUS_COMPLETED) {
 console.log(`現在のステータス: ${status}`)
}

7. 単一責任原則

関数は単一の責任を持つべきです。複雑な関数を、より小さく、焦点を当てた関数に分割しましょう。

type Order = {
  id: number;
  products: string[];
};

// 複雑な関数
function processOrder(order: Order): void {
  processPayment(order);
  updateInventory(order);
  dispatchOrder(order);
}

// クリーンで簡潔
function processPayment(order: Order): void {
  console.log(`注文${order.id} の支払いを処理中`);
}

function updateInventory(order: Order): void {
  console.log(`注文${order.id} の在庫を更新中`);
}

function dispatchOrder(order: Order): void {
  console.log(`配送中 ${order.id} - ${order.products}`);
}

// さあ、この関数を呼んでみましょう
processOrder({id:"McDon-23EAT45", products:["フライドチキン","パン","ケチャップ"]});

8. エラーハンドリング

適切なエラーハンドリングは重要です。アプリケーションをクラッシュさせる代わりに、常にエラーをキャッチして優雅に処理しましょう。

interface JokeResponse {
  id: number;
  type: string;
  setup: string;
  punchline: string;
}

//荒いエラーハンドリング
try {
  // fetchなどの操作をここで呼び出します
} catch (e) {
  // すべてのエラーを処理
}

// asyncを使用した正確なエラーハンドリング
async function fetchRandomProgrammingJoke() {
  try {
    const response = await fetch('https://official-joke-api.appspot.com/jokes/programming/random');

    if (!response.ok) {
      throw new Error(`データ取得に失敗しました。ステータス: ${response.status}`);
    }

    const data: JokeResponse[] = await response.json();

    if (data.length === 0) {
      // 空のレスポンスを処理
      throw new Error('ジョークが見つかりません');
    }

    const joke = data[0];
    console.log(`セットアップ: ${joke.setup}`);
    console.log(`オチ: ${joke.punchline}`);
  } catch (specificError) {
    // エラーを優雅に処理
    console.error('エラーが発生しました:', specificError);
  }
}

// ジョークをフェッチして表示する関数を呼び出す
fetchRandomProgrammingJoke();

9. 不必要な複雑さを避ける

シンプルさはクリーンコードのキーです。オーバーエンジニアリングを避けたり、不必要な複雑さを導入したりしないでください。

const x: number = 5
const y: number = 10

// 過度に複雑
const complexResult:number = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));

// 単純化
const simplifiedResult: number = Math.hypot(x, y);
console.log(complexResult, simplifiedResult);

10. 型の安全性のためのTypeScript

TypeScriptはクリーンで、簡潔で、正確なJavaScriptを書くための強力なツールです。型関連のエラーを早期にキャッチし、自己文書化されたコードを提供するために使用しましょう。これは非常に役立ちますよ、本当に!

// TypeScript無し
function add(a, b) {
  return a + b;
}

// TypeScript
function add(a: number, b: number): number {
  return a + b;
}

結論として、クリーンで簡潔で正確なコードは熟練したJavaScript開発者の特徴です。これらの原則に従い、良いコーディング習慣を実践することで、読みやすくメンテナンスしやすいだけでなく、バグやエラーも少ないコードを作成できます。今日からこれらの実践をプロジェクトに取り入れ、コードベースが明瞭で効率的な傑作へと変わるのを見守りましょう。ハッピーコーディング!

❤️ 記事が気に入りましたか?あなたのフィードバックがさらなるコンテンツに繋がります。
💬 あなたの考えをコメントで共有してください。
🔖 今は読む時間がありませんか?後で読むためにブックマークしてください。
🔗 役立ったら、ぜひ他の人にも伝えてください!

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/alvisonhunter/the-art-of-writing-clean-concise-and-precise-javascript-with-typescript-220l