ايران ويج

نسخه‌ی کامل: بررسی GoTo
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3
هر کی دلیلی مبنی بر رد کردن یا استفاده کردن از GoTo
داره لطفآ ارایه کنه  At
البته دلایل علمی و منطقی باشه نه هوایی
با سلام
goto یک نوع پرش هست که از نا کجا به نا کجا صورت می گیره و در تحلیل یک برنامه پیدا کردن این نا کجا ها سخت هستن ولی مثلا exit for که خودش یک پرش هست از نا کجا به انتهای for هست پس پیدا کردن مقصد و تحلیل و درک برنامه خیلی ساده تر می شه
البته این نظر منه
نه مشخصه کجا می ره
به لیبل می ره
لیبل رو هم به راحتی می شه تو سورس پیدا کرد
و می شه ادامه مسیر برنامه رو از اونجا پی گیری کرد
به نظر من این دلیل قانع کننده ای نیست !!!
دوستان سلام

اگر کسی با اسمبلر ها برنامه نوشته باشه میدونه که این goto همون چیزیه که توی اسمبلی خیلی کاربرد داره نه توی زبان های سطح بالا ! در واقع اونجا توی اسمبلر jump نامیده میشه و انواع مختلفی داره ! در زبان های سطح بالا مثلا شرط خروج از حلقه با توجه به دستور زبانی که داریم باهاش کار می کنیم مثلا واسه حلقه for تعریف می کنیم تا چه زمانی به چرخشش ادامه بده ولی مثلا توی زبان اسمبلی چیزی به شکل حلقه های زبانهای سطح بالا وجود نداره و در واقع با پرش از خطوط پایینی به بالایی میشه کار یه حلقه رو شبیه سازی کرد ! این نکته رو بگم که cpu کامپیوتر ما کد های ماشین رو خط به خط اجرا می کنه و مفهوم حلقه و شرط و شروط ، براش معنی نداره !

حالا......پرش توی اسمبلر ها با کمک همون label هایی که توسط برنامه نویس نوشته انجام میشه اما بطور کلی label ها چیزی نیستند جز یک متن معمولی راهنما برای ساده تر شدن کار برنامه نویسان ! زمان کامپایل تمام label ها به آدرس ها و آفست های حافظه تبدیل میشن و توی کد پایانی یا همون object code هیچ نشانی از label ها نخواهد بود !

معمولا توی زبانهای سطح بالا پرش ها به نوعی دیگه تفسیر میشن ( به عنوان شرط حلقه ها یا if ها و ...) و در واقع برای همین سطح بالا نامیده میشن ، چون در زبان سطح پایینی مثل اسمبلی ما قواعدی برای چرخش یا دستوراتی مثل if , else و خروج نداریم جز همین پرش ها یا jump ها !

برای کسب اطلاعات بیشتر به کتاب های زبان اسمبلی و مایکروپروسسورها مراجعه کنید !
به اعتقاد من Goto شکا کد نویسی رو زشت میکنه اما بودن اون در بعضی جاها ضروریه.
مثلا زمانی که قراره یک یا چند خط کد دوباره اجرا بشه (در شرایط خاص) من ترجیح می دم به جای ابنکه برای اون خط (ها), یک زیر برنامه جدید با چند (ها) ورودی و خروجی تعریف کنم بیام و فقط با یک Goto Label و Label کار رو یه سره کنم.

برای طله خطا هم همیشه از Goto استفاده میشه:
On Error Goto Label

اما تا اونجایی که بتونم از Goto استفاده نمی کنم چون همون طور که گفتم نمی خوام کد هام زشت بشند !
ممد جان شما آخرش استفاده ازش رو رد می کنی یا تایید ؟
چون شما فقط به کاربردش اشاره کردی
و در جواب اقا جواد باید بگم که صحبت هاشون رو تایید می کنم
به جز اون قسمت از حرفهاشون که گفتن کدها زشت می شه
اینجا معیار هر کسی برای زشت و قشنگی فرق می کنه پس
روش نمی شه به عنوان دلیل حساب کرد !

من از نظرات دوستان استفاده کردم ولی تا حالا کسی
به نظر من دلیل قانع کننده ای برای استفاده یا عدم استفاده ازش
نیورده
چرا به جایه مشخصی میره ؟
یعنی شما به یک لیبل توی 1000 خط کد می گی جای مشخص ؟
فکر کن 10 جا goto استفاده شده باشه شما باید کارتو ول کنی بشینی label پیدا کنی تا دستورا رو بفهمی پس بجای مشخصی نمی ره ولی وقتی exit for
می نویسیم دیگه مشخصه کجا می ره و نیازی نیست که دنبالش بگردی.
اما ما هنوز منظورت رو از سوالی که پرسیدی, نفهمیدیم.
یه زمانی یادمه GWBasic بود قربونش برم توش امکان تعریف Sub وجود نداشت بنابراین خودت بودی و برنامه ای که تقریبا به اندازه خطوط کد درش GOTO به کار می رفت!
اما با وجود محیط هایی که درشون امکان تعریف SUB هست پست به نوعی بی معنی استفاده ار Goto (منظوره من هم از زشت شدن همین بود. چون محیطی که درش از Sub پشتیبانی میشه باید تا حد امکان Goto هارو درش کم کرد)
ببینید از نظر من استفاده کردن یا نکردن از goto بستگی به مهارت و تجربه خود برنامه نویس داره !
همون طور که گفتم تمام زبانهای برنامه نویسی سطح بالا راهکارهای بهتری رو برای پرش های مختلف در سطح برنامه ارائه می کنند که در مقابلش وجودیت goto رو بسیار کم رنگ می کنه !
اگر کسی بسیار تازه کار باشه ( یعنی با امکانات زبان مربوطه آشنا نباشه ) یا نتونه یه کد دقیق توی یه زبان برنامه نویسی بصورتی رو کاملا کارا بنویسه شاید برای سادگی ، در تبدیل منطقش به الگوریتم و برنامه ، از goto استفاده کنه . خیلی اوقات هم ممکنه برنامه نویسی از goto برای راحت کردن فهم برنامه اش استفاه کنه مثلا نخواد یا نتونه برنامه رو بشکل پیچیده بازگشتی یا Recursive بنویسه و یا حتی نتونه یه راه حل مشخص بدون goto براش پیدا کنه ، اونوقته که میاد و از goto استفاده می کنه ! در کل من خیلی به ندرت از goto استفاده می کنم و کرده ام و اکثر اوقات نیازی به اون نمی بینم ! اما بعضی اوقات همون جور که آقا جواد هم گفتند در کدی مثل On Error Goto دیگه اجتناب ناپذیره و باید استفاده بشه چون راه دیگه ای نداریم . بطور کل برنامه نویسان نست به Goto خیلی جبهه گیری می کنند و استفاده از اون رو یه برنامه نویسی درست نمی دونن اما بقول جمله ای از کتاب ++VC آقای Ivor Horton ، کلمه کلیدی Goto و استفاده از اون نمیتونه برنامه نویسی بدی باشه اما معمولا برنامه نویسان از اون دوری می کنند و استفاده از اون رو درست نمی دونند !

همون طور که گفتم goto مدل مشابه سطح پایین jump معمولی هست و از سطح پایین به سطح بالا ارث رسیده اما با وجود امکانات سطح بالا تقریبا بی مصرفه مگر در مواردی که ذکر کردم !
نقل قول: یعنی شما به یک لیبل توی 1000 خط کد می گی جای مشخص ؟
آره
نقل قول: فکر کن 10 جا goto استفاده شده باشه شما باید کارتو ول کنی
بشینی label پیدا کنی تا دستورا رو بفهمی پس بجای مشخصی نمی ره
نخیر
از امکان پیدا کردن ویرایشگر زبان برنامه نویسی استفاده می کنیم
همه این ها به نظر من دلیل بر تنبلی هست !
نقل قول: 1000 خط کد
دیگه برنامه ها جدیدآ به ساب ها و توابعی تقسیم می شن که فکر نکنم
اون قسمت مین برنامه هزار خط بشه !

ببینید دوستان خیلی از استاتید دانشگاهها و کلاس ها و ... می آن و از
اول تو کله اون کسی که می خواهد برنامه نویسی کنه می کنن که
GoTo دستور بی خود و حتی مضرری است و اگه از شون بپرسی
نمی تونن برات دلیل قانع کننده ای بیارن
و همش تبلی رو پیشه می کنن ( به کسی توهین نشه شفاف سازی می
کنیم ) و می گن که درک برنامه سخت می شه
حالا گیریم که درک برنامه سخت بشه ( که به نظر من اینطوری نیست )
یعنی به نظر شما تنها عامل سخت شدن درک برنامه GoTo هست !؟!
نقل قول: منظوره من هم از زشت شدن همین بود
به نظر شما زشته شاید به نظر من Do Loop زشت باشه ( به عنوان مثال گفتما )

ببینید دوستان من می خواهم تو این تاپیک تکلیف این GoTo رو روشن کنم
یه دلیل درستی بیارید
که بشه روش حساب کرد
آخه سخت فهمیدن برنامه که نشد دلیل !



goto یکی از اشکالاتش اینه که فهم کد رو برای دیگران مشکل میکنه. یکی هم این که خود برنامه نویس ممکنه کمی گیج بشه و احتمال خطا در برنامش بالا بره.
ولی با استفاده از حلقه ها و exit و زیربرنامه ها هم فهم کد راحت تر میشه. هم کد ها مرتب تر میشن و برنامه نویس کمتر گیج میشه و احتمال باگ و خطا میاد پایین. هم برنامه با کلاس تر و حرفه ای تر میشه و شکل استاندارد به خودش میگیره.
صفحه‌ها: 1 2 3