زبان برنامه نویسی سی/دستور goto: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
جزبدون خلاصۀ ویرایش |
جزبدون خلاصۀ ویرایش |
||
خط ۲۳:
در اینجا result یک برچسب است با شناسه و نام result که اگر بنویسید ;goto result روند اجرای برنامه به برچسب result میرود و خطبهخط از آنجا به بعد ادامه یافته و کدها اجرا میشوند . برچسب میتواند پس از goto یا قبل از goto نوشته شده باشد .
یکی از کاربردهای goto برای خروج از حلقههای تو در تو میباشد ؛ مثلاً فرض کنید شما یک برنامهای مینویسید که مبتنی بر هوش مصنوعی است و در هنگام نوشتن هوش مصنوعی ( مثل پروژه CGI ) مجبورید از حلقههای خیلی زیادی که تو در تو نیز هستند استفاده کنید ؛ مثلاً فرض کنید ۸ حلقه تو در تو در دارید که اگر شرط خاصی برقرار بود باید تمام حلقهها بشکنند و از تکرار آنها جلوگیری شود ؛ اگر بخواهید از روش متداول شکستن حلقهها استفاده کنید باید یک به یک در حلقهها شرط خود را بنویسید که اگر برقرار بود با دستور break حلقه ، شکسته شود ؛ پس شما ۸ بار باید کد تکراری را بزنید در حالی که با نوشتن یک برچسب بیرون از هر ۸ حلقه ( و پس از آنها ) و نوشتن یک goto داخل حلقه مورد نظر و داخلی اجرای تمام حلقهها را متوقف میکنید و روند اجرای برنامه را به بیرون از حلقهها و ادامه برنامه میفرستید . از goto برای ایجاد یک حلقه نیز استفاده میشود . مثلاً یک برچسب را مینویسید و سپس شرطی را مینویسید ؛ که متغیر شرط در خط بعدی یا خطوط بعدی تغییر میکند و در انتهای آن از دستور goto برای ارجاع به برچسب استفاده میکنید که کامپایلر باز میگردد به خطوط قبلی و آنها را اجرا میکند و سپس دوباره به goto میرسد پس دوباره باز میگردد به خطوط و کدهای قبلی و آنها را اجرا میکند و این در حالیست که در هر بار اجرا متغیر شرط به برقرار نبودن نزدیک میشود تا جایی که در نهایت برقرار نیست و بنابراین goto نیز اجرا نمیشود و ادامه برنامه دنبال میشود . این روش مانند ساخت یک حلقه است '''اما به هیچ وجه توصیه نمیشود''' . شما میتوانید از goto برای ایجاد اتصال میان بخشهای مختلف کدها نیز استفاده کنید ؛ اما این نیز توصیه نمیشود چرا که برنامه شما را ناخوانا و پیچ در پیچ میکند ( حتی ممکن است خود شما نیز به اشتباه بیافتید که در نهایت برنامه خروجی ، نتیجه مطلوب را نخواهد داشت ) مثلاً فرض کنید شما چند حلقه و دستورها و عملگرهای مختلفی داخل تابع خود دارید و با کمک دستورهای شرطی و دستور goto ، مرتب برنامه را از این قسمت به آن قسمت و از آن قسمت به این قسمت ، پاس کاری میکنید ولی این کار درک برنامه را مشکل میکند و
در مجموع سعی کنید تا زمانی که نیازی نیست از goto استفاده نکنید . دقت کنید که از goto تنها داخل بدنه تابع میتوان استفاده نمود
مثال برای ایجاد یک حلقه :
خط ۵۴:
'''استفاده دیگر عمومی goto'''
دستور goto در زبان C و خانواده آن و تمام زبانهایی که از زبان C الگو گرفتهاند وجود دارد . اما بسیاری از زبانهای خیلی سطح بالا امکاناتی دارند که نیاز به استفاده از goto را از میان بر میدارند . ولی استفاده goto فقط محدود به خارج شدن از حلقههای تو در تو نیست ؛ بلکه جلوی کد نویسی اضافه و اشغال حجم زیاد فایل برنامه را به نحو دیگری همانند خروج از حلقهها میگیرد . برای یک مثال ملموس مجبوریم کمی به مباحث نرمافزاری بپردازیم . در دنیای نرمافزار فرمتها ( Format ) ی مختلفی برای تصاویر رستر ( Raster ) که بر اساس پیکسل تعریف میشوند و یا تصاویر وکتور ( Vector ) که با خطوط و اشکال تعریف میشوند ، فرمتهای مالتی مدیا ( چند رسانهای ) مثل فرمتهای صوتی MP2 یا MP3 یا FLAC یا AIFF یا AC3 یا AAC و یا فرمتهای ویدئویی MPEG4 و یا ماتروسکا که پسوند mkv ذخیره میشود وجود دارند که شما در نوشتن برنامههای خود به خواندن و نوشتن آنها احتیاج دارید . اصلاً گاهی ممکن است خودتان بخواهید یک فرمت مخصوص به خود را تعریف کنید ( برای برنامههای
به صورت سمبلیک میتوانید این گونه کد نویسی را در خطوط زیر مشاهده کنید :
خط ۸۲:
*/<br>
corrupted:<br>
<br>
}<br>
خط ۹۲:
گاهی نیز در شرایط مختلف ممکن است تابع مثلاً مقدار 0 را برگرداند و در شرایط دیگری مقدار 1 را در این مواقع نیز با دستور goto برنامهنویسی خود را خلاصه میکنیم . شروط بررسی میکنند و در صورت صدق کردن با دستور goto به برچسب مثلاً zero و یا one میروند و تابع با دستور return مقدار 0 یا 1 را باز میگرداند
'''یادداشت :''' از اینکه وارد مطالب حاشیهای شدیم و به مباحث تکنیکی پرداختیم پوزش میطلبیم ولی این حداقل مطالبی بود که باید بیان میشد تا بتوانیم استفاده متداول از دستور goto در برنامههای نوشته شده به C را نمایش دهیم . ضمن اینکه زمانی که شما بخواهید وارد برنامهنویسی و مهندسی نرمافزار شوید خود به خود ناچارید تمام این مطالب را فرا بگیرید ( نمونههای زیادی از این دست وجود دارند مثل پروزه Image Magic و یا mplayer که کاربرد گستردهای نیز دارند ) از سویی دیگر پوزش میطلبیم که برنامهای کامل به زبان C را به عنوان نمونه ننوشتیم ؛ چرا که ماکروها و تابعهای کتابخانهای بسیاری که هنوز به آنها
[[رده:زبان برنامه نویسی سی]]
|