راهنمای اصول طراحی پایتون: The Zen of Python (بخش ۱)

همانطور که همه برنامه نویسان پایتون آشنا هستند برای استفاده از Libraryها و Packageهای مختلف در Python از کلمه کلیدی import به همراه نام library در مقابل آن استفاده می کنیم. اما آیا تا به حال this را import کردید؟import thisخروجی دستور import this در پایتون: The Zen of Pythonبله این ها در حقیقت جملات قصاری هستند که به Zen of Python مشهور هستند. (PEP 20)در حقیقت Zen of Python مجموعه ای از 19 "اصل راهنما" برای نوشتن برنامه های کامپیوتری است که بر طراحی زبان برنامه نویسی Python تأثیر می گذارد. مهندس نرم افزاری با نام Tim Petersاین مجموعه اصول را در سال 1999 نوشت و در لیست پستی پایتون قرار داد. لیست Peters اصل 20ام را با عنوان "for Guido to fill in" خالی گذاشت تا گویدو ون روسوم، نویسنده اصلی زبان پایتون، اصل 20ام را ارائه کند. اما جای خالی اصل 20ام هنوز پر نشده است.در سری مقاله های Zen of Python با هم با این اصول 19 گانه طراحی برنامه که به نوعی Best Practice هایی در جهت نوشتن کد Readable هستند و تفسیر معانی آن ها خواهیم پرداخت. در ادامه این مقاله به توضیح فلسفه اول خواهیم پرداخت.1. Beautiful is better than ugly.Beautiful is better than uglyبرنامه نویس بودن، تنها به نوشتن یکسری کد و اجرای آن ها نیست. Python زبانی است که به خاطر ویژگی های خوانایی (Readability) و سادگی (Simplicity) کدنویسی آن شناخته شده است. اگر شما یک Data Science هستید ممکن است غالبا کدی را بنویسید که به سادگی جواب دهد و شاید شما بیشتر به کارایی زمانی و میزان مصرف منابع اهمیت دهید، اما به ندرت خوانایی کد مورد توجه شما باشد. اما نوشتن کد تمیز و خوانا هنری است که باعث تحسین شما از طرف سایر برنامه نویسان شده و به آن ها این امکان را می دهد که بتوانند ذره ذره کد شما را درک کنند.هر چند در بسیاری از زبان های برنامه نویسی، "زیبا" بودن کد اجباری نیست، اما Python به عنوان یک زبان برنامه نویسی برای حفظ consistency، readability و simplicity طراحی شده است. به طور مثال تفاوت Syntax ای همچون استفاده از and، or در پایتون در مقابل || و && در بسیاری از زبان هایی همچون C، C++ و ... یکی از این حفظ زیبایی و خوانایی ها است.if ( condition_1 && var1 == 0 || flag == 'yes') { // Code here... }در مقایسه با کد Python زیر:if condition_1 and var1 == 0 or flag == 'yes': # Code here...نکته دیگر در فلسفه طراحی Python، استفاده قابل توجه از Whitespace و تاکید بر خوانایی کد و درحقیقت توجه به Indentation style در آن است. در Python برخلاف بسیاری از زبانهای دیگر که از Bracket {} برای نشان دادن بلوک کد استفاده می‎شود، از فضای سفید برای نشان دادن آن ها استفاده می شود که باعث پیاده سازی Indentation style ودر نتیجه افزایش قابلیت خوانایی کد می شود و شما را به عنوان برنامه نویس مجبور به نوشتن کد خوانا می کند. اما بسیاری موراد دیگر وجود دارد که برنامه نویس باید به آن ها توجه کند و سعی در نوشتن کد خوانا داشته باشد. به طور مثال کد زیر را در نظر بگیرید:def isEven(num): if num %2 == 0: return True else: return Falseدر کد بالا نیازی به افزودن "else" نیست. در اینجا وجود "else" غیر ضروری است. بنابراین، برای بهتر و تمیزتر کردن آن می توان کد را به این صورت Refactor‌ کرد:def isEven(num): if num %2 == 0: return True return Falseبه عنوان آخرین مثال از بحث Beautiful is better than ugly مساله زیر را در نظر بگیرید:"پیاده سازی تابعی که لیستی از اعداد را دریافت کرده و لیستی از مجذور اعداد زوج آن را برمی گرداند."دو راهکار زیر را در نظر بگیرید:Solution #1:squareEvens = lambda nums: map(lambda i:i**2, filter(lambda i: not i%2, nums))Solution #2:def squareEvens(nums): return [i**2 for i in nums if not i % 2]هر دو راهکار بالا جواب مساله شما را خواهند داد، اما همانطور که از ظاهر کد مشخص است راهکار Solution #2 قابلیت خوانایی بالاتر و سادگی بیشتری را دارد و بنابراین از نقطه نظر Code Readability مناسب تر است.در این مقاله سعی کردیم با مثال هایی مفهوم Beautiful is better than ugly در PEP 20 را توضیح دهیم. در مقاله بعدی با هم به بحث Explicit is better than implicit می پردازیم.