Clean Code
Hibakezelés
Tiszta hibakezelés kivételekkel, specifikus hibatípusokkal és naplózással.
Hibakezelés (Error handling)
A hibakezelés nem opcionális kiegészítő – szerves része a tiszta kódnak. Egy rosszul kezelt hiba ugyanolyan rossz, mint egy bug.
Használj kivételeket, ne hibajelző return értékeket
// ❌ Rossz – a hívónak ellenőriznie kell a visszatérési értéket
function divide(a, b) {
if (b === 0) return null;
return a / b;
}
const result = divide(10, 0);
if (result === null) {
console.log('Error');
}// ✅ Javított – explicit kivételkezelés
function divide(a, b) {
if (b === 0) {
throw new Error('Division by zero is not allowed');
}
return a / b;
}
try {
const result = divide(10, 0);
} catch (error) {
console.error('Calculation failed:', error.message);
}Ne nyeld el a hibákat
// ❌ Rossz – a hiba eltűnik, a fejlesztő soha nem tudja meg mi történt
try {
riskyOperation();
} catch (e) {
// semmi
}// ✅ Javított – a hiba naplózva van, és megfelelően kezelt
try {
riskyOperation();
} catch (error) {
logger.error('riskyOperation failed', { error: error.message, stack: error.stack });
throw error; // vagy fallback logika
}Specifikus hibatípusok
// ❌ Rossz – általános Error, kevés kontextus
throw new Error('Something went wrong');// ✅ Javított – saját hibaosztályok egyértelmű üzenettel
class UserNotFoundError extends Error {
constructor(userId) {
super(`User with ID "${userId}" was not found`);
this.name = 'UserNotFoundError';
this.userId = userId;
}
}
throw new UserNotFoundError(42);Ne add vissza a null-t mindenhol
// ❌ Rossz – a null ellenőrzés az egész kódon átterjedhet
function getUser(id) {
const user = db.find(id);
return user || null;
}
const user = getUser(5);
if (user !== null) {
if (user.profile !== null) {
console.log(user.profile.name);
}
}// ✅ Javított – dobjon kivételt, vagy használj Optional pattern-t
function getUser(id) {
const user = db.find(id);
if (!user) throw new UserNotFoundError(id);
return user;
}Rövid összefoglaló
- Használj kivételeket null/hibakód visszatérési értékek helyett.
- Soha ne nyeld el a hibákat – naplózz és/vagy dobd tovább.
- Hozz létre specifikus hibaosztályokat a pontosabb hibakezelés érdekében.