campaign-edianeh-98

دوره مجازی جاوااسکریپت (جلسه 7): تعریف توابع دلخواه در جاوااسکریپت، نکات و ترفندها



visibility  
mode_comment   ۳۳

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

مطالب مطرح شده در این جلسه عبارتند از :

  • بحث در مورد عدم امکان تعریف دو تابع و نام های یکسان
  • متد های شی window و عدم نیاز به نام بردن خود شئ window برای استفاده از آن ها
  • رفع مشکل تابع print استفاده شده در جلسات گذشته
  • آشنایی با قابلیت refactor و تغیر نام سراسری متغیر ها و توابع در کل پروژه درون phpStorm
  • بیان نحوه برنامه نویسی بدون توابع و مشکلات عمده آن با ذکر مثال
  • مزیت های عمده استفاده از توابع در برنامه نویسی و ایجاد نظم و تقسیم بندی وظایف در کدها
  • نحوه تعریف تابع به صورت Function Declarations
  • ذکر نکات مهم در مورد توابع و قابلیت رفتار با آنها به صورت متغیر
  • Function Hoisting در جاوااسکریت و به بالا آوردن خودکار تعریف توابع
  • نحوه تعریف تابع به شکل Function Expressions
  • توابع ناشناس (anonymous functions) در جاوااسکریپت
  • توابع خود صدا زننده (Self-Invoking Functions)
  • صحبت در مورد پارامترهای توابع
  • نحوه انتساب مقدار پیشفرض برای پارامترها
  • نحوه دریافت تعداد مختفی از پارامترها در یک تابع و مدیریت و استفاده از پارامترها
  • توابع بازگشتی و نحوه کار آن ها
  • ذکر مثالی از پیاده سازی یک تابع به شکل بازگشتی
  • تمرین : ایجاد تغیر در تابع print پیشفرض جاوااسکریپت و کسب اجازه از کاربر برای چاپ صفحه
  • تمرین : تغیر تابع nicePrint برای چاپ همه نوع داده با قابلیت دریافت تعداد مختلفی از پارامترها
  • تمرین : نوشتن تابع به توان رساندن با استفاده از روش بازگشتی
  • تمرین : تفاوت بین call by reference و call by value در پاس دادن پارامترهای تابع ؟
  • پاسخ تمرین ها در جلسه 9 دوره داده شده است!
info توجه

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

ثبت نام در آموزش جاوا اسکریپت از مبتدی تا پیشرفته

comment دیدگاه کاربران
امین خلیلی replyپاسخ

سلام جناب اوند چرا رو فایل های جلسه که گذاشتید وقتی کلیک میکنیم مرورگر صفحه پرینت باز میکنه

لقمان آوند

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

hassani replyپاسخ

سلام
این جلسه هم خیلی خوب بود.هرچند برای تابع بازگشتی مثالی کاربردی آورده نشد.واینکه اون مشکلی که برای تابع nicePrint در آموزش پیش اومد برای من رخ نداد -نمیدونم چرا!!!.و اینکه از مدرس خوب سون لرن تقاضا میکنم که تمارینی که پیشنهاد میدید رو در جلسه بعدی خودتون حل کنید و اگر هم وقت گیر هست حداقل فایل تمرینات حل شده رو برامون بذارین تا خودمون جوابها رو بررسی کنیم و با نحوه کار آشنا بشیم.چون ممکنه ما تلاش خودمونو برای حل تمرینها بکنیم ولی باز هم به نتیجه درست نرسیم.
با تشکر ❓

لقمان آوند

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

hassani

ممنونم متوجه شدم.

hassani

خب من اون مواردی رو که در آخر آموزش مطرح کردین رو پیگیری کردم ولی چیزی ازشون نفهمیدم.وتمرین هایی رو هم که پیشنهاد دادین با توجه به برداشت خودم از منظور شما انجام دادم.تابع nice Print روبه دو صورت زیر تغییر دادم:
مورد اول که اگه چندتا آرایه بهش بدی اعضای هر آرایه رو در یک ردیف چاپ میکنه.


و مورد دوم که تک تک اعضای آرایه رو در یک خط جداگانه چاپ میکنه.


و تبدیل دو آرایه به یک آرایه و نمایش در یک آرایه جدید:


و تبدیل تک تک اعضای چند آرایه به دلخواه به یک آرایه ونمایش در خط جدا:


ببخشید که طولانی شد.
اگه میشه یه نگاهی بندازین ببینین حدودا درسته؟ 🙄 🙄 😉

لقمان آوند

سلام
بررسی کدها یکم زمانبره و فعلا وقتش رو ندارم . ایشالله بزارید وقتی جواب تمرینا رو دادم مقایسه کنید .
ضمن اینکه خودتون ببینید اگه خروجیتون معتبر و صحیح هست یعنی درسته در غیر این صورت باید مشکلش رو برطرف کنید!

سعید replyپاسخ

❓ ❓
سلام
خسته نباشین استاد
عالی ❓ ❓
کارتون 20 هست

نظرم رو حذف کنید چون من هر جلسه میخوام تشکر کنم چون واقعا عالی هست دوره هاتون ❓

لقمان آوند

سپاسگزارم از لطفتون.
مفتخریم که دیدگاه شما رو تائید کنیم . چه انتقاد باشه و چه تعریف .
از لطفتون سپاسگزارم…

hassani replyپاسخ

فکر کنم تابع nice Print رو باید به این صورت تغییر میدادم:

bahman azari replyپاسخ

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

لقمان آوند

سلام
چند تا نکته رو لازمه اینجا بگم:
1- از نظر فیزیولوژی بدن همه آدما مثل هم نیست. یکی مثل من اوج سرحالی و تمرکزش شبها هست و یکی دیگه فقط صبح زود می تونه کاراشو خوب انجام بده و … . من از بچگی همیشه کارای مهمم رو شبا (تا دیر وقت) انجام میدادم و همیشه بازده کاریم خداروشکر خوب بوده. در عوض هر وقت سپردم به صبح یا ظهر اصلا راضی نبودم. تقریبا تا الان بیش از 100 ساعت ویدیو تو نیمه شب ضبط کردم و خدا رو شکر میزان رضایت فوق العاده بوده. من بدنم اصلا عادت به خواب نداره نیمه شبا ;D اینو می تونید از فعالیت هام توی سایت متوجه بشید. اکثر پاسخدهی ها و آنلاین بودن هام هم همین موقع هست.
2- از اول قرار نبود که یک جلسه کامل برای معرفی توابع بزاریم. چون لیست توابع و متدهای پیش ساخته جاوااسکریپت موجوده و وقتی شما مفهوم توابع رو یاد گرفتید استفاده از اونها بسیار راحته براتون و حوصله سر کن میشه بخوایم وقت زیادی رو برای این موارد تکراری و نسبتا ساده بزاریم. بخش های آموزشی مهمتری در ادامه داریم که باید براشون بیشتر وقت بزاریم. ضمن اینکه توی این جلسه بهتون گفتم که خودتون هر تابعی براتون گنگ هست به صفحه اون تابع برید و مثال ها و نحوه استفادش رو ببینید و بخونید. خودتون هم باید یکم تلاش کنید!
3- عامل اصلی موفقیت یه برنامه نویس کنجکاو بودن، تداوم مطالعه و پیگیری برای یادگرفتن هست. اینجا شما در وهله اول باید خودتون اگر تابعی براتون گنگ هست برید در موردش بخونید و نحوه استفاده از اونو یاد بگیرید. اینطوری خیلی بهتر و محکم تر هم توی ذهنتون میمونه! چون براش تلاش کردید و دنبالش گشتید! در آخر اگر با مطالعه و سرچ به جواب نرسیدید بنده به عنوان مدرس و پشتیبان در خدمتتون هستم و هر سوالی در این مورد رو پاسخگو هستم. ما تو دوره هامون هدفمون بیشتر اینه که ماهی گیری یادتون بدیم تا اینکه ماهی بدیم خدمتتون که همیشه به ما وابسته باشید! اینجا هم گفتیم هر تابع وظیفه اش چیه و چیکار میکنه و اگر خواستید در موردش بیشتر بدونید برید به صفحه اون تابع و در موردش بخونید! اینجوری خودتون عادت میکنید به سرچ و مطالعه! انتظار نداشته باشید همه چیزو کسی بهتون بگه. یه سرنخ ساده هم بگیرید باید تا آخرش خودتون برید اگر دانشجو باشید. من خودم همین الان هم تو برنامه نویسی هام به سوالات زیادی می خورم و بعضا یه روز کامل وقت میزارم تا یه مشکلی رو رفع کنم و عقیده دارم که بهترین روش ممکن هست و تا حالا همیشه جواب گرفتم و به شما هم این توصیه رو می کنم .
به نظرم یکمی عجله دارید! صبر کنید ایشالله. توی جلسات آینده تعداد زیادی از این توابع رو به صورت عملی توی کدها و پروژه هامون استفاده می کنیم. پس زود قضاوت نکنید و ادامه دوره رو پیگیر باشید.
مواردی که گفتم همه به خاطر این بوده که دوست دارم شما مسیر یادگیری رو بهتر طی کنید و در ادامه کارتون موفق تر باشید. اگر جسارتی شد عذخواهی و براتون آرزوی موفقیت می کنم…
با تشکر

bahman azari

ممنون از وقتی که برای این پاسخ طولانی گذاشتید.قصد بنده هم جسارت خدمت استاد نبود.فقط خواستم مراتب انتقاد خودمو از این جلسه که به نظرم در مقایسه با طرح مطالب در جلسات قبل تفاوت فاحشی داشت به سمع و نظر شما برسونم.نه اینکه در این جلسه هیچی گفته نشد.نکات مفیدی هم وجود داشت.و در آخر اینم بگم در مورد جستجو که واقعا در مورد هر چیزی جستجو رو انجام میدم و از جمله اونا همون for each و for of بود که تو جستجوها بهش برخوردم شما هم زحمت توضیحش رو کشیدید.ان شاالله که خوب پیش بره تا انتهای دوره.
سپاس

لقمان آوند

خواهش میکنم.
ایشالله ادامه دوره رو پیگیر باشید …

hassani

استاد راست میگن دیگه یه شعر هست که میگه:
شبا که ما میخوابیم
.
.
.
چی؟
آقا پلیسه
.
.
. نه
آقای آوند بیداره
ما خواب خوش میبینیم
استاد آموزش ها رو میده

Saman SoroushNia replyپاسخ

سلام استاد امیدوارم حالتون خوب باشه

استاد من تمرین Function ovrride رو به این صورت در آورم :

بعد از سرچ و مشاهده نمونه کدها، اون ها رو به این صورت در آوردم :

لقمان آوند

بله درسته

Rohollah Shahbazi replyپاسخ

سلام استاد
وقت بخیر
نماز و روزتون قبول انشا ا…
توی این جلسه دقیقه ی 1:00:05 به اشکالی برخوردید که حاکی از این بود که” نایس پرینت تابع نمیباشد”…
چنت تمرین انجام دادم … متوجه شدم با قرار دادن نقطه ویرگول ” ; ” برای دتورات قبلی مشکل حل میشه …
شما واسه دو دستور قبل از تابع نایس پرینت که اس اس اس رو بیان میکرد نقطه ویرگول نزاشته بودین یعنی تابع ولکام ام اس جی و نایس پرینت جدا کننده …
مرسی از توجه تون

لقمان آوند

ممنون از بیان این نکته
موفق باشید

Aria Banazadeh replyپاسخ

ببخشید سلام من تازه ثبت نام کردم زنگ زده بودم از شما مشاوره بگیرم 🙁 هیچ کدوم ز این تمرینارو نمیتونم حل کنم برم جلسه های بعدیو ببینم ؟

وحید صالحی

مشکلی نیست ناراحت و ناامید نباشید مباحث رو چندین بار مرور کنید با تمرین زیاد توانایش رو پیدا میکنید

Sahar Dida replyپاسخ

استاد آوند خسته نباشین،واقعا تدریستون عالیه
از اینکه تمام مطالبو رو قشنگ توضیح میدین ممنونم خیلی از مباحثی که تو دانشگاه خوندیم تازه واسم جا افتادن 😀

لقمان آوند

ممنون از لطفتون
خوشحالیم که رضایتتون رو می بینیم.

Aria Banazadeh replyپاسخ

با سلام تمرین override رو به این صورت اوردم اگه میشه ی نگاهی بندازید

لقمان آوند

روش کلیتون برای override تابع پرینت درسته .

Aria Banazadeh replyپاسخ

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

لقمان آوند

سلام
منظورم این نبود. در جلسات بعدی جوابش رو دادیم می تونید بعدا با اون مقایسه کنید …

زهرا مقصودی replyپاسخ

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

var origPrint = print;
print = function () {
var a = window.confirm(‘آیا مطمئن هستید؟’);
if (a == true) {
return origPrint();
} else
return;
}
اما وقتی متغیر origPrint رو به صورت محلی داخل تابع تعریف میکنم هر چقدر که از پنجره confirm ، اوکی رو میزنم باز پنجره confirm باز میشه تا اینکه کنسل رو بزنم ، ممنون میشم راهنمایی کنید دلیلش چیه و چرا اینطورمیشه

لقمان آوند

تعریف درون تابع اشتباهه اینجا. باعث ایجاد چرخه میشه. اگر توی تابع به صورت محلی تعریف کنید مقدار origPrint هم دقیقا میشه همون print که خودمون داریم تعریف می کنیم و وقتی کانفیرم رو ok کنید مجددا خود تابع صدا زده میشه و دوباره کانفیرم میاد!
باید قبل از اینکه تابع print رو تعریف کنید مقدار اصلی اون رو در متغیر دیگه نگه دارید!

313iman313 replyپاسخ

سلام من بخش توابع بازگشتی رو درست متوجه نشدم یعنی چجوری میشه ؟‌ اونجایی که میگین
factorial (n-1) الان فاکتوریل جاش چه عددی میشه ؟‌ و اونجا n ضربدر یه عدد میشه یا خیر دوباره تا بع فراخانی میشه و فقط از n یک مقدار کم میشه ؟‌ و اینکه اصلا از همه چی بگذریم که اخر باید ۱ return بشه چون این ضرب ها که در جایی ذخیره نمیشن فقط ضرب میشن و بر میگردونن و اون برگشته جایی ذخیره نمیشه تا وقتی که n برسه به ۱ و در هر صورت باید 1 بر گشت داده بشه من نمیدونم چجوری این بخشی فاکتوریل داره برنامه رو درست اجرا میکنه !؟!؟!؟؟!؟

لقمان آوند

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

Pezhman Heidary replyپاسخ

با سلام و خسته نباشید خدمت شما،،،ما از چه سایتی و منبعی میتونیم درمورد این تمرینات اطلاعات کسب کنیم،مثلا تمرین اخر جلسه هفتم،درموردر …call value,پیدا کردنش برای من غیر ممکن بود مگر از سایت های خارجی که متاسفانه اصلا متوجه نمیشم!ویا تمرین توان ب صورت تابع بازگشتی،اگه ممکنه یه منبع معرفی کنید که ما بتونیم ازش کمک بگیریم،استاد.

لقمان آوند

حقیقتا این موارد خاص رو باید سرچ کنید. شاید نشه یه منبع خاص برای این موارد معرفی کرد.

ارسال نظرات

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