Mahmood_M
یک شنبه 15 مهر 1386, 06:28 صبح
به نام خدا
نحوه تعریف یک Label و پرش به آن در برنامه
در این مقاله قصد داریم در مورد عباراتی ناآشنا صحبت کنیم !
شاید استفاده از عباراتی مثل Label یا goto در کدنویسی برای شما آشنا نباشد ، این عبارات معمولا کمتر استفاده میشوند اما دانستن و شناختن آنها خالی از لطف نیست ! ...
این دستورات این امکان را به شما میدهند که بتوانید قسمتی از یک کد را نام گذاری کرده و سپس در میان کدها به آن پرش کنید ... !
با استفاده از عبارت Label می توانید برای قسمتی از کدهای خود نامی انتخاب نمایید ! ، یک Label مانند یک متغیر ( و در همان مکانی که متغیر تعریف می شود ) تعریف میشود و با دستور Goto میتوانید به قسمت نامگذاری شده پرش کنید ، به کد زیر توجه کنید :
…
var
M : String;
label SetCaption;
begin
M := InputBox('Caption', 'Prompt', 'Default';(
if M = 'MyCaption' then
Goto SetCaption;
SetCaption : Caption := M;
end;
در کد بالا قسمتی از کد با عبارت SetCaption نامگذاری شد ، این عبارت در بالای کد و به عنوان یک Label تعریف شد ، در کد بالا مقدار M ( که از نوع String تعریف شده ) برابر با مقدار یک InputBox قرار میگیرد ، اگر مقدار وارد شده در InputBox برابر با عبارت ' MyCaption ' باشد ، دستور Goto ، برنامه را به setCaption پرش میدهد ، یعنی درواقع ما قسمتی از کد را علامت گذاری کردیم و سپس به آن پرش میکنیم ...
در کد بالا به نحوه تعریف یک Label توجه کنید ، وقتی آن را در قسمت Var ( بالای Begin ) تعریف کردیم ، در بدنه کد باید نام آن را نوشته و سپس یک علامت " : " قرار داده و سپس کد خود را بنویسیم :
SetCaption : Caption := M;
اگر کدی که در Label مورد نظر میخواهید قرار دهید بیشتر از یک خط باشد باید از begin و end استفاده نمایید :
SetCaption :
begin
Caption := M;
Caption := Caption + M;
end;
برای استفاده از دستور Goto هم ابتدا باید عبارت goto نوشته و سپس نام Label را قرار دهید :
Goto SetCaption;
البته استفاده از این دستورات در مواقعی مانند کد بالا واقعا احمقانه است ! ، چرا که با دستوری بسیار ساده تر میشود به هدف رسید ...
اما در مواقعی که تعداد خطوط کدها بیشتر و کدها پیچیده تر باشد ، این عبارات شما را کمک خواهند کرد ...
به مثال زیر نگاه کنید :
var
M : String;
label GetCaption;
begin
M := InputBox('Caption', 'Prompt', 'Default');
GetCaption :
begin
M := InputBox('Caption', 'Prompt', 'Default');
end;
if M <> 'MyCaption' then
goto GetCaption
else
Caption := M;
end;
توجه کنید که با اجرا شدن کد بالا ابتدا کد درون GetCaption که به عنوان یک Label تعریف شده اجرا نخواهد شد ، بلکه برنامه به خط بعد از آن خواهد رفت ( درواقع تا زمانی که یک Label را با دستور Goto فراخوانی نکرده اید ، کد درون آن اجرا نخواهد شد )، اما اگر مقدار M که برابر با مقدار یک InputBox قرار داده شده برابر با (( MyCaption )) نبود ، برنامه با استفاده از دستور goto به قسمت GetCaption رفته و سپس یک InputBox برای دریافت مقدار متغیر M نمایان خواهد شد ...
چند نکته :
* میتوانید چند Label را در یک جا تعریف نمایید :
label GetCaption, SetCaption , ... ;
* نام یک Label میتواند هر شناسه عددی ای بین 0 تا 9999 باشد ! :
label 10;
begin
10 :
begin
...
end;
end;
* در یک بدنه کد بیش از یک بار یک Label را تعریف نکنید ، به عنوان مثال ، کد زیر با خطای کامپایل مواجه خواهد شد :
Label 10;
begin
10 :
begin
Caption := 'M';
end;
10 :
begin
Caption := 'N';
end;
end;
نکته مهم :
توجه کنید که از کلمه کلیدی Var برای تعریف یک Label استفاده نمی شود بلکه به خاطر وجود متغیر در کدهای بالا ما در زیر این عبارت Label را تعریف کردیم ، یک Label تنها کافی است که در بالای عبارت begin تعریف شود و تعریف آن در زیر عبارت var و بدون وجود متغیر ، یک خطای کامپایل در پی خواهد داشت ... ! ، به نمونه های زیر دقت کنید :
نمونه غلط :
Procedure …
Var
label MyLabel;
begin
…
end;
نمونه صحیح :
Procedure …
label MyLabel;
begin
…
end;
* از این دستورات برای پرش از / به یک بلوک Try / Except و یا Try / Finally استفاده نکنید ...
یعنی به Label ای پرش نکنید که در یک بلوک Try تعریف شده است ( درواقع Label را در بلوک Try تعریف نکنید ) ، همچنین از داخل یک بلوک Try ، به خارج از آن ( یعنی Label ای که در خارج از آن تعریف شده ) پرش نکنید ... !
نکته آخر :
مطمئنا در کدنویسی های خود از این دستورات زیاد استفاده نخواهید کرد ، اما سعی کنید چند بار به صورت تمرینی این دستورات را امتحان کرده تا با آنها آشنا شوید ، از جمله کاربرد این دستورات میشود به خروج از حلقه ها اشاره کرد ، با استفاده از دستور Goto میتوانید از داخل یک حلقه به یک Label که در خارج از حلقع تعریف شده پرش کنید ... .
پایان ...
امیدوارم مفید بوده باشه ...
PDF این مقاله رو می تونید از این آدرس (http://mahmoodn.persiangig.com/LabelandGoto.pdf) دانلود کنید ...
موفق باشید ...
نحوه تعریف یک Label و پرش به آن در برنامه
در این مقاله قصد داریم در مورد عباراتی ناآشنا صحبت کنیم !
شاید استفاده از عباراتی مثل Label یا goto در کدنویسی برای شما آشنا نباشد ، این عبارات معمولا کمتر استفاده میشوند اما دانستن و شناختن آنها خالی از لطف نیست ! ...
این دستورات این امکان را به شما میدهند که بتوانید قسمتی از یک کد را نام گذاری کرده و سپس در میان کدها به آن پرش کنید ... !
با استفاده از عبارت Label می توانید برای قسمتی از کدهای خود نامی انتخاب نمایید ! ، یک Label مانند یک متغیر ( و در همان مکانی که متغیر تعریف می شود ) تعریف میشود و با دستور Goto میتوانید به قسمت نامگذاری شده پرش کنید ، به کد زیر توجه کنید :
…
var
M : String;
label SetCaption;
begin
M := InputBox('Caption', 'Prompt', 'Default';(
if M = 'MyCaption' then
Goto SetCaption;
SetCaption : Caption := M;
end;
در کد بالا قسمتی از کد با عبارت SetCaption نامگذاری شد ، این عبارت در بالای کد و به عنوان یک Label تعریف شد ، در کد بالا مقدار M ( که از نوع String تعریف شده ) برابر با مقدار یک InputBox قرار میگیرد ، اگر مقدار وارد شده در InputBox برابر با عبارت ' MyCaption ' باشد ، دستور Goto ، برنامه را به setCaption پرش میدهد ، یعنی درواقع ما قسمتی از کد را علامت گذاری کردیم و سپس به آن پرش میکنیم ...
در کد بالا به نحوه تعریف یک Label توجه کنید ، وقتی آن را در قسمت Var ( بالای Begin ) تعریف کردیم ، در بدنه کد باید نام آن را نوشته و سپس یک علامت " : " قرار داده و سپس کد خود را بنویسیم :
SetCaption : Caption := M;
اگر کدی که در Label مورد نظر میخواهید قرار دهید بیشتر از یک خط باشد باید از begin و end استفاده نمایید :
SetCaption :
begin
Caption := M;
Caption := Caption + M;
end;
برای استفاده از دستور Goto هم ابتدا باید عبارت goto نوشته و سپس نام Label را قرار دهید :
Goto SetCaption;
البته استفاده از این دستورات در مواقعی مانند کد بالا واقعا احمقانه است ! ، چرا که با دستوری بسیار ساده تر میشود به هدف رسید ...
اما در مواقعی که تعداد خطوط کدها بیشتر و کدها پیچیده تر باشد ، این عبارات شما را کمک خواهند کرد ...
به مثال زیر نگاه کنید :
var
M : String;
label GetCaption;
begin
M := InputBox('Caption', 'Prompt', 'Default');
GetCaption :
begin
M := InputBox('Caption', 'Prompt', 'Default');
end;
if M <> 'MyCaption' then
goto GetCaption
else
Caption := M;
end;
توجه کنید که با اجرا شدن کد بالا ابتدا کد درون GetCaption که به عنوان یک Label تعریف شده اجرا نخواهد شد ، بلکه برنامه به خط بعد از آن خواهد رفت ( درواقع تا زمانی که یک Label را با دستور Goto فراخوانی نکرده اید ، کد درون آن اجرا نخواهد شد )، اما اگر مقدار M که برابر با مقدار یک InputBox قرار داده شده برابر با (( MyCaption )) نبود ، برنامه با استفاده از دستور goto به قسمت GetCaption رفته و سپس یک InputBox برای دریافت مقدار متغیر M نمایان خواهد شد ...
چند نکته :
* میتوانید چند Label را در یک جا تعریف نمایید :
label GetCaption, SetCaption , ... ;
* نام یک Label میتواند هر شناسه عددی ای بین 0 تا 9999 باشد ! :
label 10;
begin
10 :
begin
...
end;
end;
* در یک بدنه کد بیش از یک بار یک Label را تعریف نکنید ، به عنوان مثال ، کد زیر با خطای کامپایل مواجه خواهد شد :
Label 10;
begin
10 :
begin
Caption := 'M';
end;
10 :
begin
Caption := 'N';
end;
end;
نکته مهم :
توجه کنید که از کلمه کلیدی Var برای تعریف یک Label استفاده نمی شود بلکه به خاطر وجود متغیر در کدهای بالا ما در زیر این عبارت Label را تعریف کردیم ، یک Label تنها کافی است که در بالای عبارت begin تعریف شود و تعریف آن در زیر عبارت var و بدون وجود متغیر ، یک خطای کامپایل در پی خواهد داشت ... ! ، به نمونه های زیر دقت کنید :
نمونه غلط :
Procedure …
Var
label MyLabel;
begin
…
end;
نمونه صحیح :
Procedure …
label MyLabel;
begin
…
end;
* از این دستورات برای پرش از / به یک بلوک Try / Except و یا Try / Finally استفاده نکنید ...
یعنی به Label ای پرش نکنید که در یک بلوک Try تعریف شده است ( درواقع Label را در بلوک Try تعریف نکنید ) ، همچنین از داخل یک بلوک Try ، به خارج از آن ( یعنی Label ای که در خارج از آن تعریف شده ) پرش نکنید ... !
نکته آخر :
مطمئنا در کدنویسی های خود از این دستورات زیاد استفاده نخواهید کرد ، اما سعی کنید چند بار به صورت تمرینی این دستورات را امتحان کرده تا با آنها آشنا شوید ، از جمله کاربرد این دستورات میشود به خروج از حلقه ها اشاره کرد ، با استفاده از دستور Goto میتوانید از داخل یک حلقه به یک Label که در خارج از حلقع تعریف شده پرش کنید ... .
پایان ...
امیدوارم مفید بوده باشه ...
PDF این مقاله رو می تونید از این آدرس (http://mahmoodn.persiangig.com/LabelandGoto.pdf) دانلود کنید ...
موفق باشید ...