در آموزشهای گذشته علاوه بر آشنایی با مفاهیم حلقه و دستورات شرطی، با نحوۀ پیادهسازی آنها آشنا شده سپس چگونگی پیادهسازی فانکشنها را آموخته و برخی مزایای استفاده از فانکشن در توسعۀ نرمافزار را برشمردیم مضاف بر اینکه نحوۀ پیادهسازی و فراخوانی یک فانکشن را بررسی نمودیم. حال در این آموزش قصد داریم تا ببینیم که برای مثال چگونه میتوان یک دستور شرطی پیادهسازی کرد که به ازای برخی شرایط خاص هیچ کاری انجام نشود یا یک فانکشن بدون تعریف تَسکی خاص در داخلش پیادهسازی کرد به طوری که سورسکد مربوطه نیز بدون هیچ مشکلی اجرا گردد تا در آینده هر یک از فانکشنهایی که نیاز به تکمیل شدن دارند را توسعه داد.
انجام چنین مواردی در زبان برنامهنویسی پایتون با بهکارگیری دستور pass
امکانپذیر است. در واقع، دستور pass
امکانی را برای دولوپرهای این زبان فراهم میکند تا در صورت لزوم بخشی از کد مانند دستورات داخلی یک فانکشن، ساختار حلقههای تکرار و غیره را در آینده پیادهسازی نمایند به طوری که سورسکد مد نظر از نظر سینتکسی مشکلی نداشته و به راحتی اجرا شود اما با رسیدن به دستور pass
تَسک خاصی انجام نشود.
همچنین با استفاده از دستور pass
میتوان یک کلاس بدون پیادهسازی متدی در آن یا فانکشنی بدون تعریف تَسکهای مورد نظر داخل آن پیادهسازی کرد به علاوه اینکه با بهکارگیری دستور pass
میتوان حلقۀ for
را به نحوی تعریف نمود که مثلاً به ازای برخی اِلِمانهای خاص یکسری دستور اجرا شده و بر روی سایر اِلِمانها پردازش خاصی اِعمال نگردد. بنابراین دستور pass
در توسعۀ نرمافزار با زبان پایتون به منظور مشخص کردن بخشی از سورسکد مورد استفاده قرار میگیرد که نیاز به تکمیل شدن داشته اما از سوی دیگر اپلیکیشن مد نظر میباید بدون هیچگونه مشکلی اجرا گردد.
حال پس از آشنایی با ویژگیهای دستور pass
در زبان برنامهنویسی پایتون، در ادامه قصد داریم تا نحوۀ بهکارگیری آن را در قالب یکسری مثال کاربردی مورد بررسی قرار دهیم.
بهکارگیری دستور pass در حلقههای تکرار
همانطور که در آموزشهای گذشته اشاره کردیم، در زبان برنامهنویسی پایتون با بهکارگیری حلقۀ for
میتوان برای مثال اعضای آبجکتی از نوع دادۀ لیست را پیمایش کرده و به ازای هر یک از اِلِمانهای تشکیلدهندۀ آن یکسری دستور خاص را اجرا کرد. حال شرایطی را در نظر بگیرید که پیادهسازی دستورات مد نظر به منظور اِعمال روی هر یک از اِلِمانهای لیست مذکور نیاز به زمان داریم یا برای مثال قصد داریم تا در آینده تَسک مربوط به حلقههای for
مورد نظر را تکمیل نماییم و فعلاً کاری به آن نداریم که در چنین شرایطی میتوانیم از دستور pass
به صورت زیر استفاده کنیم:
>>> listA = [18, 21, 19, 29, 46]
>>>> for elements in listA:
pass
در مثال فوق، آبجکتی از جنس لیست تحت عنوان listA
ایجاد کرده و یکسری مقدار عددی به آن اختصاص دادهایم. در ادامه، یک حلقۀ for
تعریف کرده و با استفاده از کیورد in
گفتهایم اِلِمانهای listA
به ترتیب به متغیری به نام elements
منتسب شده سپس به ازای هر یک از اِلِمانهای لیست مذکور حلقۀ for
اجرا شود. بنابراین مفسر پایتون وارد حلقه شده و دستورات داخلی آن را اجرا میکند که در حال حاضر صرفاً دستور pass
مبنی بر عدم انجام کاری خاص داخل حلقه است و از همین روی دستور مذکور اجرا شده و مفسر از حلقه خارج میگردد.
بهکارگیری دستور pass در دستورات شرطی
همچنین دستور pass
را میتوانیم در دستورات شرطی مورد استفاده قرار دهیم که بدین ترتیب سورسکدی پیادهسازی میکنیم که در صورت برقراری یکسری شرایط خاص دستور مد نظر را اجرا کرده و در غیر این صورت کار خاصی انجام ندهد که برای مثال داریم:
>>> for elements in listA:
if elements % 2 == 0:
pass
else:
print(elements)
21
19
29
در کد فوق، همچون مثال پیشین، گفتهایم به ازای هر یک از اِلِمانهای آبجکت listA
دستورات داخلی حلقۀ for
اجرا شوند که در دستور سطر دوم گفتهایم چنانچه باقیماندۀ تقسیمِ هر یک از اِلِمانهای لیست مذکور بر عدد 2 برابر با 0 گردد، هیچ دستوری اجرا نشده و در غیر این صورت اِلِمان مورد نظر در خروجی چاپ شود و بدین ترتیب با اجرای کد فوق، به ازای اِلِمانهای زوجِ لیست هیچ دستوری اجرا نشده و اِلِمانهای فرد نیز در خروجی چاپ میشوند.
بهکارگیری دستور pass در تعریف فانکشن
در توسعۀ نرمافزارهای بزرگ برخی مواقع نیاز به پیادهسازی فانکشنی داریم که تَسکهای مد نظر برای این فانکشن به طور کامل طراحی و پیادهسازی نشدهاند که بدین ترتیب میتوانیم فانکشن مربوطه را در بخش مورد نیاز از سورسکد تعریف کرده و دستور pass
را به عنوان تنها دستور داخلی آن درج نماییم. در چنین شرایطی، بخشی از سورسکد مشخص میگردد که فانکشن مورد نظر در آن نیاز به توسعه داشته و میباید در آینده تکمیل شود. به عنوان یک مثال از پیادهسازی چنین فانکشنی داریم:
>>> def sampleFunction(a, b):
pass
در کد فوق، فانکشنی فرضی تحت عنوان ()sampleFunction
با دو پارامتر ورودی تحت عناوین a
و b
تعریف کردهایم که در صورت فراخوانی این فانکشن هیچ تَسکی انجام نمیشود. در واقع، با استفاده از دستور pass
میتوانیم فانکشن مورد نیاز را تعریف کرده و به خاطر داشته باشیم که در آینده منطق مربوط به آن را پیادهسازی کنیم و در چنین شرایطی سورسکد مد نظر از نظر سینتکسی با مشکلی مواجه نشده و به درستی اجرا میشود.
بهکارگیری دستور pass در پیادهسازی کلاس
به علاوه، مشابه آنچه در مثال فوق بیان کردیم، با استفاده از دستور pass
میتوانیم کلاسی را پیادهسازی نماییم که در آینده متدهای مورد نظر را داخل آن تعریف کرده و کلاس مذکور را تکمیل نماییم. برای مثال داریم:
>>> class Sample:
pass
در آموزش آشنایی با مفهوم Class در زبان برنامهنویسی پایتون نحوۀ تعریف کلاس و متدهای متعلق به آن را تشریح نمودیم. جهت یادآوری میتوان گفت که در این مثال با استفاده از کیورد class
کلاسی تحت عنوان Sample
تعریف کردهایم که در ادامه یک علامت :
درج نمودهایم سپس با رعایت تورفتگی وارد بدنۀ کلاس شده و متدهای مورد نظر را داخل آن پیادهسازی میکنیم که در این مثال کلاس Sample
بدون پیادهسازی متدی داخل آن تعریف شده با این توضیح که در آینده متدهای مربوط به کلاس مذکور را پیادهسازی کرده و آن را تکمیل خواهیم نمود. در چنین شرایطی، اجرای کد فوق نیز مشکلی در روند انجام سایر تَسکهای اپلیکیشن به وجود نمیآورد.
حال سؤالی که پیش میآید این است که «چرا جهت مشخص کردن بخشهای مورد نظر از سورسکد که باید در آینده تکمیل شوند از درج کامنت به جای دستور pass
استفاده نمیشود؟» که در پاسخ به این سؤال در ادامه تفاوتهای مابین کامنتگذاری و استفاده از دستور pass
را تشریح میکنیم.
آشنایی با تفاوتهای مابین کامنتگذاری و استفاده از دستور pass
در زبان برنامهنویسی پایتون کامنتها و همچنین دستور pass
عملکردی مشابه دارند بدین معنی که هر دو را میتوان به منظور یادآوری جهت توسعه و یا تکمیل بخشی از سورسکد مورد استفاده قرار داد اما این در حالی است که مفسر پایتون مابین دستورات کامنتشده در سورسکد و دستور pass
تفاوتهایی قائل است بدین صورت که دستورات کامنتشده را در حین اجرای اپلیکیشن نادیده گرفته و آنها را اجرا نمیکند در حالی که دستور pass
توسط مفسر اجرا میشود که حاوی پیامی مبنی بر عدم انجام کاری میباشد.
همچنین استفاده از کامنت در سورسکد به منظور مشخص کردن برخی دستورات مورد نظر توصیه نمیشود چرا که این امر موجب شلوغی سورسکد شده و در پروژههای بزرگ تشخیص کامنتهای مذکور از سایر کامنتها تا حدودی دشوار میباشد اما این در حالی است که با استفاده از دستور pass
به سادگی میتوان بخشهای مورد نظر را شناسایی کرده و در صورت نیاز آنها را تکمیل نمود.