Nested در لغت به معنای «تودرتو» است که از واژهٔ Nest به معنی «لانه» ساخته شده است. در صنعت توسعهٔ نرمافزار وقتی به طور مثال یک فانکشن حاوی فانکشنهای دیگری باشد، گفته میشود که مجموعهٔ آنها به صورت اصطلاحاً Nested در کنار یکدیگر قرار گرفتهاند به طوری که مثلاً در زبان جاوااسکریپت یک Nested Function به صورت زیر است:
function outerFunction() {
function innerFunction() {
// code
}
}
گرچه کدهای تودرتو به دولوپرها کمک میکنند تا الگوریتمهای پیچیدهای را پیادهسازی کنند اما در عین حال منجر به پیچیدگی سورسکد میشوند و از همین روی توصیه میشود که تا حد امکان بلوکهایی همچون دستورات شرطی یا حلقهها ساده نگاه داشته شوند که در غیر این صورت با مدل زیر مواجه خواهیم شد:
if
if
if
if
do something
endif
endif
endif
endif
همانطور که در بلوک فوق مشاهده میشود، ساختار همچون یک پیکان شکل گرفته که به آن اصطلاحاً Arrow Anti Pattern گفته میشود که درکش آنطور که باشد و شاید آسان نیست. به عنوان یک Nested Loop هم داریم:
for (int i = 1; i <= 5; ++i) {
// codes inside the body of outer loop
for (int j = 1; j <=2; ++j) {
// codes inside the body of both outer and inner loop
}
// codes inside the body of outer loop
}
برای درک بهتر مفهوم کدهای تودرتو، در ادامه مثالی واقعی از زبان جاوااسکریپت خواهیم زد:
var a = 10;
var b = 11;
var c = 12;
var answer;
if (a == b) {
if (a == c) {
answer = "all are equal";
} else {
answer = "a and b are equal";
}
} else {
if (a == c) {
answer = "a and c are equal";
} else {
if (b == c) {
answer = "b and c are equal";
} else {
answer = "all are different";
}
}
}
با اختصاص اعداد مختلف به متغیرهای خطوط اول تا سوم، میتوانیم ببینیم که به چه شکل مقادیر مختلفی از طریق دستورات شرطی Nested (تودرتو) به متغیر answer
اختصاص خواهد یافت.