エラー処理は、堅牢で信頼性の高いソフトウェアを作成する上で重要な側面です。ただし、慎重に行わないと、コードが乱雑になり、読みにくく、保守しにくくなる可能性があります。
『クリーン コード』の第 7 章では、コードを乱雑にしないエラー処理手法について詳しく説明し、明確さと単純さを強調します。
この記事では、この章の重要な概念と、それを JavaScript に適用してコードベースをクリーンで保守しやすい状態に保つ方法について説明します。
クリーン コードの重要な原則の 1 つは、エラー コードよりも例外を優先することです。
例外を使用すると、エラー処理ロジックをメイン ロジックから分離できるため、コードが読みやすくなります。
例: エラー コードを避ける
function getUser(id) { const user = database.findUserById(id); if (user === null) { return -1; // Error code for user not found } return user; } const result = getUser(123); if (result === -1) { console.error('User not found'); } else { console.log(result); }
この例では、エラー処理がメイン ロジックと絡み合っているため、理解するのが難しくなります。
例: 例外を使用する
function getUser(id) { const user = database.findUserById(id); if (user === null) { throw new Error('User not found'); } return user; } try { const user = getUser(123); console.log(user); } catch (error) { console.error(error.message); }
例外を使用することで、エラー処理ロジックをメイン ロジックから分離し、コードをよりクリーンで理解しやすくします。
例外をスローするときは、エラーに関するコンテキストを示す意味のあるエラー メッセージを提供することが重要です。
これは、コードを詳しく調べる必要がなく、問題を迅速に診断するのに役立ちます。
例: エラー メッセージにコンテキストを提供する
function getUser(id) { const user = database.findUserById(id); if (user === null) { throw new Error(`User with ID ${id} not found`); } return user; } try { const user = getUser(123); console.log(user); } catch (error) { console.error(error.message); // Outputs: User with ID 123 not found }
説明的なエラー メッセージは、問題をすぐに理解するために必要なコンテキストを提供します。
null を返すと、追跡が困難な null 参照エラーが発生する可能性があります。
null を返す代わりに、例外をスローするか、デフォルトの動作を提供する特殊なケース パターンを使用することを検討してください。
例: Null を返さないようにします
function getUser(id) { const user = database.findUserById(id); if (user === null) { return null; // This can lead to null reference errors } return user; } const user = getUser(123); if (user !== null) { console.log(user.name); }
null を返すには追加のチェックが必要となり、コードが煩雑になる可能性があります。
例: 例外をスローするか、特殊なケースを使用する
function getUser(id) { const user = database.findUserById(id); if (user === null) { throw new Error(`User with ID ${id} not found`); } return user; } // OR class NullUser { get name() { return 'Guest'; } } function getUser(id) { const user = database.findUserById(id); return user || new NullUser(); }
例外をスローするか、特殊なケースのオブジェクト (NullUser など) を使用すると、null 参照エラーを回避し、コードをクリーンに保つことができます。
try-catch-finally ブロックは例外を処理するために不可欠ですが、使いすぎるとコードが乱雑になる可能性があります。
必要な場合にのみ使用し、深くネストされたブロックは避けてください。
例: 過剰な Try-Catch を避ける
try { const data = JSON.parse(input); try { const user = getUser(data.id); try { sendEmail(user.email); } catch (error) { console.error('Failed to send email:', error.message); } } catch (error) { console.error('User retrieval failed:', error.message); } } catch (error) { console.error('Invalid JSON:', error.message); }
このコードは、複数のネストされた try-catch ブロックがあるため、従うのが困難です。
例: 乱雑さを減らすためのリファクタリング
function parseInput(input) { try { return JSON.parse(input); } catch (error) { throw new Error('Invalid JSON'); } } function retrieveUser(data) { return getUser(data.id); } function notifyUser(user) { sendEmail(user.email); } try { const data = parseInput(input); const user = retrieveUser(data); notifyUser(user); } catch (error) { console.error(error.message); }
ロジックを個別の関数に分割することで、ネストが減り、読みやすさが向上します。
例外をキャッチした場合は、必ず適切に処理してください。
例外を黙って無視すると、予期しない動作が発生し、デバッグが困難になる可能性があります。
例: 例外を無視しない
try { const user = getUser(123); } catch (error) { // Ignoring the exception }
例外を無視すると、コード内の潜在的な問題が隠れてしまう可能性があります。
例: 例外を処理またはログに記録する
try { const user = getUser(123); } catch (error) { console.error('An error occurred:', error.message); }
例外を処理またはログに記録することで、問題を認識し、それに応じて対処できるようになります。
クリーンで保守可能な JavaScript コードを作成するには、効果的なエラー処理が不可欠です。
クリーン コードの原則 (エラー コードの代わりに例外を使用する、エラー メッセージにコンテキストを提供する、null を返すことを回避する、try-catch を控えめに使用する、キャッチされた例外を無視しないなど) に従うことで、エラー処理ロジックを確実に実行できます。堅牢かつ目立たないものです。
コーディングを楽しんでください!
以上がクリーンコードの理解: 処理 ⚡の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。