خوانایی بیشتر برای درک بهتر

پیش از این در مورد خوانایی و قابلیت حمل زبان‌های برنامه‌نویسی صحبت‌هایی داشته‌ایم. همان‌طور که می‌دانید ساختار برخی زبان‌ها به شکلی طراحی شده است که به زبان گفتار نزدیک بوده و با خواندن آن تا حدودی می‌توان منطق آن را درک کرد و در مقابل بعضی زبان‌ها هستند که 2 مفهوم کاملا مشابه با تفاوتی بسیار کوچک از هم شناخته می‌شوند و به این ترتیب گاهی خواننده را به اشتباه می‌اندازند و شاید خود نویسنده برنامه نیز در نوشتن آن اشتباه کرده و حتی پس از پی بردن به اشکال، در یافتن و اشکال‌زدایی آن به مشکل بر بخورد.
کد خبر: ۲۱۹۱۰۰

نقش برنامه‌نویس در خوانایی

علاوه بر این که یک زبان و نحوه پیاده‌سازی آن در خوانایی یک برنامه نقش دارد، نقش بزرگ‌تر در این زمینه، برنامه‌نویس و طریقه نوشتن او ایفا خواهند کرد. هرچقدر یک زبان، قابلیت‌های زیادی داشته باشد، رعایت نکردن برخی اصول و عدم توجه برنامه‌نویس به آنها می‌تواند در نهایت به یک برنامه نامنظم و ناخوانا منتج شود.

اکثر زبان‌های برنامه‌نویسی سطح بالای امروزی انواع کاراکترهای کنترلی و فاصله را در برنامه نادیده می‌گیرند.
معمولا به غیر از ثابت‌های رشته‌ای که هر چه در آن قرار دهیم همان را در خروجی دریافت خواهیم کرد، می‌توان در هر جای برنامه به هر تعداد از کاراکتر tab   یا space استفاده کرد یا به تعداد دلخواه، بین خطوط enter زد و اطمینان داشت که هیچ‌یک از آنها در برنامه نهایی تاثیر نخواهد داشت. (البته بین کلمات کلیدی و اجزای برنامه‌نویسی وجود یک کاراکتر فاصله الزامی است و در غیر این صورت کامپایلر اعلام خطا خواهد کرد. منظور ما، کاراکترهایی اضافه، علاوه بر آنهایی که لازم هستند؛ است).

اعمال تورفتگی در متن برنامه

از این خصوصیت که کامپایلر، کاراکترهای فاصله اضافه را نادیده می‌گیرد می‌توان به بهترین شکل در بالا بردن نظم و خوانایی برنامه استفاده کرد. در ساختارهای تو در تو و بلاک‌های داخل هم، مفهومی به نام تورفتگی یا فرورفتگی وجود دارد که رعایت آن به برنامه نظم داده، خوانایی آن را بالا برده و اشکال‌یابی و اشکال‌زدایی آن را ساده می‌سازد، اما رعایت نکردن آن در خروجی برنامه بی‌تاثیر است و تنها ممکن است برنامه‌نویس را دچار اشتباه و سردرگمی کند. تورفتگی به این شکل است که هنگامی که یک بلاک جدید از برنامه آغاز می‌شود، دستورات داخل آن بلاک نسبت به بلاک بیرونی از چند کاراکتر جلوتر آغاز شود و تمام دستورات داخل آن بلاک زیر هم و از چند کاراکتر جلوتر ادامه پیدا کنند. در صورتی که درون آن بلاک نیز بلاک جدیدی باز شد، باز هم دستورات آن نسبت به این بلاک از چند کاراکتر جلوتر شروع شود. در صورت پایان یافتن آن بلاک نیز دستورات بعدی، به همان تعداد کاراکتر عقب‌تر ادامه پیدا کنند. معمولا در IDE زبان‌های برنامه‌نویسی، هنگامی که چند کاراکتر به جلو برویم برای راحتی برنامه‌نویس، هر بار که enter  بزنیم، خط جدید از محل شروع خط قبلی آغاز می‌شود و این کار به طور خودکار تا هر جا که لازم باشد انجام می‌شود. یک نمونه از ساختار تورفتگی را در مثال زیر مشاهده می‌کنید:


  ( )function f
begin


If  (…) then
begin


 If  (…) then


;end
;end

به دلیل این‌که فاصله‌های اضافی تاثیری در نتیجه برنامه ندارند گاهی می‌توان همه برنامه را نیز در یک خط نوشت و تمام دستورات را به دنبال هم قرار داد. این کار به هیچ عنوان توصیه نمی‌شود. برای راحتی درک برنامه بهتر است هر دستور در یک خط نوشته شود و دستورات بلند، حتی‌الامکان در جای مناسبی به دو بخش یا بیشتر شکسته شده طوری که انتهای دستور از نمایشگر خارج نشود و در صورت چاپ آن روی کاغذ، عرض کاغذ برای تمام قسمت‌های آن دستور کافی باشد. گاهی نیز لازم است برای تاکید بیشتر روی دو دستور که به هم وابسته‌اند آنها را در یک خط نوشت. (در صورت کوتاه بودن دستورات)‌ به طور کلی چینش چگونگی نظم‌بخشی به خطوط برنامه کاملا به سلیقه برنامه‌نویس مربوط می‌شود و  توجه کافی در این زمینه مسلما به نفع او بوده و در نتیجه کار او هم از نظر کیفی و هم زمانی تاثیر‌گذار خواهد بود.

نامگذاری مناسب

بعضی زبان‌های قدیمی در نامگذاری شناسه‌ها محدودیت‌ قائل می‌شوند. اما اکثر زبان‌های امروزی نام‌گذاری شناسه‌ها با طول بلند را نیز جایز می‌شمارند. می‌توان از این قابلیت نیز در جهت بالا بردن خوانایی برنامه و توانایی درک آن استفاده کرد.

به عنوان مثال در یک برنامه برای نگه‌داشتن «نام پدر»  می‌توان از متغیری به نام A‌ استفاده کرد. یا با کمی تخفیف از حرف F‌ (حرف اول کلمه Father)‌ استفاده کرد!‌ اما این‌ یک اشکال بزرگ دارد. اگر شخص دیگری برنامه شما را ببیند متوجه نمی‌شود که در منطق برنامه شما، متغیر a یا f  برای نگهداری چه مفهومی در نظر گرفته شده است. خود برنامه‌نویس نیز ممکن است پس از گذشت مدت زمان طولانی، با رجوع به برنامه خود، به خاطر نیاورد که a‌ یا f را به چه منظوری تعریف کرده است. بنابراین بهتر است برای متغیرها نام مناسب و مربوط به محتوای آن انتخاب کنیم. مثلا در مثال قبل، انتخاب شناسه father name در هر زمان برای هر کسی گویای این خواهد بود که این متغیر برای نگهداری «نام پدر» در نظر گرفته شده است.

برخی برنامه‌نویسان با دانستن این مساله باز ترجیح می‌دهند از نام‌های کوتاه استفاده کنند و دلیل آنها برای این کار نیز سادگی و سرعت تایپ و جلوگیری از خط در تایپ نام‌های طولانی است. این دلیل در ویراستارهای قدیمی تا حدی قانع کننده است. اما در ویراستارهای جدید اغلب امکانی به نام Autocomplete وجود دارد که به برنامه‌ساز امکان می‌دهد با کمترین میزان تایپ و تنها با وارد کردن حروف اول شناسه، گزینه مورد نظر خود را از لیست ظاهر شده به راحتی انتخاب کند. این امکان، هم سرعت را افزایش می‌دهد هم اشتباه تایپ را از بین می‌برد و هم امکان نامگذاری‌های بلندتر را بدون اشکال می‌سازد.

دلیل دیگری نیز برای برنامه‌نویسان جهت استفاده از نام‌های کوتاه و بی‌مفهوم وجود دارد و آن بالا بردن امنیت کد است. به عبارتی آنها بر این اعتقادند که ما می‌دانیم هر چیز را برای چه استفاده کرده‌ایم و یا در جایی برای خودمان ثبت می‌کنیم. اما می‌خواهیم اگر تصادفا این کد دست بیگانه افتاد، در درک آن دچار مشکل شود و از آن سر درنیاورد. این توجیه تا حدی قابل قبول است. حتی امروزه نرم‌افزارهایی وجود دارند که کد برنامه‌های متن باز مثل جاوا اسکریپت یا Php را به شکلی درمی‌آورند که درک آن تا حد امکان مشکل شود و به این ترتیب امنیت آن را در برابر سرقت بالا می‌برند.

مستندسازی

یکی از مهم‌ترین کارهایی که یک برنامه‌نویس باید در برنامه‌نویسی خود رعایت کند مفهوم مستندسازی یا Self Documenting است. بعد از این که این مفهوم را توضیح دادیم، همیشه آن را به خاطر داشته باشید و در برنامه‌نویسی خود از آن استفاده کرده و قواعد آن را در برنامه خود رعایت کنید.

هر زبان برنامه‌نویسی، از اسمبلی گرفته تا جدیدترین زبان‌ها امکاناتی برای قرار دادن توضیحات یا Comment در برنامه در نظر گرفته‌اند. مثلا در زبان اسمبلی اگر بعد از دستوری علامت سمی کالن (;)‌ قرار دهید اسمبلر تا پایان خط را نادیده می‌گیرد و به خط بعد می‌رود. در نتیجه شما می‌توانید بعد از سمی کالن هر چه دلتان می‌خواهد در برنامه بنویسید. در زبان C++ و دلفی، سمی کالن یک کاراکتر اصلی و مهم است که هر دستور باید با آن پایان یابد، اما استفاده از دو backslash پشت سر هم (//)‌ در هر کجای برنامه باعث می‌شود که تا انتهای خط توسط کامپایلر نادیده گرفته شود و نوشته‌های بعد از آن هیچ گونه تاثیری در خروجی برنامه و فایل نهایی نخواهند داشت. امکان اضافه کردن توضیحات چندخطی یا بخشی از یک خط نیز وجود دارد. در C++ استفاده از /*…*/ و در دلفی {…} برای این نوع توضیحات به کار می‌رود. در واقع کامپایلر در C++ بعد از دیدن /* و در دلفی بعد از دیدن { آنقدر کاراکترهای بعدی را نادیده می‌گیرد تا به ترتیب در C++ و دلفی به */ و } برسد.

بنابراین شما می‌توانید شروع هر بخش، پایان هر بخش، دلیل استفاده از یک متغیر، مقداری که انتظار می‌رود یک متغیر در جایی داشته باشد، کاری که یک دستور یا یک تابع انجام می‌دهد و هر آنچه که فکرش را می‌کنید در برنامه اضافه کنید تا هم خودتان و هم هر کس دیگر که برنامه را می‌خواند کل منطق آن را متوجه شود. به ساختار یک نمونه توضیحات گذاری در دلفی توجه کنید:

a function for Input // 
( )Function f
Begin
If p = = 1 {Input is ready} then

End
در مثال فوق عبارت a function for input و هر آنچه بعد از آن تا پایان خط بیاید همچنین نوشته‌های داخل { } یعنی Input is ready توسط کامپایلر نادیده گرفته می‌شود و می‌تواند حتی به زبان فارسی باشد.

بنابراین شما مشخص کرده‌اید که تابع ( )f برای گرفتن ورودی است و وقتی متغیر P برابر یک شود یعنی ورودی آماده است. به کدی که در آن توضیحات گذاری به میزان کافی رعایت شده باشد یک کد مستندسازی شده یا خودمستندسازی شده گفته می‌شود و این نوع امتیاز بالایی خواهد داشت.

پارسا ستوده‌نیا

newsQrCode
ارسال نظرات در انتظار بررسی: ۰ انتشار یافته: ۰

نیازمندی ها