دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۶
  • اردیبهشت

جلسه ۱۳ : آموزش کار با subroutine در پرل

  • دسته‌بندی‌ها :
جلسه ۱۳ : آموزش کار با subroutine در پرل
    • جزئیات
    • نوع محتواآموزشی

      مقدمه

      با سلام خدمت کاربران گرامی سایت پی وی لرن و کاربرانی که علاقمندان به دوره آموزشی پرل Perl. در جلسه گذشته آموزش کار با زمان و تاریخ را به شما ارائه نمودیم و شما را با نحوه تنظیم تاریخ و زمان فعلی و انواع شاخه های تاریخ و زمان را معرفی کردیم. در این جلسه به آموزش کار با subroutine در پرل خواهیم پرداخت.

      آموزش کار با subroutine در پرل

      در  آموزش کار با subroutine در پرل به صورت جزئی و مفصل شما را با subroutine ها و کاربردها و انواع آن ها آشنا می نماییم.
      subroutine نوعی تابع در پرل است که از گروهی از statements تشکیل شده که در کنار هم یک کار و وظیفه را بر عهده دارند.
      می توانید کد خود را با کمک subroutine به زیر فرعی های جداگانه تقسیم کنید.
      نحوه تقسیم کدی که قصد تقسیم آن را دارید به زیر مجموعه را دارید به شما بستگی دارد.
      اما منطق تقسیم بندی معمولا این است که هر تابع یک کار خاص را انجام دهد.

      پرل به طور معمول از subroutine ( زیر مجموعه )، method و تابع استفاده می نماید.
      در ابتدای  آموزش کار با subroutine در پرل ابتدا به تعریف و توضیح آن می پردازیم.

      تعریف و فراخوانی یک subroutine

      فرم کلی یک subroutine در زبان پرل به صورت زیر تعریف می شود.

      مثال : 

      در زیر می توانید روش کلی فراخوانی subroutine را ببینید.

      مثال : 

      در نسخه های پرل که قبل از نسخه ۰٫۵ بودند سینتکس فراخوانی subroutines ها کمی متفاوت بود.
      اما خوشبختانه این روش همچنان در نسخه های جدید تر کار می کند اما از زمانی که نسخه اصلی آن دارای راه های فرعی شده است توصیه می شود که از آن استفاده نشود.

      مثال : 

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

      مثال : 

      اجرای کد بالا خروجی به شکل زیر خواهد داشت.

      مثال : 

      ارجاع به argument یک Subroutine

      می توانید مانند سایر زبان های برنامه نویسی دیگر در پرل نیز argument ها را به یک subroutine ارجاع دهید.
      می توان این argument ها را به وسیله @ array در داخل تابع قابل دسترسی اند.
      بنابرین اولین argument تابع [۰]_$ است و دومین argument آن نیز  [۱]_$ است و به همین ترتیب ادامه یابد.

      می توان مثل هر اسکالری array ها و Hash ها به عنوان argument ارجاع داد اما ارجاع بیش از حد یک array یا hash به طور معمول موجب می شود که آن ها خاصیت خود را از دست بدهند.

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

      مثال : 

      اجرای کد بالا خروجی به شکل زیر خواهد داشت.

      مثال : 

      ارجاع لیست به Subroutines

      از آن جا که  متغیر _@ یک array است.
      می توان از آن برای ارائه یک لیست به subroutine استفاده کرد.
      از آن جا که پرل لیست ها و array ها توسط پرل پذیرفته و تجزیه می شوند می توان عناصر منحصر به فرد را از _@ استخراج کرد.
      اگر لازم است که که یک لیست را با سایر argument های اسکالر ارجاع دهیم در این صورت این لیست را به عنوان آخرین argument به شکل زیر نشان دهید.

      مثال : 

      اجرای کد بالا خروجی به شکل زیر خواهد داشت.

      مثال : 

      ارجاع Hashes به Subroutines ها

      هنگامی که یک Hash به یک Subroutines یا اپراتوری ارجاع داده می شود که ورود آن را به لیست می پذیرد.
      Hash به صورت خودکار به یک لیست از جفت key/value منتقل می شود.
      برای مثال :

      مثال : 

      اجرای کد بالا خروجی به شکل زیر خواهد داشت.

      مثال : 

      بازگردانی مقدار به Subroutine

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

      می توان مثل هر اسکالری array ها و Hash ها به عنوان argument ارجاع داد اما ارجاع بیش از حد یک array یا hash به طور معمول موجب می شود که آن ها خاصیت خود را از دست بدهند.
      به همین دلیل است که ترجیح داده می شود که از references یا منابع به جای آن استفاده شود تا هر array و hash را از تابع بازگردانی نماییم.
      در جلسات بعدی به طور مفصل به آموزش کار با references خواهیم پرداخت.

      بیاید مثال زیر را بررسی کنیم .
      این مثال از لیستی از اعداد استفاده می کند و میانگین آن ها را به دست آورده و آن را بازگردانی می نماید.

      مثال : 

      اجرای کد بالا خروجی به شکل زیر خواهد داشت.

      مثال : 

      در ادامه  آموزش کار با subroutine در پرل شما را با یک سری از مقادیر خاص در پرل آشنا می نماییم.

      مقادیر خاص و منحصر به فرد در یک Subroutine

      به طور پیش فرض، تمام متغیرها در پرل متغیرهای جهانی هستند، به این معنی که می توانند از هر نقطه در برنامه قابل دسترسی باشند.
      می توان با ساخت متغیر های خاص یا  private variables متغیرهای lexical را در هر زمانی در اپراتور my operator فراخوانی نمود.
      my operator یک متغیر به بخش خاصی از کد که می توان به آن دسترسی داشت؛ محدود می کند.
      خارج از آن منطقه، این متغیر نمی تواند مورد استفاده قرار گیرد و یا قابل دسترسی باشد.
      این منطقه دامنه آن است.
      یک ناحیه دامنه ای معمولا یک بلوک از کدها است که با یک مجموعه از braces های اطرافش احاطه شده است.

      در زیر می توانید ببینید که چگونه یک یا چند متغیر private را با استفاده از my operator تعریف نمایید.

      مثال : 

      حالا بیایید مثال زیر را برای تشخیص تمایز بین متغیر های خاص و منحصر به فرد private با متغیر های جهانی یا global بررسی کنیم.

      مثال : 

      اجرای کد بالا خروجی به شکل زیر خواهد داشت.

      مثال : 

      موقتی سازی مقدار با ()local

      اغلب از local زمانی استفاده می شود که مقدار فعلی متغیر قابل دیدن و فراخوانی برای subroutines باشد.
      یک local مقادیر موقتی ای را به global می دهد. این عمل به عنوان dynamic scoping نامیده می شود.

      اگر بیش از یک متغیر به local داده شود در آن صورت باید درون پرانتز جایگذاری شود.
      این اپراتور با ذخیره سازی مقادیر فعلی از متغیر ها درون لیست argument های پنهان در stack کار خود را انجام می دهد.

      حالا بیایید مثال زیر را برای تشخیص تمایز بین متغیر های خاص و منحصر به فرد private با متغیر های جهانی یا global بررسی کنیم.

      مثال : 

      اجرای کد بالا خروجی به شکل زیر خواهد داشت.

      مثال : 

      متغیرهای State به همراه ()State

      نوع دیگری از متغیرهای واژگانی وجود دارد که شبیه به متغیرهای خصوصی هستند.
      اما این متغیر ها حالت خود را حفظ می کنند و  با چندین فراخوانی subroutines مجددا فعال نمی شوند.
      این متغیرها با استفاده از اپراتور state تعریف شده و از پرل ۵٫۹٫۴ در دسترس می باشند.
      در مثال زیر می توانید نحوه استفاده از state variables را ببینید.

      مثال : 

      اجرای کد بالا خروجی به شکل زیر خواهد داشت.

      مثال : 

      اگر از نسخه های قبل از ۵٫۱۰ پرل استفاده می نمایید باید این کد را به شکل زیر بنویسید.

      مثال : 

      به عنوان آخرین موضوع در  آموزش کار با subroutine در پرل به معرفی Subroutine Call Context می پردازیم.

      Subroutine Call Context

      زمینه یک subroutine یا statement به عنوان نوعی که انتظار بازگردانی آن را داریم تعریف می شود.
      این زمینه اجازه استفاده از یک تابع تکی که مقادیر مختلف را بر اساس آنچه که کاربر انتظار دریافت آن را دارد بازگردانی می کند.
      برای مثال یک رشته را هنگامی که در اسکالر context در لیست context فراخوانی می شود بازگردانی می کند.

      مثال : 

      در این مثال، مقدار  timestr$ در حال حاضر یک رشته از تاریخ و زمان فعلی است، به عنوان مثال، چهارشنبه ۳۰ نوامبر ۱۵:۲۱:۳۳ ۲۰۰۰٫ اما در مقابل آن :

      مثال : 

      در حال حاضر متغیرهای فردی حاوی مقادیر متناظر با ()subroutine localtime هستند.

      کلام آخر

      در این جلسه آموزش کار با subroutine در پرل را ارائه کردیم.
      در جلسه بعد با آموزش references همراه شما خواهیم بود.
      با پی وی لرن همراه باشید.

      QR:  جلسه ۱۳ : آموزش کار با subroutine در پرل
      به اشتراک بگذارید