بندهای نگهبان Guard Clauses

بحث های زیادی وجود داره درباره اینکه چطوری باید از عبارات شرطی استفاده کرد تا خوانایی کد بهتر بشه.

بیشتر اونها به این نتیجه میرسن که نحوه استفاده از عبارات شرطی کاملا به برنامه نویس بستگی داره و یه چیز ذهنی هست البته بیشتر موقع ها این درسته.

اما بعضی مواقع میشه از یه قانون کلی پیروی کرد.

هدف این نوشته اینه که یه سری پیشنهاد کلی برای طراحی این عبارات به شما بده.

امیدوارم این مقاله باعث بشه سرعت تولید برنامه هاتون افزایش پیدا کنه.

 

 بندهای نگهبان Guard Clauses

این مفهوم میگه که وقتی قرار هست چیزی رو تایید کنید اول تابع این کار رو انجام بدید و در صورت نادرست بودن پیش نیاز، با یک return اجرا رو متوقف کنید

زمانی که ابتدای تابع، شرط هایی که باید درست باشن تا تابع اجرا بشه رو قرار بدیم به اونها میگیم بندهای نگهبان.

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

تو ادامه مقاله درباره مواقعی صحبت میکنیم که عبارات شرطی میتونن به بندهای نگهبان تبدیل بشن.

بلاک های شرطی بزرگ

خیلی پیش میاد که یه کدی مثل این ببینید

معمولا از اولش قرار نبوده که این کد این شکلی باشه. این بلاک ها زمانی به وجود میاد که نیازمندی های جدید به برنامه اضافه بشه که هدفش این هست که کدی در صورت وجود X اجرا بشه که راحت ترین راه حلش هم قرار دادن اونها در یک عبارت شرطی هست.

راحته نه؟

مشکل اینجاست که این کد فقط موقع نوشتن راحت هست و نه موقع خوندن.

برای اینکه کد رو بفهمید باید کل روال رو درک کرده باشید، به دلیل اینکه آدم ها تو درک کردن یک مفهوم توانا هستند نه درک کردن الگوریتم.

اضافه کردن این شرط ها در ابتدای تابع باعث به وجود اومدن پیچیدیگی بیشتر میشه و این باید تو ذهنمون بمونه وقتی که با تابع اجرایی اصلی برنامه کار میکنیم.

نا گفته پیداست که ما باید این پیچیدگی ها رو به حداقل برسونیم.

مشکل بعدی که به وجود میاد این هست که منطق تابع اینقدر طولانی میشه که تو یک صفحه جا نمیشه و برای خوندن کل کد باید اسکرول کرد.

برای اینکه این مشکلات به وجود نیاد کافیه عبارات شرطی رو برعکس کنید و اون رو به یک بند نگهبان تبدیل کنید

شما اول از پیش شرطهای تابع خلاص میشید(همچنین اونها رو از ذهنتون هم میریزید بیرون و به منطق اصلی تابع تمرکز میکنید) و بعد از اون کار اصلی که تابع باید انجام بده رو پیاده میکنید.

return کردن در میانه کد

داشتن چند return یک ایده بد هست به دلایل مختلف.

تو نگاه اول یک return یا raise کردن یک خطا در میانه کد به راحتی قابل شناسایی نیست، این باعث میشه تفسیر کد پیچیده بشه.

در نظر داشته باشید که در شرایط خاص منطق اصلی برنامه اجرا نخواهد شد و هر دفعه که منطق جدیدی به تابع اضافه میشه شما باید تصمیم بگیرید که اون رو قبل یا بعد از این return قرار بدید.

این مثال رو ببینید

شبیه پیش شرط هست درسته؟ حالا اون رو جایی میزاریم که باید باشه

کد جدید رو خیلی راحت میشه خوند به دلیل اینکه هیچ شرطی در تابع اصلی برنامه نداریم و فقط تعدادی عملیات هستند که باید انجام بشن.

عملیات های شرطی کوچیک

خیلی پیش میاد که ما شرط های کوچیک زیادی تو کدمون داشته باشیم

مورد بالا شاید خیلی عادی به نظر بیاد اما میشه به عنوان پیش شرط بهش نگاه کرد، در نتیجه باید تو تابع گذاشته بشه نه تابع اصلی برنامه.

مشکل اصلی اینجاست که هر زمانی که بخواید از این تابع استفاده کنید باید اون پیش شرط ها رو قبل صدا زدن تابع بزارید.

راه درست اینه که پیش شرط ها رو هم در تابع قرار بدیم

 

منبع

 

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *