توابع

عموما ما نیاز داریم که یه عمل مشابه رو چندین جا اجرا کنیم.

به عنوان مثلا ما میخوام یه پیام زیبایی رو به کاربر در زمان ورود و خروج نشون بدیم یا چندین جای دیگر از پروژه استفاده کنیم.

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

 

قبلا نمونه های از توابع ساخته شده رو دیدیم.alert(message)prompt(message, default) وconfirm(question).

اما ما میتونیم توابعی رو برای خودمون ایجاد کنیم.

تعریف تابع

برای تعریف یک تابع میتونیم از عبارت function استفاده کنیم.

نمونه:

ابتدا کلمه function سپس نام تابع سپس لیستی از پارامتر ها که داخل پرانتز قرار دارند.

و در نهایت کد تابع که بدنه تابع نام دارد رو داخل پرانتز مینوسیم .

ما تابع مون رو میتونیم با نام تابع فراخوانی کنیم .

برای مثال داریم:

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

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

اگر ختی نیاز داشته باشیم که متن پیام  یا نخوه نمایش رو تغییر بدیم کافیه که قسمتی از اون رو تغییر بدیم .

متغیر های محلی

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

برای مثال :

متغیر های خارجی

متغیر های که بیرون از توابع تعریف شده و داخل تابع میتونیم ازشون استفاده کنیم. مثلا:

توابع دسترسی کامل به متغیر های خارجی دارند و میتونن اونها رو تغیر بدن .

مثال زیر رو ببینیم:

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

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

مثال زیر رو ببنیم :


متغیر های عمومی

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

متغیر های عمومی درون همه توابع در دسترس هستند.

بهتره تا جای که میتونیم استفاده از متغیر های عمومی رو به حداقل برسونیم .

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

هرچند بعضی مواقع میتونن برای نگهداری داده های سطح پروژه استفاده بشن .


پارامتر ها

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

در مثال زیر تابع ما دارای دو پارامتر from و text هست:

 

وقتی که ما در خط  (*) و(**), تابع رو فراخوانی میکنیم ، مقادیر داده شده در متغیر های محلی from وtextکپی میشوند.سپس تابع از اون مقادیر استفاده میکنه .

 

یک مثال دیگه:

ما متغیر from  رو داریم که اونو به تابع منتقل میکنیم.

توجه داشته باشید که تغیراتی که داخل توابع روی متغیر from اعمال میشه بیرون تابع تغیر داده نمیشه.

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

 

مقدار پیشفرض

اگر پارامتری ارائه نشده باشه سپس مقدار متغیر undefined میشه .

برای مثال ، تابع بالا که در موردش صحبت کردیم میتونه با یک پارامتر فراخوانی بشه:

هیچ خطای نخواهیم داشت و در خروجی “Ann: undefined” رو به ما میده .

زمانی که برای این پارامتر هیچ مقداری را پاس ندادیم مقدارش به صورت پبشفرض undefined هست.

در صورتی که  میخواهیم مقدار پیشفرض دیگری رو براش تنظیم کنیم باید در با = مقدار پیشفرضی رو قرار بدیم:

جالا در صورتی که مقدار به متغیر text پاس داده نشه متغیر دارای مقدار اولیه “no text given” میباشد.

در این مثال مقدار پیشفرض ما یه رشته هست اما ما میتونیم یک عبارت پیچیده تری داشته باشیم که با یک محاسباتی مقدار اولیه محاسبه شده و در متغیر قرار گیرد:


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

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

در مثال بالا هر زمانی که تابع showMessage بدون پارامتر text فراخوانی بشه  تابع anotherFunction() اجرا میشه .


 


شکل قدیمی مقدار پیشفرض

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

برای مثال مقدار پارامتر برسی میشه که مخالف undefined باشه:

یا با عملگر Or || :


 

برگرداندن یک مقدار

یک تابع میتونه مقداری رو هنگام فراخوانی به عنوان نتیجه برگردونه.

یک مثال ساده تابعی که جمع دو مقدار رو برمیگردونه :

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

وقتی که اجرا به دستور return میرسه تابع متوقف شده و مقدار مورد نظر را برمیگرداند.

ممکن است که در چندین جا مقداری رو توی تابع برگیدانید:

این امکان وجود دارد که با استفاده از return خروجی تابع دیگری رو برگردانید:

در کد بالا در صورتی که نتیجه تابع checkAge(age) false باشد.
سراغ نتیجه confirm میره سپس نتیجه در alert نمایش داده میشه.

 

 

 

 

 

 

در حال نوشتن این قسمت از آموزش …

زودی تمومش میکنیم.

منبع : javascript.info

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

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