بلاک کد و تورفتگی؛ نظم پنهان در برنامهنویسی
بلاک کد چیست و چطور تشکیل میشود؟
فرض کنید در حال نوشتن یک دستور شرطی هستید که میگوید: «اگر نمرهی دانشآموز از 12 بیشتر بود، به او بگو قبول شدی و یک پیام تبریک هم برایش بنویس.» اینجا دو دستور داریم که هر دو فقط وقتی اجرا میشوند که نمره از 12 بیشتر باشد. برای اینکه کامپیوتر بفهمد هر دوی این دستورها به شرط مربوط میشوند، آنها را بهصورت یک بلاک کد مینویسیم. یعنی هر دو دستور را با فاصلهی یکسان از سمت چپ صفحه شروع میکنیم. به این فاصلهی ابتدای خط، «تورفتگی» میگویند. در بسیاری از زبانهای برنامهنویسی مثل پایتون، این فاصلهها کاملاً ضروری هستند و اگر رعایت نشوند، برنامه با خطا مواجه میشود. در زبانهایی مثل جاوااسکریپت یا سیپلاسپلاس، از آکولاد ({ }) برای مشخص کردن بلاک استفاده میشود، اما تورفتگی همچنان به خواناتر شدن کد کمک میکند.
بیایید یک مثال ساده بزنیم. فرض کنید میخواهیم برنامهای بنویسیم که اگر سن کاربر از 18 بیشتر بود، ابتدا پیام «ورود مجاز است» را چاپ کند، سپس «خوش آمدید» را هم بنویسد. اگر این دو دستور را با تورفتگی یکسان بنویسیم، هر دو جزو بلاک شرط هستند. اما اگر دستور دوم را بدون تورفتگی بنویسیم، دیگر جزو شرط نیست و همیشه اجرا میشود، حتی اگر سن کاربر کمتر از 18 باشد. این تفاوت کوچک در ظاهر، تأثیر بزرگی در رفتار برنامه دارد. به همین دلیل، برنامهنویسان به تورفتگی و بلاکبندی کد خود خیلی دقت میکنند تا اشتباهات ناخواسته پیش نیاید.
چرا تورفتگی مهم است و چه کاربردی دارد؟
تورفتگی فقط برای زیبایی کد نیست؛ بلکه یک ابزار قدرتمند برای سازماندهی و خوانایی برنامه است. وقتی کد شما چندین شرط و حلقهی تو در تو دارد، تورفتگی به شما کمک میکند ببینید هر دستور در کدام سطح از برنامه قرار دارد. مثلاً اگر یک حلقهی for داریم که داخل آن یک شرط if نوشته شده، دستورهای مربوط به شرط باید یک تورفتگی بیشتر از دستورهای مربوط به حلقه داشته باشند. این کار باعث میشود وقتی کد را چند روز بعد دوباره میخوانید، بهراحتی متوجه ساختار آن شوید. همچنین وقتی چند برنامهنویس روی یک پروژه کار میکنند، رعایت تورفتگی یکسان باعث میشود کد برای همه قابلفهم باشد.
یک کاربرد دیگر تورفتگی، مشخص کردن دستورهایی است که باید چند بار تکرار شوند. فرض کنید میخواهیم 5 بار عبارت «سلام دنیا!» را چاپ کنیم. اگر دستور چاپ را با تورفتگی داخل حلقهی for قرار دهیم، 5 بار اجرا میشود. اما اگر اشتباهاً آن را بدون تورفتگی بنویسیم، فقط یک بار چاپ میشود و بقیهی تکرارها هیچ کاری نمیکنند. پس تورفتگی مشخص میکند که کدام دستورها باید تکرار شوند و کدامها فقط یک بار اجرا گردند. این موضوع در حلقههای تو در تو اهمیت بیشتری پیدا میکند، چون ممکن است چندین سطح تورفتگی داشته باشیم و هر سطح نشاندهندهی عمق تو رفتگی در حلقهها و شرطهاست.
| نوع نوشتار | کد نمونه | نتیجهی اجرا |
|---|---|---|
| تورفتگی درست |
if age > 18: print("ورود مجاز است") print("خوش آمدید") |
هر دو پیام فقط در صورت بزرگتر بودن سن از 18 چاپ میشوند. |
| تورفتگی نادرست |
if age > 18: print("ورود مجاز است") print("خوش آمدید") |
پیام اول فقط در صورت بزرگتر بودن سن و پیام دوم همیشه چاپ میشود. |
پرسشهای کلیدی و اشتباهات رایج دربارهی بلاک کد
خیر، در برخی زبانها مثل پایتون، تورفتگی برای اجرای صحیح برنامه ضروری است و اگر نادرست باشد، برنامه خطا میدهد. در زبانهای دیگر، تورفتگی به خوانایی کمک میکند ولی اجرای برنامه را تحت تأثیر قرار نمیدهد.
دستورهایی که باید تحت تأثیر یک شرط یا حلقه اجرا شوند، باید با فاصلهی یکسان از سمت چپ نوشته شوند. معمولاً این فاصله معادل 4 فاصله یا یک تب است.
بله، به این کار «بلاک تو در تو» میگوییم. مثلاً میتوانیم یک شرط را داخل یک حلقه قرار دهیم. در این حالت، دستورهای شرط باید یک تورفتگی بیشتر از دستورهای حلقه داشته باشند.
در زبانهایی مثل پایتون، برنامه با خطا متوقف میشود. در زبانهای دیگر ممکن است برنامه بهدرستی اجرا شود اما خواندن و فهمیدن کد برای خودتان و دیگران بسیار سخت میشود.
بلاک کد به گروهی از دستورها گفته میشود که با تورفتگی یکسان نوشته میشوند و محدودهی اجرای شرطها و حلقهها را تعیین میکنند. تورفتگی هم برای خوانایی و هم برای اجرای درست برنامه اهمیت دارد. با رعایت تورفتگی، میتوانیم کدهای پیچیده را بهخوبی سازماندهی کنیم و از اشتباهات جلوگیری کنیم. همچنین بلاکها میتوانند تو در تو باشند و هر سطح تورفتگی نشاندهندهی عمق تو رفتگی در ساختار برنامه است. بهخاطر داشته باشید که در بعضی زبانها، تورفتگی نادرست باعث خطا میشود و در بقیهی زبانها، خوانایی کد را کاهش میدهد.