بررسی توابع (Function ها) در TypeScript

بررسی توابع (Function ها) در TypeScript

در این پست از وبسایت پرووید در رابطه با بررسی توابع (Function ها) در TypeScript صحبت خواهیم کرد. زبان TypeScript یک زبان شی گرا و Open-source می باشد که توسط مایکروسافت توسعه داده و نگهداری میشود.

در این قسمت از سری آموزش کامل زبان برنامه نویسی TypeScript در وب سایت پرووید، در رابطه با نقش توابع و یا Function ها صحبت خواهیم کرد. توابع و یا Function ها اجزای تشکیل دهنده اصلی در هر برنامه می باشند. در زبان JavaScript توابع مهم ترین نقش را ایفا می کنند، چرا که زبان برنامه نویسی JavaScript یک زبان برنامه نویسی تابعی و یا Functional می باشد.

شاید جالب باشد که بدانید، با استفاده از توابع می توانیم مفاهیم معمول زبان های برنامه نویسی شی گرا از قبیل کلاس ها، Object ها و چند ریختی (Polymorphism) ، انتزاع (Abstraction)  پیاده سازی کنیم.

بسته ی آموزش ویدئویی شروع به کار با TypeScript

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

با استفاده از توابع برنامه را می توانیم طوری طراحی کنیم و بنویسیم که از قابلیت هایی از قبیل نگهداری (Maintainablity) و استفاده مجدد (Reusablity) برخوردار باشد. همچنین نوشتن برنامه به صورت تابع باعث می شود که قابلیت خوانایی و یا Readability برنامه افزایش پیدا کند. هر چند که در زبان برنامه نویسی TypeScript مفاهیمی از قبیل کلاس و ماژول ها پیاده سازی شده اند، اما توابع و یا Function ها هنوز هم یکی از مهم ترین بخش های برنامه نویسی در زبان TypeScript می باشند.

در زبان TypeScript، توابع می توانند به دو صورت نام گذاری شده  (Named) و بی نام و یا (Anonymous). در ادامه در ابتدا در رابطه با توابع نام گذاری شده ویا  Named Function ها صبحت خواهیم کرد.

بررسی توابع نام گذاری شده (Named Function ها)

یک تابع نام گذاری شده و یا Named Function تابعی است که با استفاده از یک نام تعریف شده و سپس با استفاده از همان نام مورد استفاده قرار می گیرد. مثالی که در قسمت زیر می بینید، تابعی را نشان می دهد که نام آن display هست. پس از آن با استفاده از همین نام از آن استفاده شده است.

function display() {
    console.log("Hello TypeScript!");
}

display(); //Output: Hello TypeScript 

توابعی که نام گذاری شده اند می توانند دارای پارامتر های ورودی و همچنین پارامترهای خروجی و یا اصطلاحاً Return Type باشند. منظور از Return Type چیزی است که توسط تابع برگشت داده می شود.

بسته ی آموزش ویدئویی آموزش عمیق TypeScript

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی آموزش عمیق TypeScript دیدن کنید.

کدی که در قسمت زیر مشاهده می کنید، یک تابع به نام Sum را نشان می دهد که دو متغیر به عنوان پارامتر ورودی از نوع داده ای number را دریافت کرده و یک خروجی ازنوع داده number را return می کند.

function Sum(x: number, y: number) : number {
    return x + y;
}

Sum(2,3); // returns 5

بررسی توابع بی نام (Anonymous Functions):

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

let greeting = function() {
    console.log("Hello TypeScript!");
};

greeting(); //Output: Hello TypeScript! 

همچنین توابع بی نام می توانند، دارای پارامترهای ورودی و یا Return Type نیز باشند. کدی که در قسمت زیر مشاهده می کنید، تابعی را نشان می دهد که دو پارامتر ورودی از نوع Number را دریافت کرده و یک نوع داده Number را بر می گرداند.

let Sum = function(x: number, y: number) : number
{
    return x + y;
}

Sum(2,3); // returns 5

این تابع در یک متغیر به نام Sum تعریف شده است. پس از این کار می توانیم به راحتی با نام این متغیر از این تابع استفاده کنیم.

بررسی پارامترهای توابع

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

بسته ی آموزش ویدئویی آموزش پیشرفته TypeScript

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی آموزش پیشرفته TypeScript دیدن کنید.

کدی که در قسمت زیر مشاهده می کنید، مثالی از این قضیه است.

function Greet(greeting: string, name: string ) : string {
    return greeting + ' ' + name + '!';
}

Greet('Hello','Steve');//OK, returns "Hello Steve!"
Greet('Hi'); // Compiler Error: Expected 2 arguments, but got 1.
Greet('Hi','Bill','Gates'); //Compiler Error: Expected 2 arguments, but got 3.

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

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

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

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

function Greet(greeting: string, name?: string ) : string {
    return greeting + ' ' + name + '!';
}

Greet('Hello','Steve');//OK, returns "Hello Steve!"
Greet('Hi'); // OK, returns "Hi undefined!".
Greet('Hi','Bill','Gates'); //Compiler Error: Expected 2 arguments, but got 3.

موضوع بسیار مهم دیگر در استفاده از توابع اختیاری این است که تمامی پارامترهای اختیاری باید پس از تعریف پارامترهای الزامی بیایند و همواره باید در پایان پارامترهای الزامی قرار بگیرند. به عبارت دیگر پس از تعریف یک پارامتر اختیاری نمی توانید یک پارامتر الزامی را قرار دهید. منظور از کلمات اختیاری و الزامی به ترتیب Optional و Required می باشد، که توصیه می کنیم، این دو واژه را یاد بگیرید.

همان طور که در مثال بالا مشاهده می کنید یک تابع به نام Greet تعریف شده است که دو پارامتر ورودی به نام های greeting و name را دریافت می کند. هر دوی این پارامترها از نوع String می باشند. پارامتر name با استفاده از ? به صورت اختیاری تعریف شده است. پس زمانی که می خواهیم تابع را صدا بزنیم هم می توانیم مقداری برای name در نظر بگیریم و هم می توانیم مقدار آن را لحاظ نکنیم. اگر برای پارامتر name، مقداری را لحاظ نکردید، برای آن مقدار undefined تنظیم خواهد شد.

بررسی پارامترهای پیش فرض

در زبان TypeScript علاوه بر داشتن پارامترهای اختیاری در تعریف توابع، می توانیم پارامترهای پیش فرض نیز تنظیم کنیم. پارامترهای پیش فرض و یا اصطلاحاً Default Parameter ها امکان این را فراهم می کنند که مقدار پیش فرض برای یک پارامتر در تعریف یک تابع لحاظ کنید و اگر در زمان فراخوانی آن تابع مقداری برای آن تعریف نشود، آن مقدار پیش فرض لحاظ خواهد شد. شبیه به پارامترهای اختیاری پارامترهای پیش فرض نیز باید در پایان پارامترهای یک تابع قرار بگیرند. البته اگر یک پارامتر پیش فرض را قبل از پارامترهای الزامی در تعریف یک تابع لحاظ کنید، بایستی در زمان فراخوانی آن تابع، آن پارامتر پیش فرض را نیز مقدار دهی کرده و در آن مقدار undefined قرار بدهید. مثالی که در قسمت زیر می بینید، این موضوع را نشان می دهد.

function Greet(name: string, greeting: string = "Hello") : string {
    return greeting + ' ' + name + '!';
}

Greet('Steve');//OK, returns "Hello Steve!"
Greet('Steve', 'Hi'); // OK, returns "Hi Steve!".
Greet('Bill'); //OK, returns "Hello Bill!"

در این مثال یک تابع با نام Greet تعریف شده است که دو پارامتر ورودی به نام های name و greeting دارد. مقدار پیش فرضی برای پارامتر greeting در تعریف تابع تنظیم شده است. به عبارت دیگر در فراخوانی های این تابع اگر برای پارامتر دوم مقداری تعریف نشود، از مقدار پیش فرض “Hello” استفاده می شود.

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

function Greet(greeting: string = "Hello", name: string) : string {
    return greeting + ' ' + name + '!';
}

Greet(undefined, 'Steve');//returns "Hello Steve!"
Greet("Hi", 'Steve'); //returns "Hi Steve!".
Greet(undefined, 'Bill'); //returns "Hello Bill!"

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

امیدواریم که این آموزش از وبسایت پرووید نیز مورد توجه تمامی دوستان عزیز قرار گرفته باشد. از شما دعوت می‌کنیم که از دیگر آموزش های ما در رابطه با زبان TypeScript استفاده کنید. لیست کامل این آموزش ها را می توانید در پست مربوط به آموزش کامل زبان تایپ اسکریپت TypeScript مشاهده کنید.

مرتضی گیتی
بدون نظر

ارسال نظر

نظر
نام
ایمیل
وب سایت