গোটো ব্যবহার করা কি কখনও সার্থক?


29

gotoপ্রায় সর্বজনীন নিরুৎসাহিত হয়। এই বিবৃতি ব্যবহার করে কি কখনও লাভজনক হয়?



1
gotoসিপিইউ চূড়ান্তভাবে কী করে, কিন্তু লক্ষ্যটির শেষের কোনও চিহ্ন না থাকায় এটি মানুষের বুঝতে এবং বিমূর্ত করার কী প্রয়োজন তা কার্যকরভাবে কাজ করে না। ইন্টারকালের সাথে তুলনা করুন COMEFROM

2
@ থরবজরন রাভানএন্ডারসেন, যখন তারা কোনও রাষ্ট্রের মেশিনে রাষ্ট্রের রূপান্তরের কথা বলছেন তখন অন্যরা কী বোঝাতে পারে ? আপনি কি মিল দেখতে পাচ্ছেন না? "প্রদত্ত অবস্থায় যান ", এর অর্থ যা এবং এর চেয়ে অন্য কিছু এ জাতীয় তুচ্ছ জিনিসটির অপ্রয়োজনীয় জটিলতা ছাড়া কিছুই নয়। এবং "চিহ্ন না" বলতে কী বোঝ? লেবেল যেমন একটি চিহ্ন।
এসকে-যুক্তি

@ এসকে-যুক্তি, আপনি গোটোকে কতটা দূরে আসতে দেবেন তার উপর নির্ভর করে। রাষ্ট্রীয় মেশিনগুলি প্রয়োগের জন্য গোটো প্রয়োজন হয় না।

@ থরবজরনআরএনএন্ডারসন অবশ্যই gotoপ্রয়োজন নেই। এগুলি বাধ্যতামূলক ভাষাগুলিতে প্রয়োগ করার কেবলমাত্র যুক্তিযুক্ত উপায়, যেহেতু এটি রাষ্ট্রের উত্তরণের খুব শব্দার্থকতার নিকটতম বিষয়। এবং এর গন্তব্য উত্স থেকে অনেক দূরে হতে পারে, এটি পাঠযোগ্যতার ক্ষেত্রে বাধা দেয় না। এই জাতীয় কোডটির আমার প্রিয় উদাহরণটি হল ডি কূথের অ্যাডভেঞ্চার গেমটি প্রয়োগ করা।
এসকে-যুক্তি

উত্তর:


49

স্ট্যাক ওভারফ্লোতে এটি বেশ কয়েকবার আলোচনা করা হয়েছে এবং ক্রিস গিলাম এর সম্ভাব্যgoto ব্যবহারগুলির সংক্ষিপ্তসার জানিয়েছে :

পরিষ্কারভাবে একটি ফাংশন থেকে প্রস্থান করা

প্রায়শই কোনও কার্যক্রমে, আপনি সংস্থানগুলি বরাদ্দ করতে পারেন এবং একাধিক জায়গায় প্রস্থান করতে হবে। প্রোগ্রামাররা ফাংশনটির শেষে রিসোর্স ক্লিনআপ কোডটি রেখে তাদের কোডটি সরল করতে পারে ফাংশনের সমস্ত "বহির্গমন পয়েন্টগুলি" ক্লিনআপ লেবেলটিতে যাবে। এইভাবে, আপনাকে ফাংশনের প্রতিটি "প্রস্থানস্থান" এ ক্লিনআপ কোড লিখতে হবে না।

নেস্টেড লুপগুলি প্রস্থান করা হচ্ছে

যদি আপনি কোনও নেস্টেড লুপে থাকেন এবং সমস্ত লুপগুলি ভেঙে ফেলার প্রয়োজন হয় তবে একটি গোটো ব্রেক স্টেটমেন্ট এবং যদি-চেকের চেয়ে এটিকে আরও পরিষ্কার এবং সহজ করে তুলতে পারে।

নিম্ন-স্তরের কর্মক্ষমতা উন্নতি

এটি কেবল পারফ-সমালোচনামূলক কোডে বৈধ, তবে গোটো স্টেটমেন্টগুলি খুব দ্রুত কার্যকর হয় এবং কোনও ফাংশনের মধ্য দিয়ে যাওয়ার সময় আপনাকে উত্সাহ দিতে পারে। এটি একটি দ্বি প্রান্তের তরোয়াল, তবে, কারণ একটি সংকলক সাধারণত গোটোসযুক্ত কোডটিকে অনুকূল করতে পারে না।

আমি যুক্তি দিয়েছি, অন্য অনেকের মত তর্ক হবে যে এই সমস্ত ক্ষেত্রে, ব্যবহারটি gotoএকটি কোণার থেকে বেরিয়ে আসার জন্য একটি উপায় হিসাবে ব্যবহৃত হয় যার নিজের মধ্যে কোডড থাকে এবং এটি সাধারণত কোডের একটি লক্ষণ যা পুনরুদ্ধার করা যায়।


28
প্রথম সমস্যাটি খুব সুন্দরভাবে finallyআধুনিক ভাষাগুলিতে ব্লকগুলি সমাধান করা হয় এবং দ্বিতীয়টি লেবেলযুক্ত breakএস দ্বারা সমাধান করা হয় । আপনি যদি সি এর সাথে আটকে থাকেন তবে gotoএই সমস্যাগুলি মার্জিতভাবে সমাধান করার একমাত্র উপায়।
চিন্ময় কাঞ্চি

2
খুব ভাল পয়েন্ট। আমি পছন্দ করি জাভা কীভাবে একাধিক স্তরের লুপগুলি ভেঙে ফেলতে দেয়
কেসব্যাশ

4
@ চিন্ময় - অবশেষে ব্লকগুলি কেবলমাত্র 1 এর জন্য প্রযোজ্য) আধুনিক ভাষাগুলির সাথে সেগুলি রয়েছে এবং খ) আপনি ওভারহেড সহ্য করতে পারেন (ব্যতিক্রম হ্যান্ডলিংয়ের ওভারহেড থাকে না)) অর্থাৎ, ব্যবহার finallyকরা কেবলমাত্র সেই পরিস্থিতিতেই বৈধ। খুব বিরল, তবুও বৈধ পরিস্থিতি রয়েছে যেখানে গোটো যাওয়ার উপায়।
luis.espinal

21
ঠিক আছে মানুষ ... কি নরক মধ্যে পার্থক্য break 3বা break myLabelএবং goto myLabel। ওহ এটি ঠিক কীওয়ার্ড। আপনি ব্যবহার করে থাকেন break, continueঅথবা কিছু অনুরূপ শব্দ আপনি একটি ব্যবহার Infact হয় goto(আপনি ব্যবহার করে থাকেন for, while, foreach, do/loopআপনি একটি শর্তাধীন এতে যান ব্যবহার করছেন।)
ম্যাথু চুনকাম

4
নিম্ন স্তরের পারফরম্যান্স সম্পর্কে - আধুনিক প্রসেসরের আচরণ অনুমান করা কঠিন হতে পারে (পাইপলাইন, অর্ডার অফ-অর্ডার এক্সিকিউশন) সুতরাং সম্ভবত 99% ক্ষেত্রে এটির পক্ষে এটি উপযুক্ত নয় এমনকি এটি ধীর হতে পারে। @ ম্যাথিউয়েইট: স্কপিং। যদি আপনি নির্বিচারে বিন্দুতে সুযোগ প্রবেশ করেন তবে নির্মাতাদের কী বলা উচিত (মানুষের কাছে) স্পষ্ট নয় (সি তেও সমস্যাটি বিদ্যমান)।
ম্যাকিয়েজ পাইচোটকা

42

উচ্চ-স্তরের নিয়ন্ত্রণ প্রবাহ নির্মাণগুলি সমস্যা ডোমেনের ধারণাগুলির সাথে মিলে যায়। একটি যদি / অন্য কোনও শর্তের ভিত্তিতে সিদ্ধান্ত হয়। একটি লুপ বারবার কিছু ক্রিয়া সম্পাদন করতে বলে। এমনকি একটি বিরতি বিবৃতিতে বলা হয়েছে "আমরা এটি বারবার করছিলাম, তবে এখন আমাদের থামানো দরকার"।

অন্যদিকে, একটি গেটো স্টেটমেন্টটি চলমান প্রোগ্রামে কোনও ধারণার সাথে মিল রাখে, সমস্যা ডোমেনে নয়। এটি প্রোগ্রামের একটি নির্দিষ্ট সময়ে কার্যকর করা চালিয়ে যেতে বলেছে । কোডটি পড়ার জন্য কারও কাছে এই সমস্যাটির ডোমেনের ক্ষেত্রে কী বোঝাতে হবে তা নির্ধারণ করতে হবে।

অবশ্যই সমস্ত উচ্চ-স্তরের কনস্ট্রাক্টসগুলি গোটোস এবং সাধারণ শর্তসাপেক্ষ শাখাগুলির ক্ষেত্রে সংজ্ঞায়িত করা যায়। এর অর্থ এই নয় যে তারা কেবল ছদ্মবেশে ছদ্মবেশী। এগুলিকে সীমাবদ্ধ গোটো হিসাবে ভাবেন - এবং এই সীমাবদ্ধতাগুলি তাদের কার্যকর করে তোলে। একটি ব্রেক স্টেটমেন্টটি ঘেরযুক্ত লুপের শেষের দিকে লাফ হিসাবে প্রয়োগ করা হয়, তবে সামগ্রিকভাবে লুপটিতে অপারেটিং হিসাবে কাজ করা ভাল thought

সমস্ত কিছুই সমান, কোড যার কাঠামো সমস্যার ডোমেনটির প্রতিফলন করে তা পড়া এবং বজায় রাখা আরও সহজ হতে থাকে।

এমন কোনও ক্ষেত্রে নেই যেখানে গোটো স্টেটমেন্টটি একেবারেই প্রয়োজন ( এটির জন্য একটি উপপাদ্য রয়েছে ), তবে এমন ঘটনাও রয়েছে যেখানে এটি সর্বনিম্ন খারাপ সমাধান হতে পারে। উচ্চ-স্তরের ভাষাটি কী সমর্থন করে তা নির্ভর করে এই ক্ষেত্রেগুলি ভাষা থেকে আলাদা হয়ে যায় depending

সিতে, উদাহরণস্বরূপ, আমি বিশ্বাস করি যে তিনটি প্রাথমিক পরিস্থিতি রয়েছে যেখানে একটি গোটো উপযুক্ত a

  1. নেস্টেড লুপ থেকে ব্রেকিং। ভাষাটির একটি লেবেল বিরতির বিবৃতি থাকলে এটি অপ্রয়োজনীয় হবে।
  2. কোনও ত্রুটি বা অন্যান্য অপ্রত্যাশিত ইভেন্টের ক্ষেত্রে কোডের প্রসার (সাধারণত একটি ফাংশন বডি) এর বাইরে জামিন দেওয়া। ভাষাটির ব্যতিক্রম থাকলে এটি অপ্রয়োজনীয় হবে।
  3. একটি স্পষ্ট সীমাবদ্ধ রাষ্ট্র মেশিন বাস্তবায়ন করা হচ্ছে। এক্ষেত্রে (এবং, আমি মনে করি, কেবলমাত্র এই ক্ষেত্রে) সমস্যাটি ডোমেনের একটি ধারণার সাথে একটি গোটো সরাসরি সম্পর্কিত হয়, একটি রাজ্য থেকে নির্দিষ্ট অন্য রাজ্যে স্থানান্তরিত হয়, যেখানে বর্তমান রাষ্ট্রটি বর্তমানে কোন কোডের ব্লকটি কার্যকর করছে তার প্রতিনিধিত্ব করে ।

অন্যদিকে, একটি স্পষ্ট সসীম রাষ্ট্র মেশিনটি একটি লুপের অভ্যন্তরে একটি স্যুইচ বিবৃতি দিয়েও প্রয়োগ করা যেতে পারে। এর সুবিধা রয়েছে যে প্রতিটি রাজ্য কোডে একই স্থানে শুরু হয় যা উদাহরণস্বরূপ, ডিবাগিংয়ের জন্য কার্যকর হতে পারে।

যুক্তিসঙ্গতভাবে আধুনিক ভাষায় গোটোর মূল ব্যবহার (এটি যদি / অন্য এবং লুপগুলি সমর্থন করে) ভাষা থেকে অনুপস্থিত একটি নিয়ন্ত্রণ ফ্লো কনস্ট্রাক্ট অনুকরণ করে।


5
দেড় বছরের পুরানো এই প্রশ্নের জন্য এটি এখন পর্যন্ত সেরা উত্তর - বরং অবাক করা। :-)
কনরাড রুডল্ফ

1
"এখন পর্যন্ত সেরা উত্তর" থেকে +1 করুন। --- "যুক্তিযুক্ত আধুনিক ভাষায় গোটোর মূল ব্যবহার (এটি যদি / অন্য এবং লুপগুলি সমর্থন করে) ভাষা থেকে অনুপস্থিত একটি নিয়ন্ত্রণ ফ্লো কনস্ট্রাক্ট অনুকরণ করে" "
ডেভ ডপসন

সুইচ-বিবৃতি রাষ্ট্র মেশিনে, নিয়ন্ত্রণ মান যে লেখ সত্যিই একটি হয় goto। এসএসএসএমগুলি প্রায়শই ব্যবহারের জন্য ভাল কাঠামো হয়, যেহেতু তারা এসএম রাজ্যটিকে মৃত্যুদন্ড কার্যকর করা থেকে পৃথক করে, তবে তারা সত্যই "গোটোস" মুছে দেয় না।
সুপারক্যাট

2
"অন্য সমস্ত কিছু সমান, কোড যার কাঠামোর সমস্যার ডোমেনটি প্রতিফলিত করে সেগুলি পড়া এবং বজায় রাখা সহজতর হয়" " আমি এটি দীর্ঘকাল ধরে পুরোপুরি জানলাম কিন্তু অন্য প্রোগ্রামাররা বুঝতে পারে এবং আসলে বুঝতে পারে এমনভাবে এমনটি স্পষ্টভাবে জানানোর জন্য শব্দটির অভাব ছিল। এই জন্য আপনাকে ধন্যবাদ.
ওয়াইল্ডকার্ড

"কাঠামোগত প্রোগ্রামের উপপাদ্য" আমাকে বিস্মিত করে, যেহেতু এটি স্পষ্টতই এই বিন্দুটি প্রদর্শন করে যে গোটো অনুকরণ করার জন্য কাঠামোগত প্রোগ্রামিং স্টেটমেন্টগুলি ব্যবহার করা কেবল একটি গোটো ব্যবহারের চেয়ে অনেক কম পঠনযোগ্য!

11

অবশ্যই এটি প্রোগ্রামিং ভাষার উপর নির্ভর করে। gotoবিতর্কিত হওয়ার মূল কারণ হ'ল সংকলক যখন আপনাকে এটি খুব উদারভাবে ব্যবহার করতে দেয় তখন এর খারাপ প্রভাবগুলি দেখা দেয়। সমস্যা দেখা দিতে পারে, উদাহরণস্বরূপ, যদি এটি আপনাকে gotoএমনভাবে ব্যবহার করতে দেয় যে আপনি এখন অন্য কোনও পদ্ধতিতে ঝাঁপিয়ে পড়তে এবং কল স্ট্যাকের সাথে জগাখিচু করতে পারেন an সংবেদনশীল নিয়ন্ত্রণ প্রবাহকে অস্বীকার করা সংকলকটির দায়িত্ব হওয়া উচিত।

জাভা gotoপুরোপুরি অনুমতি না দিয়ে এই সমস্যাটিকে "সমাধান" করার চেষ্টা করেছে । যাইহোক, জাভা আপনাকে returnএকটি finallyব্লকের ভিতরে ব্যবহার করতে দেয় এবং ফলস্বরূপ অজানাভাবে গিলে ফেলতে পারে। একই সমস্যাটি এখনও রয়েছে: সংকলকটি তার কাজ করছে না। gotoভাষা থেকে সরানো এটি স্থির করে নি।

C #, gotoনিরাপদ হিসাবে হিসাবে break, continue, try/catch/finallyএবং return। এটি আপনাকে অবিচ্ছিন্ন ভেরিয়েবলগুলি ব্যবহার করতে দেয় না, এটি আপনাকে শেষ অবধি কোনও লাফিয়ে উঠতে দেয় না etc. ইত্যাদি সংকলক অভিযোগ করবে। এর কারণ এটি আসল সমস্যাটি সমাধান করে , যা আমি যেমন অযৌক্তিক নিয়ন্ত্রণ প্রবাহকে বলেছিলাম। gotoনির্দিষ্ট-অ্যাসাইনমেন্ট বিশ্লেষণ এবং অন্যান্য যুক্তিসঙ্গত সংকলক চেকগুলি যাদুকরীভাবে বাতিল করে না।


আপনার বক্তব্যটি সি # এর gotoমন্দ নয়? যদি তা হয় তবে কেবল নিয়মিত goto
রচনার

9

হ্যাঁ। আপনার লুপ গভীর বেশ কয়েকটি স্তরে নেস্টেড হয়, তখন gotoহয় শুধুমাত্র এইরূপ সূচারূভাবে ইনার লুপ খুঁজে ভঙ্গ প্রণালী। অন্য বিকল্পটি হ'ল একটি পতাকা সেট করা এবং যদি প্রতিটি পতাকাটি শর্তটিকে সন্তুষ্ট করে তবে প্রতিটি লুপটি ভেঙে যায়। এটি সত্যই কুরুচিপূর্ণ এবং ত্রুটিযুক্ত প্রবণ। এই ক্ষেত্রে, gotoকেবল ভাল।

অবশ্যই জাভার লেবেলযুক্ত breakবক্তব্যটি একই কাজ করে তবে কোডের একটি স্বেচ্ছাসেবী বিন্দুতে আপনাকে ঝাঁপিয়ে না ফেলে, যা gotoমন্দ কাজ করে তা ছাড়াই সমস্যার ঝরঝরে সমাধান করে।


ডাউনওয়েট কে বোঝানোর জন্য কারও যত্ন? এটি প্রশ্নের পুরোপুরি বৈধ উত্তর ছিল ...
চিন্ময় কাঞ্চি

4
Goo কখনও একটি মার্জিত উত্তর হয় না। যখন আপনার লুপগুলি বেশ কয়েকটি স্তর গভীরভাবে বাসা বাঁধে, তখন আপনার সমস্যাটি হ'ল আপনি বহুবিধ লুপগুলি এড়ানোর জন্য আপনার কোডটি স্থপতি করতে ব্যর্থ হন। প্রক্রিয়া কলগুলি শত্রু নয়। ("ল্যাম্বদা: দ্য আলটিমেট ..." কাগজপত্রগুলি পড়ুন several) বিভিন্ন স্তরের নীড় থেকে ভাঙতে গোটো ব্যবহার করা একটি খোলা একাধিক ফ্র্যাকচারের উপর একটি ব্যান্ড-এইড রাখছে: এটি সহজ হতে পারে তবে এটি সঠিক নয় উত্তর.
জন আর। স্ট্রোহ্ম

6
এবং অবশ্যই, অদ্ভুত ঘটনা কখনই ঘটে না যখন গভীরভাবে নেস্ট করা লুপগুলি ডাকা হয়? একটি ভাল প্রোগ্রামার হওয়া কেবল নিয়মগুলি অনুসরণ করা নয়, কখন সেগুলি ভেঙে দেওয়া উচিত তা সম্পর্কেও।
চিন্ময় কাঞ্চি

2
@ জনআর.স্ট্রোহম কখনও বলবেন না। আপনি যদি প্রোগ্রামিংয়ে "কখনই নয়" এর মতো শব্দ ব্যবহার করেন তবে আপনি স্পষ্টত কোণার কেস, অপ্টিমাইজেশন, রিসোর্স কন্ট্রেন্টস ইত্যাদির সাথে মোকাবিলা করেন নি গভীরভাবে নেস্ট করা লুপগুলিতে, লোটগুলি লুপগুলি থেকে বেরিয়ে আসার সবচেয়ে পরিষ্কার এবং মার্জিত উপায়। আপনি আপনার কোডটিকে কতটা রিফ্যাক্ট করেছেন তা বিবেচ্য নয়।
সুজয় ফাদকে

@ জনআর.স্ট্রোহম: ভিবি.এনইটি থেকে সি # তে স্যুইচ করার ক্ষেত্রে দ্বিতীয়টি সবচেয়ে মিস হওয়া বৈশিষ্ট্য: Doলুপ। কেন? কারণ আমি যে লুপটির গভীর বিরতি প্রয়োজন তার একটি লুপটি পরিবর্তন করতে পারি Doএবং টাইপ করতে পারি Exit Doএবং নেই GoTo। নেস্টেড লুপগুলি সর্বদা ঘটে happen স্ট্যাকগুলি ভেঙে কিছু সময় ঘটে যায়।
যোশুয়া

7

সবচেয়ে বেশি হতাশা হ'ল এক ধরণের "ধর্ম" তৈরি হয়েছে যা Godশ্বর জিক্সন্ত্রকে উদ্দীপ্ত করেছিল যা এর দশকের দশকের গোড়ার দিকে এর নির্বিচার ক্ষমতা সম্পর্কে বাধ্য করেছিল:

  • কোড যাই হোক না কেন ব্লকের যে কোনও জায়গায় ঝাঁপ দাও
    • শুরু থেকে ফাংশন কার্যকর করা হয় না
    • লুপগুলি প্রথম থেকেই কার্যকর করা হয়নি
    • পরিবর্তনশীল সূচনা এড়ানো হয়নি
  • কোনও সম্ভাব্য ক্লিনআপ ছাড়াই কোডের যে কোনও ব্লক থেকে দূরে ঝাঁপুন।

gotoআধুনিক ভাষাগুলির বক্তব্যের সাথে এর আর কোনও যোগসূত্র নেই, যার অস্তিত্ব কেবলমাত্র ভাষা সরবরাহিত ভাষা ব্যতীত কোড কাঠামো তৈরির পক্ষে সমর্থন করার কারণে is

বিশেষত উপরের প্রথম প্রধান পয়েন্টটি আবার অনুমতি দেওয়া হয় এবং দ্বিতীয়টি পরিষ্কার করা হয় (যদি আপনি gotoকোনও ব্লকের বাইরে স্ট্যাকটি সঠিকভাবে খালি না করে থাকেন এবং সমস্ত যথাযথ ধ্বংসকারীদের ডাকা হয়)

গোটো ব্যবহার না করে এমনকি কোডটি কী অপঠনযোগ্য হতে পারে তার একটি ধারণা পেতে আপনি এই উত্তরটি উল্লেখ করতে পারেন। সমস্যাটি নিজেই নয়, এটির খারাপ ব্যবহার।

আমি শুধু না ব্যবহার করে একটি সম্পূর্ণ প্রোগ্রাম লিখতে ifপারি for। অবশ্যই, এটি ভাল পঠনযোগ্য হবে না, একটি চেহারা আনাড়ি এবং অহেতুক জটিল।

তবে সমস্যাটি হয় না for। এটা আমি.

ভীষণ পছন্দ break, continue, throw, bool needed=true; while(needed) {...}, ইত্যাদি চেয়ে বেশি লক্ষ করা হয় ছদ্মবেশ goto Djikstrarian জেলটরা এর scimitars থেকে দূরে পালিয়ে যেতে, যে -50 বছর আধুনিক laguages- উদ্ভাবন পর এখনও তাদের বন্দীদের চাই। তারা জিক্সট্রা কী কথা বলছিলেন তা ভুলে গিয়েছিলেন, তারা কেবল তাঁর নোটের শিরোনামই মনে রাখে (এটি GOTO ক্ষতিকারক হিসাবে বিবেচিত হয়েছিল, এবং এটি তার উপাধিও ছিল না: এটি সম্পাদক দ্বারা পরিবর্তিত হয়েছিল) এবং দোষ ও বাশ, বাশ এবং দোষী প্রতিবেদনে এই চারটি চুক্তি রয়েছে ধারাবাহিকভাবে চিঠি স্থাপন করা হয়।

এটি ২০১১: জিক্স্দ্র যে বাধ্যতামূলক ছিল gotoতার GOTOবিবৃতিটি মোকাবেলা করার বিষয়টি এখন বুঝতে হবে ।


1
"বিরতি, চালিয়ে যাওয়া, নিক্ষেপ করা, বুল দরকার = সত্য; যখন (প্রয়োজন) {...}, ইত্যাদি মাস্ক্রেড গেটোয়ের চেয়ে বেশি লক্ষ করছে" আমি এর সাথে একমত নই। আমি "বিরতি ইত্যাদির মতো জিনিসগুলি নিষিদ্ধ গোটো", বা এর মতো কিছু পছন্দ করব। গোটোর মূল সমস্যাটি হ'ল এটি সাধারণত খুব শক্তিশালী। বর্তমান গিটো ডিজকস্ট্রার চেয়ে কম শক্তিশালী, আপনার উত্তরটি আমার কাছে ঠিক আছে।
মুহাম্মদ আলকারৌরি

2
@ মুহাম্মাদ আলকারৌরি: আমি সম্পূর্ণ একমত আমার ধারণাটি হুবহু প্রকাশ করার জন্য আপনি একটি আরও ভাল শব্দ খুঁজে পেয়েছেন। আমার বক্তব্যটি হ'ল এই সীমাবদ্ধতাগুলি কখনও কখনও প্রযোজ্য হতে পারে না এবং আপনার যে ধরণের বিধিনিষেধের প্রয়োজন তা ভাষাতে নেই। তারপরে আরও একটি "শক্তিশালী" জিনিস, কম বিশেষায়িত, এটি আপনাকে কার্যক্ষম করতে সক্ষম করে। উদাহরণ হিসেবে বলা যায়, জাভা break nনা সি প্রাপ্তিসাধ্য ++ হয় অত: পর goto escape, এমনকি যদি escapeশুধু এন-ple লুপ থেকে বের হতে প্রয়োজন হয় না।
এমিলিও গারাভাগলিয়া

4

এখানে বা সেখানে বিজোড় গোটো, এতক্ষণ এটি কোনও ফাংশনের স্থানীয় হিসাবে, খুব কমই পাঠযোগ্যতার ক্ষতি করে। এটি প্রায়শই এই কোডটিতে অস্বাভাবিক কিছু ঘটছে যা কিছুটা অস্বাভাবিক নিয়ন্ত্রণ কাঠামো ব্যবহারের প্রয়োজন বলে দৃষ্টি আকর্ষণ করে এটি উপকার করে।

যদি (স্থানীয়) গোটোগুলি পঠনযোগ্যতার উল্লেখযোগ্যভাবে ক্ষতি করে, তবে এটি সাধারণত একটি লক্ষণ যে গোটো সমেত ফাংশনটি খুব জটিল হয়ে উঠেছে।

সর্বশেষ গোটো আমি সি কোডের টুকরোতে রেখেছিলাম এক জোড়া ইন্টারলকিং লুপ তৈরি করা। এটি "গ্রহণযোগ্য" গোটো ব্যবহারের সাধারণ সংজ্ঞায় ফিট করে না, তবে ফাংশনটি উল্লেখযোগ্যভাবে ছোট এবং ফলস্বরূপ পরিস্কার হয়েছে। গোটো এড়ানোর জন্য ডিআরওয়াইয়ের একটি বিশেষ অগোছালো লঙ্ঘন দরকার হত।


1
এর উত্তর সর্বাধিক মমতার সাথে পুরানো "লে'র আলু চিপস" স্লোগানে বলা হয়েছে: "বাজি আপনি কেবল একটি খেতে পারবেন না"। আপনার উদাহরণে, আপনার দুটি "ইন্টারলকিং" রয়েছে (যার অর্থ যাই হোক না কেন, এবং আমি বাজি ধরছি এটি খুব সুন্দর নয়) লুপস রয়েছে, এবং গোটো আপনাকে সস্তা ব্যয় করেছে। আপনার বাসের ধাক্কায় এই কোডটি সংশোধন করতে হবে এমন রক্ষণাবেক্ষণ লোকটির কী হবে? গোটো কি তার জীবনকে আরও সহজ বা কঠিন করে তুলবে? এই দুটি লুপগুলির কি পুনর্বিবেচনা প্রয়োজন?
জন আর। স্ট্রোহ্ম

3

আমি মনে করি এই পুরো সমস্যাটি ভুল গাছটিকে ছাঁটাই করার ঘটনা হয়েছে।

এর মতো গোটো আমার কাছে সমস্যা মনে হয় না, তবে এটি প্রায়শই একটি প্রকৃত পাপের লক্ষণ: স্প্যাগেটি কোড।

যদি GOTO প্রবাহ নিয়ন্ত্রণ লাইনের বড় ক্রসিংয়ের কারণ হয় তবে এটি খারাপ, সময়কাল। যদি এটি কোনও প্রবাহ নিয়ন্ত্রণের লাইনগুলি অতিক্রম করে তবে তা নিরীহ। লুপ বেলআউটগুলির মতো জিনিসগুলির মধ্যে ধূসর জোনটিতে, এখনও কিছু ভাষা রয়েছে যা কন্সট্রাক্টগুলি যোগ করেনি যা সমস্ত আইনী ধূসর কেসগুলিকে আবৃত করে।

আমি নিজেকে বহু বছরের মধ্যে এটি ব্যবহার করার ক্ষেত্রে কেবলমাত্র কেসটি হ'ল লুপের ক্ষেত্রে যেখানে সিদ্ধান্তের অবস্থানটি লুপের মাঝখানে থাকে। আপনি নকল কোড, একটি পতাকা বা একটি GOTO হয় বাকি আছে। আমি গোটো সমাধানটি তিনটির মধ্যে সেরা খুঁজে পেয়েছি। এখানে প্রবাহ নিয়ন্ত্রণ রেখার কোনও ক্রসিং নেই, এটি নিরীহ।


আপনি যে কেসটিকে ইঙ্গিত করেছেন সেটি কখনও কখনও "লুপ এবং অর্ধ" বা "এন প্লাস অর্ধ লুপ" হিসাবে ডাব হয় এবং এটি gotoলুপের মধ্যে লাফানোর জন্য একটি বিখ্যাত ব্যবহার-ক্ষেত্রে (যদি ভাষা এটি অনুমতি দেয়; অন্য ক্ষেত্রে যেহেতু, জাম্পিং) মাঝখানে লুপের বাইরে, সাধারণত ছাড়া তুচ্ছ হয় goto)।
কনরাড রুডল্ফ

(হায়, বেশিরভাগ ভাষাগুলি লুপে ঝাঁপ দেওয়া নিষেধ করে))
কনরাড রুডল্ফ

@ কনরাডরুডল্ফ: আপনি যদি গোটোর সাথে "লুপ" প্রয়োগ করেন তবে লুপের বাইরে ঝাঁপ দেওয়ার মতো আর কোনও কাঠামো নেই।
লরেন পেচটেল

1
আমি মনে করি gotoচিৎকার যেমন দ্য নিয়ন্ত্রণ প্রবাহ এখানে না মাপসই স্বাভাবিক স্ট্রাকচার্ড প্রোগ্রামিং নিদর্শন । যেহেতু কাঠামোগত প্রোগ্রামিং প্যাটার্নগুলিতে ফিট করে এমন নিয়ন্ত্রণ প্রবাহগুলি যেগুলি নয় তার চেয়ে তর্ক করা সহজ, কারণ যখন কেউ সম্ভব হয় তখন এই ধরণের ব্যবহার করার চেষ্টা করা উচিত; কোড যদি এই ধরণের নিখুঁতভাবে ফিট করে তবে কারও পক্ষে চিৎকার করা উচিত নয় যে এটি এটি নয়। অন্যদিকে, এমন ক্ষেত্রে যেখানে কোডটি সত্যই এই জাতীয় নিদর্শনগুলির সাথে খাপ খায় না, সে সম্পর্কে চিৎকার করা কোডটি ভান করে দেওয়ার চেয়ে ভাল হতে পারে যখন কোডটি সত্যই এটি ফিট করে না।
সুপারক্যাট

1

হ্যাঁ, গেটোটি বিকাশকারীর অভিজ্ঞতা উপকারের জন্য ব্যবহার করা যেতে পারে: http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/

তবে, যে কোনও শক্তিশালী সরঞ্জাম (পয়েন্টার, একাধিক উত্তরাধিকার ইত্যাদি) এর মতোই এটি ব্যবহার করে শৃঙ্খলাবদ্ধ হতে হবে। লিঙ্কটিতে প্রদত্ত উদাহরণটি পিএইচপি ব্যবহার করে, যা গোটো কনস্ট্রাক্টের একই ফাংশন / পদ্ধতিতে ব্যবহারকে সীমাবদ্ধ করে এবং একটি নতুন নিয়ন্ত্রণ ব্লকে (যেমন, লুপ, সুইচ স্টেটমেন্ট ইত্যাদি) প্রবেশের ক্ষমতাটি অক্ষম করে)


1

ভাষার উপর নির্ভর করে। এটি কোবল প্রোগ্রামিংয়ে এখনও ব্যাপকভাবে ব্যবহৃত হয়, উদাহরণস্বরূপ। আমি একটি ব্যারিওনেট 50 ডিভাইসেও কাজ করেছি, যার ফার্মওয়্যার প্রোগ্রামিং ভাষাটি প্রাথমিক প্রাথমিক বেসিক যা অবশ্যই আপনাকে গোটো ব্যবহার করতে হবে।


0

আমি বলব না। আপনি যদি গোটো ব্যবহারের প্রয়োজনীয়তা খুঁজে পান তবে আমি বাজি ধরব কোডটি নতুন করে ডিজাইনের করার দরকার আছে।


3
হতে পারে, তবে আপনি কোনও যুক্তি সরবরাহ করেন নি
কেসব্যাশ

কয়েক দশক আগে ডিজকસ્ત્રা যুক্তি দিয়েছিলেন, বিশদভাবে।
জন আর। স্ট্রোহ্ম

2
জাস্ট ডগমা। কোন রেজোনস নেই। দ্রষ্টব্য: জিক্সট্রা অন্য কোনও ভলিউড রিসন নয়: এটি '60০ এর দশকের গোড়ার দিকে বেসিক বা ফরট্রান গোটোর বিবৃতি উল্লেখ করছিল। আজকের সত্যিকারের রক্তাল্পতার সাথে (তাদের শক্তির তুলনায়) তাদের কিছুই করার নেই।
এমিলিও গারাভাগলিয়া

0

gotoসিটিতে লিগ্যাসি এসেম্বলার কোডটি পোর্টিং করার সময় কার্যকর হতে পারে প্রথম উদাহরণে, gotoএসেম্বলারের branchনির্দেশের প্রতিস্থাপন হিসাবে ব্যবহার করে সি-তে একটি নির্দেশ-নির্দেশে রূপান্তর খুব দ্রুত পোর্টিং সক্ষম করতে পারে।


-1

আমি না কোন তর্ক করবে। গোটো যে সমস্যাটি সমাধান করতে ব্যবহৃত হচ্ছে তার সমাধানের জন্য আরও নির্দিষ্ট একটি সরঞ্জাম দিয়ে তাদের সর্বদা প্রতিস্থাপন করা উচিত (যদি না এটি আপনার ভাষায় উপলব্ধ না হয়)। উদাহরণস্বরূপ, ব্রেক স্টেটমেন্ট এবং ব্যতিক্রমগুলি লুপের অব্যাহতি এবং ত্রুটি হ্যান্ডলিংয়ের পূর্ববর্তী সমাধানযোগ্য সমস্যার সমাধান করে।


আমি যুক্তি দিয়ে বলছি যে যখন ভাষাগুলিতে এই দুটি বৈশিষ্ট্য gotoথাকে তবে সাধারণত সেই ভাষাগুলি থেকে অনুপস্থিত।
চিন্ময় কাঞ্চি

তবে এগুলি কি তাদের প্রয়োজন নেই, বা লোকেরা মনে করে যে তাদের প্রয়োজন নেই?
মাইকেল কে

আপনার মতামত ধর্মান্ধ অনেকগুলি সমস্যা দেখা যায় যখন gotoখুব সমস্যা ডোমেন শব্দার্থের নিকটতম জিনিস হয়, অন্য কোনও কিছু একটি নোংরা হ্যাক হবে।
এসকে-যুক্তি

@ এসকে-যুক্তি: আমি মনে করি না "ধর্মান্ধ" শব্দের অর্থ যা আপনি বোঝাচ্ছেন তার অর্থ।
কিথ থম্পসন

1
@ কিথ, "অসহিষ্ণুভাবে তার নিজের মতামত এবং কুসংস্কারের প্রতি অনুগত" - এটি আমি নিয়মিত এখানে পর্যবেক্ষণ করছি, এই গোটো-ব্যাশিং চোখের পাতাগুলি দিয়ে। " সর্বদা প্রতিস্থাপন করা উচিত" হ'ল কমপক্ষে atic কোনও যথাযথ, দৃ opinion় মতামতের কাছে কিছুই নয়, তবে কেবল একটি খাঁটি গোঁড়ামি। এই "সর্বদা" কোনও বিকল্প মতামতের জন্য কোনও স্থান ছাড়বে না, দেখুন?
এসকে-যুক্তি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.