Clean Code JavaScript-ում
DRY, KISS, YAGNI և SOLID սկզբունքները։
Մաքուր կոդը (Clean Code) ոչ միայն կարդացվող և հասկանալի կոդ է, այլև այնպիսի կոդ, որը հեշտ է թեստավորել, ընդլայնել և աջակցել։ JavaScript-ում հաճախ դժվար է պահպանել մաքրությունը, հատկապես երբ արագ լուծումներ ենք փնտրում։ Այս հոդվածում մենք կծանոթանանք հիմնական սկզբունքներին, որոնք օգնում են գրել ավելի լավ կառուցված կոդ։
Դրանք են՝ DRY, KISS, YAGNI և SOLID սկզբունքները։
// Վատ օրինակը
function calculateRectangleArea(width, height) {
return width * height;
}
function calculateRectanglePerimeter(width, height) {
return 2 * width + 2 * height;
}
function describeRectangle(width, height) {
const area = width * height;
const perimeter = 2 * width + 2 * height;
return `Area: ${area}, Perimeter: ${perimeter}`;
}
Լավ տարբերակ՝ վերօգտագործում ենք լոգիկան.
function calculateRectangleArea(width, height) {
return width * height;
}
function calculateRectanglePerimeter(width, height) {
return 2 * (width + height);
}
function describeRectangle(width, height) {
const area = calculateRectangleArea(width, height);
const perimeter = calculateRectanglePerimeter(width, height);
return `Area: ${area}, Perimeter: ${perimeter}`;
}
Առավելությունները՝
// Վատ օրինակը
function isEven(num) {
return num % 2 === 0 ? true : false;
}
Լավ տարբերակ՝
function isEven(num) {
return num % 2 === 0;
}
Առավելությունները՝
// Վատ օրինակը՝ ավելորդ ֆունկցիոնալություն
function sendMessage(user, message, isUrgent = false, sendCopyToAdmin = false) {
// այս պահի դրությամբ admin-ին պատճեն ուղարկելու անհրաժեշտություն չկա
if (sendCopyToAdmin) {
// ուղարկել admin-ին
}
// ուղարկել օգտատիրոջը
}
Լավ տարբերակ՝
function sendMessage(user, message) {
// ուղարկել օգտատիրոջը
}
Առավելությունները՝
SOLID-ը բաղկացած է 5 սկզբունքից, որոնք օգնում են գրել ավելի ճկուն և ընդլայնելի կոդ։
// Վատ օրինակը
class UserManager {
createUser(userData) { /* ստեղծել օգտատեր */ }
sendWelcomeEmail(user) { /* ուղարկել նամակ */ }
}
// Լավ տարբերակ
class UserManager {
createUser(userData) { /* ստեղծել օգտատեր */ }
}
class EmailService {
sendWelcomeEmail(user) { /* ուղարկել նամակ */ }
}
Առավելությունները՝
// Վատ օրինակը
function discount(price, type) {
if (type === 'regular') return price;
if (type === 'vip') return price * 0.9;
}
// Լավ տարբերակ՝ ընդլայնելի դասեր
class RegularCustomer {
getDiscount(price) {
return price;
}
}
class VipCustomer {
getDiscount(price) {
return price * 0.9;
}
}
Առավելությունները՝
// Վատ օրինակը
class Bird {
fly() {}
}
class Penguin extends Bird {
fly() {
throw new Error("Penguins can't fly!");
}
}
// Լավ տարբերակ՝ տարբեր հիմքեր
class Bird {}
class FlyingBird extends Bird {
fly() {}
}
class Penguin extends Bird {
swim() {}
}
Առավելությունները՝
// Վատ օրինակը՝ մեծ ինտերֆեյս
class Machine {
print() {}
scan() {}
fax() {}
}
// Լավ տարբերակ՝ մասնագիտացված ինտերֆեյսներ
class Printer {
print() {}
}
class Scanner {
scan() {}
}
Առավելությունները՝
// Վատ օրինակը՝ կոշտ կապ կախվածության վրա
class MySQLDatabase {
save(data) {}
}
class UserService {
constructor() {
this.db = new MySQLDatabase();
}
}
// Լավ տարբերակ՝ կախվածությունը փոխանցվում է
class UserService {
constructor(database) {
this.db = database;
}
}
Առավելությունները՝