محمدرضا مصباحی
محمدرضا مصباحی
خواندن ۳ دقیقه·۴ سال پیش

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

Explicit is better than implicit
Explicit is better than implicit

همانطور که در بخش ۱ از سری مقاله های Zen of Python اشاره شد، در این مجموعه مقالات هدف ما تشریح و درک این اصول 19 گانه و در نهایت رسیدن به الگوی Clean Code نه تنها به عنوان راهنمای اصول طراحی در پایتون، بلکه در همه زبان های برنامه نویسی است. در مقاله قبلی اولین فلسفه یعنی Beautiful is better than ugly را با هم دیدیم و تاکید این اصل که بر خوانایی کد است را با مثال هایی با هم بررسی کردیم.

در این مقاله به تفسیر و تحلیل اصل دوم می پردازیم.

Explicit is better than implicit.

همانطور که خود عبارت “بیان صریح بهتر از ضمنی است.” گویا است، بهتر است که کد نوشته شده شفاف و صریح باشد. با در نظر گرفتن این رویکرد، کد شما قابلیت خوانایی بیشتری خواهد داشت. پنهان کردن عملکرد یک قطعه کد ممکن است عواقب زیادی داشته باشد زیرا سایر برنامه ها ممکن است قادر به درک کد نباشند.

یکی از مصادیق اصلی این اصل هنگامی است که شما می خواهید در برنامه از یک Library استفاده کنید. برای این کار، نه تنها در زبان برنامه نویسی پایتون، بلکه در بسیاری از زبان های دیگر هم چون ES6، Typescript، Java و ...، شما از کلمه کلیدی import استفاده می کنید. در بسیاری از مواقع برنامه نویسان برای load بیش از یک Module از * در هنگام import کردن یک library در کد استفاده میکنند که باعث می شود همه ماژول ها دردسترس باشند، اما همانطور که بدیهی است صراحت و شفافیت کد که در واقع به طور دقیق از کدام ماژول ها استفاده خواهد شد کاسته می شود. برای درک بهتر این مفهوم مثال زیر را در نظر بگیرید:

مسئله: "مدل های cat، dog و mouse را load کنید تا بتوانیم نمونه هایی از آنها را ویرایش کنیم."

برای انجام این عمل هر دو راهکار زیر قابل اعمال است:

Solution#1:

def load(): from menagerie.cat.models import * from menagerie.dog.models import * from menagerie.mouse.models import *

Solution#2:

def load(): from menagerie.models import cat as cat_models from menagerie.models import dog as dog_models from menagerie.models import mouse as mouse_models

همانطور که مشخص است در Solution#2 به طورصریح و Explicit مدل ها فراخوانی و بنابراین به راهکار دیگر ترجیح داده می شود شده اند.

نکته دیگر در این اصل را می‎توان توجه به نامگذاری در فراخوانی Module ها دانست. بهتر است هر بار که یک ماژول را فراخوانی می‎کنید، صریحاً آن را نامگذاری کنید. مثال زیر را در نظر بگیرید:

from math import sin def sin(a): return &quotNot Commenting is a sin&quot print(sin(1))

سوالی که در اینجا مطرح است، این است که کدام sin در اینجا فراخوانی شده است؟

اگر برای استفاده از Module ها کد را به صورت زیر Refactor کنیم و هر بار برای فراخوانی یک ماژول صریحاً آن را نامگذاری کنیم خوانایی و شفافیت بیشتری وجود خواهد داشت و مشکل قبلی که ناشی از عدم بیان Explicit در کد است از بین خواهد رفت.

import math def sin(a): return &quotNot Commenting is a sin&quot print(sin(1)) print(math.sin(1))
Explicit is better than implicit
Explicit is better than implicit


در این مقاله سعی کردیم با مثال هایی مفهوم Explicit is better than implicit در PEP 20 را توضیح دهیم. در مقاله بعدی با هم به بحث Simple is better than complex می پردازیم.

pythonپایتونذن پایتونthe zen of pythonprogramming
توسعه دهنده وب، بلاکچین و سیستم های نرم افزاری، مشاور و معمار نرم افزار
شاید از این پست‌ها خوشتان بیاید