مفاهیم پایه ای جاوااسکریپت-بخش دوم

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

ساختار شرطی

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

اگر بخواهیم کد زیر را از طریق if باز نویسی کنیم،


به شکل زیر خواهد شد:

اگر دقت کنید کد داخل if زمانی اجرا می‌شود که شرط صحیح(true) باشد.حال فرض کنید بخواهیم اگر شرط برقرار نبود (false) بود کد داخل if اجرا نشود و کد دیگری را اجرا کنیم.در این صورت از ساختار if/else استفاده خواهیم کرد:

برای درک بهتر به کد زیر توجه کنید:

if-else.js

در کد بالا به علت اینکه مقدار accountIsLocked برابر false است بنابراین کدهای داخل else اجرا می‌شوند.

ساختار دیگری نیز وجود دارد که در صورتیکه نیاز داشته باشیم چند شرط را در قالب ifهای متفاوت اجرا کنیم:

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

در کد بالا اگر کاربر lock نباشد،همچنین نقش کاربر admin باشد در این صورت عبارت welcome admin چاپ خواهد شد.

تمرین:با استفاده از if/else  برنامه ای را بنویسید که با توجه به سن شما مشخص کند که شما کودک،جوان و یا بزرگسال هستید.برای راهنمایی،اگر سن کوچکتر مساوی ۱۰ سال بود کودک هستید ،اگر بزرگتر از ۱۰ سال تا ۴۹ سال بود شما بزرگسال هستید و در غیر این صورت شما پیر هستید.

برای دیدن جواب اینجا کلیک کنید.

در ساختار if دو مفهوم مهم دیگر نیز وجود دارد که باید بدانید.

  • and
  • or

در صورتیکه بخواهیم از چند شرط داخل یک if استفاده کنیم می‌توانیم از and و یا or استفاده کنیم.

کد زیر مثال عملی با استفاده از and هست:

بنابراین در صورتیکه از and استفاده می‌‌کنیم باید تمام شروط صیحیح باشند تا کد داخل if اجرا شود ولی اگر از or استفاده کنیم حتی اگر یک شرط هم از تمام شروط صحیح باشد کد داخل if اجرا خواهد شد.

محدوده متغیرها

جاوااسکریپت از lexical scoping پیروی می‌کند.

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

به کد زیر دقت کنید:

برای سادگی شرط if را همیشه true در نظر گرفته‌ایم و این به این معنی است که داخل if همیشه اجرا خواهد شد.

اگر کد بالا را توسط دستور node اجرا کنیم با خطای زیر روبرو خواهیم شد:

var-scope

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

هر بلاک کد با } شروع با { به اتمام می‌رسد.

}

some codes

{

در جاوا اسکریپت دو نوع محدوده (scope) داریم.
Global Scope :متغیری است که بیرون از همه بلاک های کد تعریف شده است.بنابراین در داخل همه بلاک ها به آن دسترسی خواهیم داشت.اگر بخواهیم با توجه به کد بالا این موضوع را توضیح دهیم در کد بالا یک بلاک وجود دارد و آن هم بلاک مربوط به if است.بنابراین متغیری که در Global Scope تعریف شده varOne است.

Local Scope:متغیری است که داخل یک بلاک مشخص تعریف شده.با توجه به کد بالا varTwo داخل بلاک if تعریف شده و بنابراین خارج از آن بلاک قابل دسترسی نیست.

توجه به این نکته ضروری است که سلسله مراتب در بحث محدوده دسترسی به یک متغیر رعایت می‌شود و اگر یک متغیر داخل یک بلاک تعریف شده باشد که داخل آن بلاک ، یک بلاک دیگر وجود داشته باشد ، بلاک داخلی به متغیر بلاک بیرونی دسترسی دارد ولی برعکس این موضوع صادق نیست:


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

موضوع مهمی که باید به آن توجه کنید این است که در صورتیکه محدوده (scope) متغیرها با یکدیگر متفاوت باشد می‌توانیم متغیرهایی با یک نام داشته باشیم:

در صورت اجرای کد بالا با خطا مواجه نخواهیم شد.به این کار variable shadowing گفته می شود.

سوال:به نظر شما کد زیر چه چیزی را چاپ خواهد کرد:

برای دیدن جواب روی این آدرس کلیک کنید.

نکته:اگر یک متغیر را بدون کلمه کلیدی let و یا var تعریف کنیم در این صورت این متغیر به صورت Global تعریف خواهد شد.این موضوع را با عنوان leaked global نیز می‌شناسیم که باید از این روش تعریف متغیر خودداری کنیم.

برای مشاهده ادامه دوره روی این لینک کلیک کنید.

دیدگاهتان را بنویسید

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.