検索
ホームページウェブフロントエンドjsチュートリアルリポジトリではなく博物館に属するコード

Code That Belongs in a Museum, Not a Repository

「美しいコードを称賛すべきではない理由」

私たちは皆、これを見たことがあるでしょう。コードは非常に複雑で構造が純粋なので、保管庫ではなく博物館にあるものです。これは、デバッグが必要であることに気づくまで、しばらくの間、畏敬の念を持って見つめるようなコードです。そうなると、他の凡人同様、なぜ誰かが次の偉大なアメリカ小説を書くかのように JavaScript を書こうと決めたのか疑問に思うことになるでしょう。

はっきりさせましょう。美しいコードは、役に立つ場合にのみ美しいものとなります。あなたのチームに博士号が必要な場合は、難解な構文を使用して、機能がどのように機能するかを理解できます。おめでとうございます。誰もメンテナンスすることのない傑作が作成されました。

ここでは、あまりにも巧妙なコードを作成したいという衝動を抑えるべき理由と、その代わりに何をすべきかを説明します。バックルを締めてください。例は今後も登場します。

過剰に設計されたエレガンスの魅力

まず、開発者がこの種のコードを作成する理由を調べてみましょう。

  • 気持ちいいですね。賢いコードを書くと、知的なかゆみが軽減されます。それは柔軟であり、「自分に何ができるか見てみる」瞬間です。
  • それは(一部の)人々に感動を与えます。同じ人たちがそれを維持する任務を負うまで。それでは、彼らはイライラするだけです。
  • それは熟練を示しています。あるいは少なくともそうあるべきです。しかし、本当の熟練とは、複雑さを作り出すことではありません。それは問題をシンプルに解決することです。

例 1: 「WTF」ファクトリー関数

これは私が最近偶然見つけた宝石です:

const createMultiplier = (x) => (y) => (z) => x * y * z;
const multiply = createMultiplier(2)(3);
console.log(multiply(4)); // Outputs 24

美しい?もちろん。しかし、ここで何が起こっているのかを理解する必要があるジュニア開発者に幸運を祈ります。 3 つの数値を乗算する関数が 3 層ある?おめでとうございます。算数がオリンピック種目に採用されました。

これはやめてください。以下は人間向けに書かれた同じ機能です:

function multiplyThreeNumbers(x, y, z) {
  return x * y * z;
}
console.log(multiplyThreeNumbers(2, 3, 4)); // Outputs 24

読める。単純。全員の正気を保ちます。

例 2: シェイクスピアの約束の連鎖

次に、シェイクスピアによってゴーストライターで書かれたように見えるプロミスチェーンについて話しましょう:

fetch(url)
  .then((response) => response.json())
  .then((data) =>
    data.map((item) =>
      item.isActive
        ? { ...item, status: "active" }
        : { ...item, status: "inactive" }
    )
  )
  .then((updatedData) =>
    updatedData.reduce(
      (acc, curr) =>
        curr.status === "active"
          ? { ...acc, active: [...acc.active, curr] }
          : { ...acc, inactive: [...acc.inactive, curr] },
      { active: [], inactive: [] }
    )
  )
  .then((finalResult) => console.log(finalResult))
  .catch((error) => console.error(error));

このコードは機能します。しかし、それを維持しなければならない人に対する犯罪でもあります。データ変換の各ステップがロシア人形のように次のステップの中に入れ子になっているのはなぜですか?

リファクタリングしましょう:

async function processData(url) {
  try {
    const response = await fetch(url);
    const data = await response.json();

    const updatedData = data.map((item) => ({
      ...item,
      status: item.isActive ? "active" : "inactive",
    }));

    const finalResult = updatedData.reduce(
      (acc, curr) => {
        if (curr.status === "active") {
          acc.active.push(curr);
        } else {
          acc.inactive.push(curr);
        }
        return acc;
      },
      { active: [], inactive: [] }
    );

    console.log(finalResult);
  } catch (error) {
    console.error(error);
  }
}
processData(url);

ロジックをステップに分割すると、コードが読みやすくなります。依然として同じことを行っていますが、各段階で何が起こっているかが明確になりました。

シンプルなほうが良い理由

ソフトウェアに関しては、この黄金律を思い出してください。コードは個人的な日記ではありません。それはコミュニケーションツールです。チームがそれを読めなければ、それを使って作業することはできません。そして、彼らがそれに取り組むことができなければ、ビジネスは前進できません。

シンプルさが勝つ理由は次のとおりです:

1 オンボーディングの迅速化: ジュニア開発者はコードを理解するために Rosetta Stone を必要としません。
2 デバッグが簡単: バグが発生したとき (そして今後も発生するでしょう)、明確なロジックによりバグの特定が容易になります。
より幸せな 3 チーム: バカにされるのが好きな人はいません。あまりに巧妙なコードはチームメイトを疎外します。

テイクアウト

ぐっすり眠った後の未来の自分に説明するようにコードを書きましょう。あなたの作品を読まなければならない次の開発者には親切にしてください。その開発者はあなたである可能性が高いからです。

美しいコードとは、見た目がどれだけ派手かということではありません。問題をどれだけ効果的に解決できるかが重要です。それ以下のものは単なる虚栄心の訓練にすぎません。

以上がリポジトリではなく博物館に属するコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Java vs JavaScript:開発者向けの詳細な比較Java vs JavaScript:開発者向けの詳細な比較May 16, 2025 am 12:01 AM

Javaandjavascriptaredistinctlanguages:javaisusedforenterpriseandmobileapps、whilejavascriptisforinteractivewebpages.1)javaiscompiled、staticatically、andrunsonjvm.2)javascriptisisterted、dynamsornoded.3)

JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?May 14, 2025 am 12:15 AM

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

JavaScriptコメント://および / * *を使用するためのガイドJavaScriptコメント://および / * *を使用するためのガイドMay 13, 2025 pm 03:49 PM

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。