قبلاً گفتم که اوّلین قانون برای یادگرفتن این که چطور برنامه بنویسیم، این است: باید برنامه نوشت (و امتحان کرد)؛ نه فقط دربارهٔ برنامهنویسی مطلب خواند. حالا میخواهم به شما دومین قانون برنامهنویسی را بگویم که یکی از کم شنیدهترین رازها برای نوشتن یک برنامهٔ خوب است.
مهم
قانون شمارهٔ ۲
طوری برنامه بنویسید که بقیّه راحت بتوانند آن را بخوانند.
بله؛ درست است، برنامههایتان را طوری بنویسید که بقیّه، مثل شما، به تنهایی آن را راحت بفهمند و درک کنند که برنامهٔ شما چه کاری میکند. درست مانند زبانهای بشری که تکامل پیدا کرده اند تا آدمها با هم ارتباط برقرار کنند؛ زبانهای برنامهنویسی هم طوری طرّاحی شدهاند که به شما این اجازه را میدهند تا به سادگی با رایانهها ارتباط برقرار کنید. برنامهنویسها اغلب از زبانهای رایانه - که خیلی سادهتر از زبان انسانها هستند- برای انتقال دانستهها و کارهایشان با دیگر برنامهنویسهای دیگر استفاده میکنند.
میخواهم اینجا به شما برترین ابزاری را معرفی کنم که کمک میکند تا برنامههایی را بنویسید که فهمیدنش برای بقیّه راحتتر است: یادداشتها (comments)
یادداشتها نوشتههایی هستند که برنامهنویسها توی برنامه مینویسند و رایانه آنها را هنگام اجرای برنامه نادیده میگیرد. هدف از بودنشان این است که فقط آدمها آنها را بخوانند و بفهمند.
هنگام استفاده از پایتون، میشود به یکی از این دو روش یادداشت نوشت:
با محصور کردن مقدار دلخواهی از متن بین سه تا علامت نقل قول مثل: """ ... """
یا ''' ... '''
.
در هر سطر برنامه با نوشتن متن بعد از علامت #
ابتدا، یک برنامهٔ ساده بدون یادداشت مینویسم، که در ادامهاش یک نسخهٔ یادداشتدار آن را هم میآورم. ضمناً در هر دویشان اشتباه یکسانی را مرتکب میشوم. اشتباه را میتوانید در برنامهٔ اوّل راحتتر پیدا کنید یا دومی؟
move()
move()
turn_left()
put()
move()
move()
turn_left()
put()
move()
turn_left()
put()
move()
move()
turn_left()
put()
برنامهٔ بالا را از دید ریبرگ با همین برنامه که برای آدمها یادداشت دارد مقایسه کنید. از آنجایی که یادداشتها با رنگ و رسم الخطّ متفاوتی ظاهر میشوند، میتوانید یادداشتها را به سادگی تشخیص بدهید.
''' این مثال یه برنامهٔ سادهست
که توی اون ریبرگ یه مربّع میکشه و هر
گوشهٔ اون یه نشانه میگذاره.'''
move() # دستورهای پایتون در سطرهای جداگانهای هستند
move()
turn_left() # ریبرگ فقط گردش به چپ رو بلده
put() # فرض میکنیم ریبرگ به اندازه کافی نشانه همراه داره
# کار بالا رو سه بار دیگه یا بیشتر انجام میدیم تا مربّع کامل بشه
move()
move()
turn_left()
put()
move()
turn_left()
put()
move()
move()
turn_left()
put()
یادداشتهای بالا آن قدرها هم خوب نیستند، ولی دست کم یکی از آنها میبایست به ما کمک کرده باشد تا مشکل برنامه را پیدا کنیم. شاید فکر کنید این کار تقلّب است. ولی،... چطور میخواهید فقط با خواندن کدها هدف آنها را حدس بزنید؟ اضافه کردن یادداشتهایی که توضیح میدهند یک برنامه چه کار باید بکند در پیدا کردن اشتباهها خیلی مفید است.
دقّت کنید که علاوه بر یادداشتها از سطرهای خالی برای جدا کردن تکّههای منطقی کد استفاده کردهام، تا الگوی کد را بهتر ببینید. به کار بردن یادداشتها و گذاشتن سطرهای خالی -لا به لای کدها و در کنار هم- میتواند خواندن برنامه را خیلی سادهتر کند.
برای مدّرسها
اگر از قبل چگونگی استفاده از نشانوند (argument) تابع را توضیح دادهاید؛ پیشنهاد میکنم مثال بالا را با جایگزین کردن اینها تغییر بدید:
put( )
با:
put('token')
دلیلش هم این است که این کار، هدف برنامه را -برای کسی که کد را فقط صرفاً میخواند- واضحتر میکند.