ホームページ > ウェブフロントエンド > jsチュートリアル > 人間が読むことができるコードを書くことの重要性

人間が読むことができるコードを書くことの重要性

Lisa Kudrow
リリース: 2025-02-18 10:52:10
オリジナル
483 人が閲覧しました

The Importance of Writing Code That Humans Can Read

キーポイント

  • 賢さ最初の賢さ:非常に読みやすいコードは、保守性とコラボレーションを改善し、理解しやすいコードを作成して修正することが重要です。
  • 関数とファイル管理:機能を使用して、再利用可能なコードをカプセル化し、大きなファイルをより小さく、より管理しやすい部分に分割して、ナビゲーションと理解を簡素化します。
  • 命名規則:読みやすさを改善し、追加のコメントの必要性を減らすために、関数と変数の明確で記述的な名前を選択します。
  • 過度の最適化を避ける:簡潔で最適化されたコードは魅力的ですが、最新のJavaScriptエンジンはコード最適化が非常に効率的であるため、パフォーマンスの影響が重要ではない場合は読みやすさを優先する必要があります。
  • 慎重なコメント:コメントを使用して、「何をすべきか」ではなく「なぜ」を「なぜ」と説明し、コメントを関連付けて最新の状態に保ち、非自明なコードロジックを理解するのに役立ちます。

この記事は、マット・バーネット、サイモン・コドリントン、ニルソン・ジャックによってレビューされました。 SitePointコンテンツを最高の状態にしてくれたすべてのSitePointピアレビュアーに感謝します! もう一度コードを見ることなく、一度に1回の実行でプロジェクトを完了したことがありますか?どちらの私もいない。古いプロジェクトに取り組んでいるときは、コードの仕組みを理解して、ほとんどまたはまったく時間を費やさないようにすることができます。読みやすいコードは、製品を維持し、あなたとあなたの同僚や協力者を満足させるために不可欠です。

読みにくいコードの誇張された例は、1024文字以下で最高のJavaScriptアプリケーションを書くことを目標に、JSF*CK(ちなみにNSFW)を書くことを目標に、JS1Kコンペティションで誇張されています。 JavaScriptコードを作成するために6つの異なる文字のみを使用して、深遠なプログラミングスタイル。これらのサイトでコードをチェックすると、何が起こっているのか不思議に思うようになります。このようなコードを書いて、数ヶ月後にエラーを修正しようとすることを想像してください。

定期的にインターネットを閲覧したり、インターフェイスを構築したりすると、シンプルで小さなフォームを終了するよりも、大きくてかさばる形を出る方が簡単であることがわかるかもしれません。コードにも同じことが言えます。読みやすく使用しやすいと見なされると、人々はそれを使用することを好むかもしれません。少なくとも、それはあなたがあなたのコンピューターがイライラするのを捨てるのを妨げます。

この記事では、コードを読みやすくするためのヒントとトリック、および回避する落とし穴を調べます。

コードセグメンテーション

形式の類推に持続すると、フォームが部品に分割されることがあり、難しくなりません。コードは同じことができます。それをセクションに分割することにより、読者はジャングルを閲覧するのに苦労するのではなく、それらに関連するセクションにジャンプできます。

クロスファイル

長年にわたり、ネットワークのあらゆる種類のものを最適化してきました。 JavaScriptファイルも例外ではありません。 MINIFINGとPRE-HTTP/2について考えて、スクリプトを1つに組み合わせることでHTTP要求を保存します。今日、私たちは希望どおりに作業し、GulpやGruntなどのタスクランナーを使用してファイルを処理できます。私たちが好きな方法をプログラムし、ツールに最適化(接続など)を残すことができると言っても安全です。

// 从 API 加载用户数据
var getUsersRequest = new XMLHttpRequest();
getUsersRequest.open('GET', '/api/users', true);
getUsersRequest.addEventListener('load', function() {
    // 对用户执行某些操作
});

getUsersRequest.send();

//---------------------------------------------------
// 不同的功能从这里开始。也许
// 这是一个分成文件的时机。
//---------------------------------------------------

// 从 API 加载帖子数据
var getPostsRequest = new XMLHttpRequest();
getPostsRequest.open('GET', '/api/posts', true);
getPostsRequest.addEventListener('load', function() {
    // 对帖子执行某些操作
});

getPostsRequest.send();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

function

関数を使用すると、再利用可能なコードブロックを作成できます。一般に、関数の内容はインデントされているため、関数の開始位置と終了位置を簡単に確認できます。良い習慣は、関数を小さく保つことです-10列以下です。また、関数が正しく命名されたときに関数が呼び出されたときに何が起こるかを理解するのも簡単です。後で命名規則を紹介します。

// 从 API 加载用户数据
function getUsers(callback) {
    var getUsersRequest = new XMLHttpRequest();
    getUsersRequest.open('GET', '/api/users', true);
    getUsersRequest.addEventListener('load', function() {
        callback(JSON.parse(getUsersRequest.responseText));
    });

    getUsersRequest.send();
}

// 从 API 加载帖子数据
function getPosts(callback) {
    var getPostsRequest = new XMLHttpRequest();
    getPostsRequest.open('GET', '/api/posts', true);
    getPostsRequest.addEventListener('load', function() {
        callback(JSON.parse(getPostsRequest.responseText));
    });

    getPostsRequest.send();
}

// 由于命名正确,因此无需阅读实际函数即可轻松理解此代码
// getUsers(function(users) {
//     // 对用户执行某些操作
// });
// getPosts(function(posts) {
//     // 对帖子执行某些操作
// });
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコードを簡素化できます。これらの2つの関数はほとんど同じであることに注意してください。 「自分自身を繰り返さないでください」(ドライ)原則を適用できます。これは混乱を防ぎます。

function fetchJson(url, callback) {
    var request = new XMLHttpRequest();
    request.open('GET', url, true);
    request.addEventListener('load', function() {
        callback(JSON.parse(request.responseText));
    });

    request.send();
}

// 下面的代码仍然很容易理解
// 无需阅读上面的函数
fetchJson('/api/users', function(users) {
    // 对用户执行某些操作
});
fetchJson('/api/posts', function(posts) {
    // 对帖子执行某些操作
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

POSTリクエストを通じて新しいユーザーを作成したい場合はどうなりますか?この時点で、1つのオプションは、関数にオプションのパラメーターを追加して、関数に新しいロジックを導入し、関数になるには複雑すぎるようにすることです。別のオプションは、コードの複製を引き起こすために、投稿リクエスト専用に特別に新しい関数を作成することです。

オブジェクト指向のプログラミングを通じて両方の利点を取得でき、保守性を維持しながら構成可能な単一使用オブジェクトを作成できます。

注:オブジェクト指向のJavaScriptの初心者が必要な場合は、このビデオをお勧めします。オブジェクト指向のJavaScriptの権威あるガイド< オブジェクト指向のプログラミング

一般にクラスと呼ばれるオブジェクトを考慮します。これは、コンテキスト対応関数のセットです。オブジェクトは、専用ファイルを入れるのに理想的です。この例では、XMLHTTPREQUESTの基本的なラッパーを構築できます。

httpRequest.js

function HttpRequest(url) {
    this.request = new XMLHttpRequest();

    this.body = undefined;
    this.method = HttpRequest.METHOD_GET;
    this.url = url;

    this.responseParser = undefined;
}

HttpRequest.METHOD_GET = 'GET';
HttpRequest.METHOD_POST = 'POST';

HttpRequest.prototype.setMethod = function(method) {
    this.method = method;
    return this;
};

HttpRequest.prototype.setBody = function(body) {
    if (typeof body === 'object') {
        body = JSON.stringify(body);
    }

    this.body = body;
    return this;
};

HttpRequest.prototype.setResponseParser = function(responseParser) {
    if (typeof responseParser !== 'function') return;

    this.responseParser = responseParser;
    return this;
};

HttpRequest.prototype.send = function(callback) {
    this.request.addEventListener('load', function() {
        if (this.responseParser) {
            callback(this.responseParser(this.request.responseText));
        } else {
            callback(this.request.responseText);
        }
    }, false);

    this.request.open(this.method, this.url, true);
    this.request.send(this.body);
    return this;
};
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
app.js

new HttpRequest('/users')
    .setResponseParser(JSON.parse)
    .send(function(users) {
        // 对用户执行某些操作
    });

new HttpRequest('/posts')
    .setResponseParser(JSON.parse)
    .send(function(posts) {
        // 对帖子执行某些操作
    });

// 创建一个新用户
new HttpRequest('/user')
    .setMethod(HttpRequest.METHOD_POST)
    .setBody({
        name: 'Tim',
        email: 'info@example.com'
    })
    .setResponseParser(JSON.parse)
    .send(function(user) {
        // 对新用户执行某些操作
    });
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
上記で作成されたHTTPREQUESTクラスは非常に構成可能であり、多くのAPI呼び出しに適用できます。実装(一連のチェーンメソッド呼び出し)はより複雑ですが、クラスの機能は容易に維持できます。実装と再利用性のバランスは困難であり、プロジェクト固有の場合があります。

設計パターンは、OOPを使用する場合に最適です。彼らはそれ自体で読みやすさを向上させることはありませんが、一貫性はあります!

人工文法

ファイル、関数、オブジェクト、これらはラフな行です。彼らはあなたのコードを簡単にスキャンできます

。コードを読みやすくすることは、より細心の芸術です。わずかな詳細は大きな影響を与える可能性があります。たとえば、ラインの長さを80文字に制限することは簡単なソリューションであり、通常は垂直線を介して編集者によって強制されます。しかし、もっとあります! name 適切な命名は、値が何であるか、または関数の役割を見つけることなく、即座に認識される可能性があります。

関数は通常、ラクダの命名法を使用します。通常、動詞から始めてから被写体から始めるのに役立ちます。

// 从 API 加载用户数据
var getUsersRequest = new XMLHttpRequest();
getUsersRequest.open('GET', '/api/users', true);
getUsersRequest.addEventListener('load', function() {
    // 对用户执行某些操作
});

getUsersRequest.send();

//---------------------------------------------------
// 不同的功能从这里开始。也许
// 这是一个分成文件的时机。
//---------------------------------------------------

// 从 API 加载帖子数据
var getPostsRequest = new XMLHttpRequest();
getPostsRequest.open('GET', '/api/posts', true);
getPostsRequest.addEventListener('load', function() {
    // 对帖子执行某些操作
});

getPostsRequest.send();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

変数名の場合は、逆ピラミッド法を適用してみてください。トピックは前に配置され、属性は後ろに配置されます。

// 从 API 加载用户数据
function getUsers(callback) {
    var getUsersRequest = new XMLHttpRequest();
    getUsersRequest.open('GET', '/api/users', true);
    getUsersRequest.addEventListener('load', function() {
        callback(JSON.parse(getUsersRequest.responseText));
    });

    getUsersRequest.send();
}

// 从 API 加载帖子数据
function getPosts(callback) {
    var getPostsRequest = new XMLHttpRequest();
    getPostsRequest.open('GET', '/api/posts', true);
    getPostsRequest.addEventListener('load', function() {
        callback(JSON.parse(getPostsRequest.responseText));
    });

    getPostsRequest.send();
}

// 由于命名正确,因此无需阅读实际函数即可轻松理解此代码
// getUsers(function(users) {
//     // 对用户执行某些操作
// });
// getPosts(function(posts) {
//     // 对帖子执行某些操作
// });
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

通常の変数と特別な変数を区別できることも重要です。たとえば、定数の名前は通常、大文字で記述され、下線が引かれます。

function fetchJson(url, callback) {
    var request = new XMLHttpRequest();
    request.open('GET', url, true);
    request.addEventListener('load', function() {
        callback(JSON.parse(request.responseText));
    });

    request.send();
}

// 下面的代码仍然很容易理解
// 无需阅读上面的函数
fetchJson('/api/users', function(users) {
    // 对用户执行某些操作
});
fetchJson('/api/posts', function(posts) {
    // 对帖子执行某些操作
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

クラスは通常、大文字から始まるラクダの命名法を使用します。

function HttpRequest(url) {
    this.request = new XMLHttpRequest();

    this.body = undefined;
    this.method = HttpRequest.METHOD_GET;
    this.url = url;

    this.responseParser = undefined;
}

HttpRequest.METHOD_GET = 'GET';
HttpRequest.METHOD_POST = 'POST';

HttpRequest.prototype.setMethod = function(method) {
    this.method = method;
    return this;
};

HttpRequest.prototype.setBody = function(body) {
    if (typeof body === 'object') {
        body = JSON.stringify(body);
    }

    this.body = body;
    return this;
};

HttpRequest.prototype.setResponseParser = function(responseParser) {
    if (typeof responseParser !== 'function') return;

    this.responseParser = responseParser;
    return this;
};

HttpRequest.prototype.send = function(callback) {
    this.request.addEventListener('load', function() {
        if (this.responseParser) {
            callback(this.responseParser(this.request.responseText));
        } else {
            callback(this.request.responseText);
        }
    }, false);

    this.request.open(this.method, this.url, true);
    this.request.send(this.body);
    return this;
};
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

小さな詳細は略語です。略語を大文字にすることを選択する人もいれば、ラクダの命名法に固執することを選択する人もいます。前者を使用すると、その後の略語を特定することがより困難になる場合があります。

シンプルさと最適化

多くのコードベースでは、文字の数を減らすか、アルゴリズムのパフォーマンスを改善するための「特別な」コードが遭遇する可能性があります。

シングルラインコードは、簡潔なコードの例です。残念ながら、彼らは通常、トリックや不明瞭な構文に依存しています。以下に示すネストされた三元演算子は一般的な例です。簡潔ですが、通常のIFステートメントと比較してその効果を理解するのに1〜2秒かかる場合があります。構文のショートカットには注意してください。

new HttpRequest('/users')
    .setResponseParser(JSON.parse)
    .send(function(users) {
        // 对用户执行某些操作
    });

new HttpRequest('/posts')
    .setResponseParser(JSON.parse)
    .send(function(posts) {
        // 对帖子执行某些操作
    });

// 创建一个新用户
new HttpRequest('/user')
    .setMethod(HttpRequest.METHOD_POST)
    .setBody({
        name: 'Tim',
        email: 'info@example.com'
    })
    .setResponseParser(JSON.parse)
    .send(function(user) {
        // 对新用户执行某些操作
    });
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

マイクロ最適化はパフォーマンスの最適化であり、通常はほとんど影響を与えません。ほとんどの場合、それらはより低いパフォーマンスの等価物ほど読みやすいものではありません。

function getApiUrl() { /* ... */ }
function setRequestMethod() { /* ... */ }
function findItemsById(n) { /* ... */ }
function hideSearchForm() { /* ... */ }
ログイン後にコピー
ログイン後にコピー

JavaScriptコンパイラは、私たちのコードの最適化に非常に優れており、常に改善しています。最適化されていないコードと最適化されたコードの違いが明らかでない限り(通常、数千または数百万の操作の後)、読みやすいコードを選択することをお勧めします。

非コード

これは皮肉ですが、コードを読みやすくするためのより良い方法は、実行されない構文を追加することです。それを非コードと呼びましょう。

スペース

すべての開発者が他の開発者にそれを提供しているか、特定のWebサイトの圧縮コードをチェックしていると確信しています - ほとんどのスペースが削除されているコードです。初めてこれに遭遇するのは非常に驚くべきことかもしれません。デザインやタイポグラフィなどの視覚芸術のさまざまな分野では、空白が充填と同じくらい重要です。 2つの間に微妙なバランスを見つける必要があります。このバランスの認識は、企業、チーム、開発者によって異なります。幸いなことに、一般的にによって認識されるいくつかのルールがあります。

1行につき1つの式、
    インデントブロックの含有量、
  • 追加のラインブレークを使用して、コードセクションを分離できます。
  • 他のルールは、一緒に働く人と議論する必要があります。同意するコードスタイルに関係なく、一貫性が重要です。

コメント
var element = document.getElementById('body'),
    elementChildren = element.children,
    elementChildrenCount = elementChildren.length;

// 定义一组颜色时,我在变量前加“color”前缀
var colorBackground = 0xFAFAFA,
    colorPrimary = 0x663399;

// 定义一组背景属性时,我使用 background 作为基准
var backgroundColor = 0xFAFAFA,
    backgroundImages = ['foo.png', 'bar.png'];

// 上下文可以改变一切
var headerBackgroundColor = 0xFAFAFA,
    headerTextColor = 0x663399;
ログイン後にコピー

スペースと同様に、コメントはコードにいくつかのスペースを提供し、コードに詳細を追加できるようにするための優れた方法です。表示にコメントを追加してください:

非自明なコードの解釈と議論、
  • 解決されたエラーまたは例外と利用可能なソースを修正しました。
すべての修正が明白ではありません。追加情報を追加すると、多くのことを明確にすることができます:
var URI_ROOT = window.location.href;
ログイン後にコピー
// 从 API 加载用户数据
var getUsersRequest = new XMLHttpRequest();
getUsersRequest.open('GET', '/api/users', true);
getUsersRequest.addEventListener('load', function() {
    // 对用户执行某些操作
});

getUsersRequest.send();

//---------------------------------------------------
// 不同的功能从这里开始。也许
// 这是一个分成文件的时机。
//---------------------------------------------------

// 从 API 加载帖子数据
var getPostsRequest = new XMLHttpRequest();
getPostsRequest.open('GET', '/api/posts', true);
getPostsRequest.addEventListener('load', function() {
    // 对帖子执行某些操作
});

getPostsRequest.send();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

インラインドキュメント

オブジェクト指向ソフトウェアを作成する場合、通常のコメントのようなインラインドキュメントは、コードに呼吸スペースを提供できます。また、属性または方法の目的と詳細を明確にするのにも役立ちます。多くのIDはプロンプトにそれらを使用し、生成されたドキュメントツールもそれらを使用します!理由が何であれ、ドキュメントを書くことは優れた習慣です。

// 从 API 加载用户数据
function getUsers(callback) {
    var getUsersRequest = new XMLHttpRequest();
    getUsersRequest.open('GET', '/api/users', true);
    getUsersRequest.addEventListener('load', function() {
        callback(JSON.parse(getUsersRequest.responseText));
    });

    getUsersRequest.send();
}

// 从 API 加载帖子数据
function getPosts(callback) {
    var getPostsRequest = new XMLHttpRequest();
    getPostsRequest.open('GET', '/api/posts', true);
    getPostsRequest.addEventListener('load', function() {
        callback(JSON.parse(getPostsRequest.responseText));
    });

    getPostsRequest.send();
}

// 由于命名正确,因此无需阅读实际函数即可轻松理解此代码
// getUsers(function(users) {
//     // 对用户执行某些操作
// });
// getPosts(function(posts) {
//     // 对帖子执行某些操作
// });
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

コールバックの問題

イベントと非同期呼び出しはJavaScriptの強力な機能ですが、通常、コードの読み取りが難しくなります。

非同期コールは通常、コールバックを使用して提供されます。時々、それらを順番に実行するか、すべての非同期呼び出しが準備ができているのを待ちます。

function fetchJson(url, callback) {
    var request = new XMLHttpRequest();
    request.open('GET', url, true);
    request.addEventListener('load', function() {
        callback(JSON.parse(request.responseText));
    });

    request.send();
}

// 下面的代码仍然很容易理解
// 无需阅读上面的函数
fetchJson('/api/users', function(users) {
    // 对用户执行某些操作
});
fetchJson('/api/posts', function(posts) {
    // 对帖子执行某些操作
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Promiseオブジェクトは、ES2015(ES6とも呼ばれます)で導入され、両方の問題を解決しました。ネストされた非同期リクエストを平らにすることができます。

function HttpRequest(url) {
    this.request = new XMLHttpRequest();

    this.body = undefined;
    this.method = HttpRequest.METHOD_GET;
    this.url = url;

    this.responseParser = undefined;
}

HttpRequest.METHOD_GET = 'GET';
HttpRequest.METHOD_POST = 'POST';

HttpRequest.prototype.setMethod = function(method) {
    this.method = method;
    return this;
};

HttpRequest.prototype.setBody = function(body) {
    if (typeof body === 'object') {
        body = JSON.stringify(body);
    }

    this.body = body;
    return this;
};

HttpRequest.prototype.setResponseParser = function(responseParser) {
    if (typeof responseParser !== 'function') return;

    this.responseParser = responseParser;
    return this;
};

HttpRequest.prototype.send = function(callback) {
    this.request.addEventListener('load', function() {
        if (this.responseParser) {
            callback(this.responseParser(this.request.responseText));
        } else {
            callback(this.request.responseText);
        }
    }, false);

    this.request.open(this.method, this.url, true);
    this.request.send(this.body);
    return this;
};
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

他のコードを導入しましたが、これは正しく説明しやすいです。 Promiseの詳細はこちらをご覧ください:JavaScriptは非同期(そして素晴らしい)になります

es6/es2015

脂肪矢印構文は、親の範囲からこの値を継承する関数を定義します。少なくとも、それが設計された理由です。また、通常の機能を定義するために使用することも魅力的です。

new HttpRequest('/users')
    .setResponseParser(JSON.parse)
    .send(function(users) {
        // 对用户执行某些操作
    });

new HttpRequest('/posts')
    .setResponseParser(JSON.parse)
    .send(function(posts) {
        // 对帖子执行某些操作
    });

// 创建一个新用户
new HttpRequest('/user')
    .setMethod(HttpRequest.METHOD_POST)
    .setBody({
        name: 'Tim',
        email: 'info@example.com'
    })
    .setResponseParser(JSON.parse)
    .send(function(user) {
        // 对新用户执行某些操作
    });
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
別の例は、残りの例と拡散構文です。

function getApiUrl() { /* ... */ }
function setRequestMethod() { /* ... */ }
function findItemsById(n) { /* ... */ }
function hideSearchForm() { /* ... */ }
ログイン後にコピー
ログイン後にコピー
つまり、ES2015仕様では、多くの便利だがあいまいな、時には混乱する構文を導入します。これらの機能が使用されないようにしたくありません。私はそれらを使用するように注意することを奨励したいと思っています。

結論

プロジェクトのあらゆる段階で、コードを読みやすく保守可能に保つことを忘れないでください。ファイルシステムから小さな構文の選択まですべてが重要です。特にチームでは、常にすべてのルールを実施することは困難です。コードレビューは役立ちますが、まだ人為的エラーの余地があります。幸いなことに、これを行うのに役立つツールがいくつかあります!

    jshint-コードエラーを維持するためのjavascript言語チェッカー
  • イディオマティック - 人気のあるコードスタイルの標準ですが、
  • から逸脱することができます
  • editorConfig - エディター全体でコードスタイルを定義します
コードの品質とスタイルのツールに加えて、コードを読みやすくするツールがあります。さまざまな構文を強調表示するテーマを試してみるか、最小限を使用してスクリプトのトップダウンの概要(Atom、Brackets)を表示してみてください。

読みやすく保守可能なコードを書くことについてどう思いますか?以下のコメントであなたの考えを聞きたいです。

読み取り可能なコードに関するFAQ

なぜコードは人間のために読みやすいのですか?

コードの読みやすさは、以下の理由で重要です。まず、コードの理解、デバッグ、メンテナンスが容易になります。コードが読みやすい場合、他の開発者がコードの役割を理解しやすくなります。これは、共同環境で特に重要です。第二に、読みやすいコードが正しい可能性が高いです。開発者がコードを簡単に理解できる場合、コードを変更するときにエラーを導入する可能性は低いです。最後に、非常に読みやすいコードのテストが簡単です。コードが明確で簡潔な場合、テストする必要があるものとテスト方法を判断するのは簡単です。

プログラミング言語を読みやすくするのはなぜですか?

言語は、明確で簡潔な構文があり、意味のある識別子を使用し、コードの効果を説明するコメントを含む場合、読みやすいと見なされます。 PythonやRubyなどの高レベルの言語は、英語のような構文を使用し、明確で説明的な変数名を可能にするため、読みやすいと見なされることがよくあります。ただし、一貫したインデント、スペースの使用、包括的な注釈などの優れたコーディングプラクティスを通じて、CやJavaなどの低レベル言語の読みやすさを改善することもできます。

関数はコードの量をどのように減らしますか?

関数は、開発者がそれを再利用できるようにすることにより、コードの量を大幅に減らすことができます。同じコードを複数回記述する代わりに、関数を一度書き、特定のタスクを実行する必要があるときに電話をかけます。これにより、コードが短くて読みやすくなるだけでなく、1か所で変更する必要があるため、コードを維持してデバッグしやすくなります。

マシンコードと高レベルの言語の違いは何ですか?

マシンコードは、コンピューターの中央プロセッサ(CPU)が直接実行できるバイナリコードで構成される最低レベルのプログラミング言語です。一方、高レベルの言語は人間の言語に近づいており、実行前にコンパイラまたはインタープリターによってマシンコードに変換される必要があります。高レベルの言語は、多くの場合、読み書きが簡単で、ハードウェアをより抽象化し、さまざまな種類のマシン間で簡単に移植できるようにします。

通訳者とコンパイラはどのように機能しますか?

通訳者とコンパイラは、高レベルの言語をマシンコードに変換するためのツールです。インタープリターは、インタラクティブなエンコードとデバッグを可能にするコードラインをラインごとに翻訳および実行します。ただし、これはコードをコンパイルするよりも遅い場合があります。一方、コンパイラは、実行前にプログラム全体をマシンコードに変換し、実行速度を向上させる可能性があります。ただし、コードエラーは、プログラム全体がコンパイルされた後にのみ発見できます。

アセンブリ言語とは何ですか?

アセンブリ言語は、ニーモニックコードを使用してマシンコード命令を表す低レベルのプログラミング言語です。各アセンブリ言語は、特定のコンピューターアーキテクチャに固有です。マシンコードよりも読みやすいですが、高レベルの言語よりも読み書きが難しいです。ただし、ハードウェアを直接制御できます。これは、場合によっては非常に便利です。

コードの読みやすさを改善するにはどうすればよいですか?

コードの読みやすさを改善する方法はいくつかあります。これらの方法には、意味のある変数と関数名の使用、コードの一貫したインデント、コードのさまざまな部分のスペースを分離し、コードの役割を説明するコメントが含まれます。また、使用しているプログラミング言語の慣習とベストプラクティスに従うことも重要です。

コードを読み取り可能にする上で注釈はどのような役割を果たしますか?

コメントは、コードを読み取り可能にする上で重要な役割を果たします。それらは、コードの機能、特定の決定が下される理由、および複雑なコードパーツがどのように機能するかについての説明を提供します。これは、コードを理解して使用する必要がある他の開発者にとって非常に役立ちます。ただし、コメントを簡潔に関連し、コードが変更されたときに更新することが重要です。

読みやすいコードはコラボレーションにどのように影響しますか?

非常に読みやすいコードは、コラボレーションを大幅に促進します。コードが読みやすい場合、他の開発者が貢献を理解し、関与する方が簡単です。これは、複数の開発者がコードベースのさまざまな部分で作業している大規模プロジェクトで特に重要です。また、読み取り可能なコードにより、新しいチームメンバーがグループに登場しやすくなり、コードが何をし、どのように機能するかを迅速に理解できるためです。

非常に読みやすいコードは、ソフトウェアの品質にどのように影響しますか?

非常に読みやすいコードは、ソフトウェアの品質を大幅に向上させることができます。コードが読みやすい場合、エラーを見つけて修正し、コードがすべきことを実行していることを確認するのが簡単です。また、コードの各部分の役割を明確に示しているため、時間の経過とともにソフトウェアを維持および強化しやすくなります。これにより、より信頼性が高く、効率的で、より強力なソフトウェアにつながる可能性があります。

以上が人間が読むことができるコードを書くことの重要性の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート