درآمدی بر کاربردهای دستور continue در حلقه‌ها در زبان PHP


کلیدواژهٔ continue در زبان PHP این کاربرد را دارا است تا بسته به شرطی که در نظر گرفته‌ایم، یک Iteration (چرخش) حلقه را متوقف سازد اما این در حالی است که از کل حلقه بیرون نخواهیم رفت:

همان‌طور که در فلوچارت فوق مشاهده می‌شود، چنانچه پس از بررسی شرط از دستور continue استفاده کرده باشیم، مفسر PHP مجدد به ابتدای حلقه بازگشته و هرگز ادامهٔ اسکریپت‌ها را اجرا نمی‌کند اما اگر continue وجود نداشته باشد، کلیهٔ کدهای داخل بلوک { } اجرا خواهند شد. برای درک بهتر کاربرد این دستور، سناریوی زیر را مد نظر قرار می‌دهیم.

الگوریتم فرضی گوگل برای تحریم کاربران ایرانی
نیاز به توضیح نیست که دولوپرهای ایرانی به بسیاری از سرویس‌های آمریکایی همچون بخش‌هایی از گوگل مثل developers.google.com دسترسی ندارند. حال فرض کنیم گوگل برای محدود کردن ایران و دیگر کشورهای تحریمی مثل کرهٔ شمالی، سوریه و  غیره، از الگوریتم زیر استفاده کرده باشد:

$countries = ['England', 'Iran', 'North Korea', 'Russia', 'Syria', 'Cuba', 'Canada'];
$url = 'https://developers.google.com/';
foreach ($countries as $country) {
    if ($country == 'Iran' || $country == 'North Korea' || $country == 'Syria' || $country == 'Cuba') {
        continue;
    }
    echo "$country is allowed to access $url<br>";
}

در خط اول آرایه‌ای تحت عنوان countries$ داریم که حاوی نام یک سری کشور همچون انگلستان، ایران، روسیه، کانادا و کشورهای دوست و همسایه! کرهٔ شمالی، سوریه و کوبا است. سپس آرایه‌ٔ دیگری تحت‌عنوان url$ ساخته‌ایم که مقدار آن را برابر با لینک سایت گوگل دولوپرز قرار داده‌ایم.

در ادامه، از یک حلقهٔ foreach استفاده نموده‌ایم بدین صورت که داخل این حلقه‌ شرطی گذاشته‌ایم مبنی بر این که اگر نام کشوری یکی از گزینه‌های Syria ،North Koria ،Iran و Cuba بود (علامت || به معنی یا است)، با استفاده از دستور continue این گزینه از آرایهٔ ما نادیده گرفته شده و مفسر PHP مجدد به ابتدای حلقه رفته و موارد دیگر را بررسی کند. در نهایت هم با استفاده از دستور echo نام کشورهایی که مجاز به استفاده از این سرویس گوگل هستند را چاپ می‌‌کنیم به طوری که به عنوان خروجی اسکریپت فوق داریم:

England is allowed to access https://developers.google.com/
Russia is allowed to access https://developers.google.com/
Canada is allowed to access https://developers.google.com/

حال برای این که عمیق‌تر با نحوهٔ کار با آرایه‌ها در زبان PHP آشنا شویم، کد فوق را به شکل زیر تکمیل می‌کنیم:

$countries = ['England', 'Iran', 'North Korea', 'Russia', 'Syria', 'Cuba', 'Canada'];
$url = 'https://developers.google.com/';
$theCountriesUnderSanction;
foreach ($countries as $country) {
    if ($country == 'Iran' || $country == 'North Korea' || $country == 'Syria' || $country == 'Cuba') {
        $theCountriesUnderSanction[] = $country;
        continue;
    }
    echo "$country is allowed to access $url<br>";
}
if (count($theCountriesUnderSanction) > 0) {
    echo '<br>';
    foreach ($theCountriesUnderSanction as $country) {
        echo "$url is limited for $country<br>";
    }
}

ابتدا اسکریپت جدید را اجرا کرده و خروجی را مشاهده می‌کنیم، سپس به تفسیر کدها خواهیم پرداخت:

England is allowed to access https://developers.google.com/
Russia is allowed to access https://developers.google.com/
Canada is allowed to access https://developers.google.com/

https://developers.google.com/ is limited for Iran
https://developers.google.com/ is limited for North Korea
https://developers.google.com/ is limited for Syria
https://developers.google.com/ is limited for Cuba

در تفسیر کدهای جدید بایستی گفت که پیش از هر چیز یک متغیر جدید تحت عنوان theCountriesUnderSanction$ (کشورهای تحریمی) ساخته‌ایم که هیچ مقدار پیش‌فرضی برایش در نظر گرفته نشده و این در حالی است که در خط ششم در foreach اول قصد داریم آن را پر نماییم بدین صورت که جایی که کشورهای تحریمی با استفاده از یک دستور شرطی مشخص شده‌اند، مقدار متغیر country$ را در هر بار چرخش حلقه، به عنوان یکی از کلیدهای متغیر یا بهتر بگوییم آرایهٔ theCountriesUnderSanction$ ریخته‌ایم.

نکته
چیزی که در این رابطه بسیار حائز اهمیت است این که حتماً بایستی پس از theCountriesUnderSanction$ علائم [ ] را قرار داد که در غیر این صورت فقط و فقط همواره آخرین مقدار country$ در آن ذخیره خواهد شد. به عبارتی، علائم [ ] متغیر theCountriesUnderSanction$ را به یک آرایه تبدیل کرده‌اند.

در ادامه و در خط یازدهم از یک دستور شرطی استفاده کرده‌ایم بدین منظور که چک کنیم ببینیم آیا هیچ دیتایی داخل متغیر theCountriesUnderSanction$ ذخیره شده‌ است یا خیر که اگر شرط برقرار بود، کدهای داخل { } اجرا خواهند شد (در حقیقت، تابع از پیش تعریف شدهٔ ()count تعداد خانه‌های یک آرایه را بازمی‌گرداند و در این شرط گفته‌ایم که اگر این تعداد بزرگ‌تر از صفر بود، یا به عبارتی محتوایی داخل این آرایه قرار داشت ولو یک اِلِمان، دستوارتی که در ادامه آمده‌اند اجرا شوند.) در ادامه، مجدد از یک حلقهٔ foreach استفاده نمود و به عنوان ورودی‌اش آرایهٔ theCountriesUnderSanction$ را به این لوپ پاس داده‌ایم تا برایمان لیست کشورهای تحریم‌شده را چاپ نماید.


لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
۱۳۹۷/۱۲/۱۴
مشتاقانه منتظر ادامه آموزش هاتون هستیم.
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
۱۳۹۷/۰۶/۱۲
مرسی از آموزش خوب شما
فقط توروخدا آقای مرادی بیخیال این آموزش نشین. پر قدرت مثل همیشه و محکم تر به این آموزش ادامه بدین. من تا اینجا خوندم و منتظر ادامه آموزش هستم. خیلی نیاز دارم به این آموزش. هر روز میام اینجا سر میزنم ولی میبینم آموزشی اضافه نشده ناامید برمیگردم. زندگی من با این آموزش تعیین تکلیف میشه اگه از پسش بر بیام. پس توروخدا زودتر تمومش کنین یعنی ادامه بدین. زیاد فاصله نندازین.
مرسی مرسی مرسی
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
۱۳۹۷/۰۵/۲۲
میشه یه مثال واقعی که تو دنیای واقعی ازش استفاده بشه بزنید؟