დღევადელ ბლოგში ვისაუბრებ JavaScript-ში ეგრედ წოდებულ inversion pattern-ზე რომელიც გვეხმარება ჩვენი კოდი იყოს მეტად წადითხვადი და ნაკლებად ჩახლართული.
მოცემული პატერნი საშუალებას გვაძლევს თავი ავარიდოთ ე.წ. deep nesting-ს, რომელიც ბევრად რთულია წასაკითხად და გასააზრებლად, ვიდრე სწორხაზოვანი კოდი.
თუ ოდესმე შეგხვედრიათ კოდი, სადაც if
-ის ბლოკები ერთმანეთშია ჩაშენებული და თვალის დევნება გიჭირთ, სწორედ ესაა deep nested კოდი.
ჩახლართული (nested) კოდი ჰგავს ლაბირინთს — რაც მეტი დონეა, მით უფრო რთულია მისი გაგება. მაგალითად, წარმოიდგინეთ, რომ გვაქვს ფუნქცია, რომელიც ამუშავებს შეკვეთას:
მაგალითი:
function processOrder(order) {
if (order) {
if (order.items) {
if (order.items.length > 0) {
console.log("Order contains", order.items.length, "items");
} else {
console.log("No items in the order");
}
} else {
console.log("Order has no items property");
}
} else {
console.log("No order provided");
}
}
ეს კოდი შესანიშნავად მუშაობს, მაგრამ ნახეთ, რამდენად ღრმაა ჩაშენებული ლოგიკა. თითოეული if
ამატებს ახალ ბლოკს, რაც ართულებს კითხვას.
სწორედ მსგავს პრობლემას აგვარებს inversion pattern
როგორც თავად სიტყვები გვეუბნება მოცმული მიდგომით ჯერ ვამოწმებთ იმას, თუ რა შეიძლება იყოს არასწორი, და თუ ასეა დავასრულოთ ფუნქცია return
-ის დახმარებით, რაც ნიშნავს იმას, რომ return
-ის შემდეგ ჩაწერილი კოდი ფუნქციაში უბრალოდ არ შესრულდება.
მსგავსი მიდგომით ჩვენი კოდი გახდება მეტად სწორხაზოვანი და წასაკითხადაც შედარებით მარტივია.
მაგალითი:
function processOrder(order) {
if (!order) {
console.log("No order provided");
return;
}
if (!order.items) {
console.log("Order has no items property");
return;
}
if (order.items.length === 0) {
console.log("No items in the order");
return;
}
console.log("Order contains", order.items.length, "items");
}
თუ მოცემულ მაგალითს გავიაზრებთ შეგვიძლია გამოვყოთ სამი პუნქტი თუ რა უპირატესობა აქვს მსგავს მიდგომას
ასევე მეტი თვალსაჩინოებისთვის შეგვიძლია მოვიყვანოთ კიდევ ერთი inversion pattern-ის მაგალითი.
მაგალითი:
function processUser(user) {
if (!user) {
console.log("No user provided");
return;
}
if (user.age < 18) {
console.log("User is underage");
return;
}
if (!user.accountActive) {
console.log("Account is inactive");
return;
}
console.log("User is eligible:", user.name);
}
მოცემულ მაგალითშიც ძალიან მარტივად ჩანს თუ რას აკეთებს ფუნქცია თითოეულ ბიჯზე, თუ არცერთი if
ბლოკი არ შესრულდა უბრალოდ დაიბეჭდება "User is eligible:" user.name.
მოცემული პატერნის გამოყენების რამდენიმე წესი არსებობს.
null
ან undefined
-სif else
-ის nested თანმიმდევრობებიinversion pattern არის მარტივი, მაგრამ ძლიერი ხერხი, რომელიც თქვენს JavaScript კოდს უფრო გასაგებს ხდის. ის გვასწავლის, რომ ჯერ "არა"-ს ვუპასუხოთ და მხოლოდ შემდეგ გადავიდეთ "დიახ"-ზე. თუ გსურთ, სცადეთ ეს მიდგომა თქვენს პროექტში — გპირდებით, თქვენი კოდი გახდება უფრო სუფთა და მოწესრიგებული