ホームページ >ウェブフロントエンド >jsチュートリアル >クリーン コードについて何を理解すればよいですか?
ソフトウェア開発のベスト プラクティスの詳細: クリーン コードについての考察
優れたソフトウェア開発の実践について研究を始めたとき、私は「クリーンコード」 (クリーンコード) を、コードを読みやすくするための単純なルールのセットとして想像しました。 部分的には、この認識は正しいです。ただし、これらのルールは常にすべての種類のコードに適用されるわけではなく、本を読んだだけでは完全に理解できないことは確かです。
クリーンなコード: 継続的な旅
最近、ロバート C. マーティンによる古典的なクリーン コードを再読しましたが、私の理解は 6 年前に最初に読んだときとは大きく異なりました。 当時大学生だった私には、提示された問題や解決策の多くは完全に明確ではありませんでした。 これは大きな誤解です。きれいなコードは初心者向けではありません。
「...あなたが医師で、手術に時間がかかりすぎるという理由だけで、手術に備えた手洗いをすべてやめるよう患者に要求されたらどうしますか? [...] プログラマーが要求に屈するのはプロフェッショナルとしてはふさわしくありません。紛らわしいコードを生成するリスクを理解していない偉大なマネージャーの意志です。」
この記事では、私の読んだ内容から関連する点を強調し、実際の経験を共有します。
機能: 単一の責任
よく書かれた関数は、単一の責任を負う必要があります。つまり、1 つのことを実行し、それを適切に実行し、それだけを実行する必要があります。 複数の責任を 1 つの役割にグループ化すると、コードの読み取り、テスト、保守が困難になります。
複数の責任を持つロールの例 (保存とユーザーへの通知):
<code>function salvarUsuarioENotificar(usuario) { // Valida os dados do usuário if (!usuario.nome || !usuario.email) { throw new Error('Dados do usuário incompletos.') } // Salva no banco de dados bancoDeDados.salvar(usuario) // Envia um e-mail de boas-vindas emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!') }</code>
リファクタリング後、特定の役割における各責任:
<code>function validarUsuario(usuario) { if (!usuario.nome || !usuario.email) { throw new Error('Dados do usuário incompletos.') } } function salvarUsuario(usuario) { bancoDeDados.salvar(usuario) } function enviarEmailDeBoasVindas(usuario) { emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!') } function processarCadastroDeUsuario(usuario) { validarUsuario(usuario) salvarUsuario(usuario) enviarEmailDeBoasVindas(usuario) }</code>
各関数が単一の責任を持つようになり、コードがより読みやすくなり、保守が容易になりました。
コメント: わかりやすい名前を優先します
コメントは便利ですが、重複を避けるためにわかりやすい名前を優先してください。 明らかなコメントはコードを汚染します。
不要なコメントの例:
<code>/** Dia do mês **/ private number diaDoMes;</code>
より明確な名前とコメントなしで改善されました:
<code>private number diaDoMesAtual;</code>
オブジェクトとデータ構造: カプセル化と明確性
優れたオブジェクト指向設計は、操作の公開と実装の詳細の非表示に重点を置いています。 これによりカプセル化が促進され、結合が減少し、メンテナンスが容易になります。
クラスでのカプセル化の例 Circulo
:
<code>class Circulo implements Forma { private Ponto centro; private number raio; private number PI = 3.14159; public number calcularArea() { return PI * raio * raio; } }</code>
異なる目的のために異なるスコープで変数を再利用することは避けてください。 より明確にするために、個別の変数を使用します。
エラー処理: 複数のチェックではなく例外
以前は、エラー処理には制限がありました。 現在、例外を使用すると、コードがよりクリーンになり、読みやすくなります。
複数の検証を含む冗長コードの例:
<code>function salvarUsuarioENotificar(usuario) { // Valida os dados do usuário if (!usuario.nome || !usuario.email) { throw new Error('Dados do usuário incompletos.') } // Salva no banco de dados bancoDeDados.salvar(usuario) // Envia um e-mail de boas-vindas emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!') }</code>
例外を使用したリファクタリング:
<code>function validarUsuario(usuario) { if (!usuario.nome || !usuario.email) { throw new Error('Dados do usuário incompletos.') } } function salvarUsuario(usuario) { bancoDeDados.salvar(usuario) } function enviarEmailDeBoasVindas(usuario) { emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!') } function processarCadastroDeUsuario(usuario) { validarUsuario(usuario) salvarUsuario(usuario) enviarEmailDeBoasVindas(usuario) }</code>
単体テスト: 明確さと焦点
クリーンなテストは、明確、シンプル、そして一貫性がなければなりません。 少ない表現で多くの情報を伝えます。
テストの一般的な構造: 構築、運用、検証。
クラス: SRP (単一責任原則)
クラスの名前は、その責任を反映する必要があります。 クラスは少人数で、目的は 1 つである必要があります。 SRP は、各クラスが 1 つの責任だけを持つことを保証します。
結論: クリーンなコードは旅です
クリーンなコードは一度に学習することはできません。それは実践、反省、進化を必要とする継続的な旅です。 真のスキルには経験と改善点を確認する能力が伴います。 Kent Beck のルール (テスト、重複の回避、明確さ、クラスとメソッドの最小化) は貴重なガイドです。
以上がクリーン コードについて何を理解すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。