توابع در زبان برنامه نویسی TypeScript – آموزش TypeScript

typescript functions 6696 تصویر

توابع در زبان برنامه نویسی TypeScript

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

ردیف

توضیحات

۱تعریف یک تابع

تعریف یک تابع مشخص می کند که برای انجام چه کاری تعریف شده است و آن کار را چگونه انجام می دهد.

۲فراخوانی تابع

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

۳مقدار بازگشتی از توابع

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

۴تابع پارامتریک

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

پارامترهای اختیاری

پارامترهای اختیاری همانطور که از اسم آن ها نیز مشخص است، زمانی استفاده می شوند که مشخص شدن یک پارامتر برای انجام عملیات یک تابع اجباری و ضروری نیست. به منظور تعریف پارامتر اختیاری می توانید یک علامت سوال (?) به انتهای نام پارامتر اضافه کنید. توجه داشته باشید که پارامترهای اختیاری همیشه باید به عنوان آخرین پارامترها باشند. در زیر سینتکس مربوط به تعریف تابع پارامتریک را مشاهده می کنید:

مثال:

  • در مثال بالا یک تابع با سه پارامتر تعریف شده است که پارامتر mail_id اختیاری است.
  • اگر پارامتر mail_id در زمان فراخوانی تابع به تابع ارسال نشود، مقدار آن بر روی undefined تنظیم می شود.
  • تابع فوق اگر مقدار mail_id برابر با undefined نباشد، مقدار آن را چاپ خواهد کرد.

خروجی کد فوق بعد از کامپایل:

خروجی برنامه:

پارامترهای Rest

پارامترهای Rest شبیه به variable arguments در زبان برنامه نویسی Java است. این نوع پارامتر، محدودیتی برای تعداد پارامترها ندارد ولی باید نوع (type) همه آن ها یکی باشد (مثلا همگی از نوع رشته باشند.). برای اعلان یک پارامتر به صورت Rest باید قبل از نام آن سه عدد نقطه (…) قرار دهید. پارامترهای غیر Rest باید قبل از آن تعریف شوند.

مثال:

 

توجه! در یک تابع شما فقط یک پارامتر rest می توانید داشته باشید.

تابع فوق دوبار فراخوانی شده است که بار اول سه مقدار و بار دوم شش مقدار به آن داده شده است. همچنین تابع فوق با استفاده از حلقه for مقادیر ارسال شده را جمع کرده و نتیجه را چاپ می کند. خروجی کد فوق بعد از کامپایل:

خروجی برنامه:

پارامترهای پیشفرض (Default Parameters)

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

 

توجه! یک پارامتر نمی تواند هم اخیتاری باشد و هم مقدار پیشفرض داشته باشد.

مثال:

خروجی کد فوق بعد از کامپایل:

خروجی برنامه:

  • در مثال فوق تابع calculate_discount دو پارامتر به نام های price و rate دارد.
  • مقدار پارامتر rate به صورت پیشفرض بر روی ۵۰ تنظیم شده است.
  • تابع فوق دو بار فراخوانی شده است که بار اول فقط یک پارامتر به آن ارسال شده است و مقدار پارامتر دوم بر اساس مقدار پیشفرض مشخص شده است.
  • بار دوم فراخوانی تابع هر دو پارامتر مقدار دهی شده اند. در این حالت مقدار پیشفرض نادیده گرفته می شود.

توابع Anonymous

توابعی که محدود به یک نام شناسه نیستند توابع Anonymous نامیده می شوند. این توابع به صورت پویا در runtime تعریف می شوند. مانند توابع عادی این نوع توابع نیز می توانند ورودی گرفته و خروجی را بازگردانند. معمولا یک تابع Anonymous بعد از ایجاد شدن اولیه دیگر در سایر بخش ها قابل دسترسی نیست. یک تابع Anonymous می تواند به عنوان مقدار یک متغیر تنظیم شود. به این نوع عبارت، عبارت تابع (Function Expression) گفته می شود. سینتکس مربوط به این نوع عبارت:

مثال:

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

خروجی برنامه:

مثال تابع Anonymous  با پارامتر:

کد فوق بعد از کامپایل:

خروجی برنامه:

تفاوت عبارت تابع و اعلان تابع

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

سازنده تابع (Function Constructor)

در زبان TypeScript شما می توانید با استفاده از Function() یک سازنده تابع ایجاد کنید. در زیر می توانید سینتکس مربوط به سازنده تابع را مشاهده کنید:

مثال:

عبارت new Function() یک رفرنس به تابع را ایجاد و آن را باز میگرداند. زمانی که کد فوق کامپایل شود، همان کد فوق را تولید می کند. خروجی برنامه:

توابع بازگشتی (Recursion)

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

مثال:

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

تابع بازگشتی Anonymous

در مثال زیر می توانید یک تابع بازگشتی Anonymous را مشاهده کنید:

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

توابع Lambda

در برنامه نویسی Lambda به توابع Anonymous اشاره می کند. لامبدا مکانیسمی برای نمایش توابع Anonymous به صورت مختصر است. توابع لامبدا با نام Arrow functions هم شناخته می شوند.

آناتومی توابع لامبدا

یک تابع لامبدا از سه بخش تشکیل می شود:

  • پارامترها (Parameters)
  • علامت فلش =>
  • دستورات

توجه! بر اساس قرارداد استفاده از نام های تک حرفی برای نام پارامترها توصیه می شود.

عبارت لامبدا (Lambda Expression)

عبارت لامبدا، اعلان یک تابع anonymous است که به خطی از کد اشاره دارد. در زیر سینتکس مربوط به یک عبارت لامبدا را مشاهده می کنید:

مثال:

در مثال فوق یک تابع لامبدا تعریف شده است که نتیجه جمع عدد ۱۰ با مقدار پارمتر x را باز میگرداند. کد فوق بعد از کامپایل شدن:

خروجی برنامه:

دستورات لامبدا (Lambda Statement)

دستورات لامبدا، اعلان یک تابع anonymous است که به بلوکی از کد اشاره دارد. این سینتکس زمانی استفاده می شود که کد های مربوط به تابع بیش از یک خط داشته باشند.

مثال:

کد فوق بعد از کامپایل:

خروجی برنامه:

تغییرات سینتکسی

مشخص کردن نوع داده برای پارامتر ها اجباری نیست. و اگر نوع داده برای پارامتری مشخص نشود، از نوع any در نظر گرفته می شود. به تکه کد زیر توجه کنید:

کد فوق بعد از کامپایل:

خروجی برنامه:

پارانتزهای اختیاری برای تک پارامتر

اگر عبارت لامبدا شما فقط یک پارامتر داشته باشد، میتواند پارانتزهای آن را حذف کنید. مثال:

کد فوق بعد از کامپایل:

خروجی برنامه:

براکت های اختیاری

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

عبارت لامبدا بدون پارامتر

در صورتی که عبارت لامبدا هیچ پارامتری نداشته باشد، باید از پرانتز خالی () استفاده کنید. مثال:

کد فوق بعد از کامپایل:

خروجی:

سر بارگذاری تابع (Function Overloading)

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

برای سربارگذرای تابع در زبان تایپ اسکریپت باید مراحل زیر را دنبال کنید:

مرحله ۱: چند تابع با نام مشابه اما با امضای متفاوت اعلان کنید. امضای یک تابع شامل موارد زیر است:

نوع داده پارامترها

تعداد پارامترها

ترتیب قرار گیری پارامترها

 

توجه! امضای تابع شامل نوع داده بازگشتی تابع نیست.

مرحله ۲: تعریف تابع باید بر اساس اعلان آن انجام شود. اگر در طی overload کردن تابع، نوع داده پارامترها متفاوت باشد، باید آن ها را به صورت any تعریف کنید.

مرحله ۳: در آخر باید تابع را فراخوانی کنیم.

مثال:

  • دو خط اول نشان دهنده سربارگذاری ها تابع است. تابع disp دو overload دارد.
    • اولی فقط یک پارامتر از نوع رشته می گیرد.
    • دومی دو پارامتر یکی از نوع عدد و دیگری از نوع رشته می گیرد.
  • خط سوم تابع را تعریف می کند. نوع داده پارامترها به صورت any تنظیم شده است. همچنین پارامتر دوم اختیاری است.
  • Overload های تابع در دو خط آخر فراخوانی می شوند.

کد فوق بعد از کامپایل:

خروجی برنامه:

ثبت نظر
ریفریش کنید!
نظرات کاربران (۰ مورد)

هیچ نظری ثبت نشده است