আমি জাভাস্ক্রিপ্টে গোটো কীভাবে ব্যবহার করতে পারি?


127

আমার কিছু কোড রয়েছে যা ব্যবহার করে আমার অবশ্যই বাস্তবায়ন করতে হবে goto। উদাহরণস্বরূপ, আমি এই জাতীয় একটি প্রোগ্রাম লিখতে চাই:

start:
alert("RINSE");
alert("LATHER");
repeat: goto start

জাভাস্ক্রিপ্টে এটি করার কোনও উপায় আছে?


সংকলিত জাভাস্ক্রিপ্টের জন্য গিয়োটি দৃin়প্রত্যয়ী হবে। আমি জাভাস্ক্রিপ্টে একটি জেভিএম লিখেছি। এটি গোটো স্টেটমেন্ট সহ অনেক পারফরম্যান্সার এবং খাটো হবে।
নিওক্স্পার্ট

উত্তর:


151

কাফনের কাপড়! সামার অফ গোটো নামে একটি প্রকল্প রয়েছে যা আপনাকে জাভাস্ক্রিপ্টকে তার সম্পূর্ণ সম্ভাবনায় ব্যবহার করতে দেয় এবং আপনি আপনার কোডটি কীভাবে লিখতে পারবেন তাতে বিপ্লব ঘটাবে।

এই জাভাস্ক্রিপ্ট প্রিপ্রোসেসিং সরঞ্জামটি আপনাকে একটি লেবেল তৈরি করতে এবং তারপরে এই সিনট্যাক্সটি ব্যবহার করে তা করার অনুমতি দেয়:

[lbl] <label-name>
goto <label-name>

উদাহরণস্বরূপ, প্রশ্নের উদাহরণটি নিম্নরূপ লেখা যেতে পারে:

[lbl] start:
alert("LATHER");
alert("RINSE");
[lbl] repeat: goto start;

মনে রাখবেন যে আপনি কেবল একটি অন্তহীন LATHER RINSEপুনরাবৃত্ত চক্রের মতো সাধারণ তুচ্ছ প্রোগ্রামের মধ্যেই সীমাবদ্ধ নন - সম্ভাব্য সুযোগগুলি gotoঅন্তহীন এবং আপনি Hello, world!জাভাস্ক্রিপ্ট কনসোলে 538 বার এই বার্তা দিতে পারেন:

var i = 0;
[lbl] start:
console.log("Hello, world!");
i++;
if(i < 538) goto start;

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

var i = 0;
start: while(true) {
  console.log("Hello, world!");
  i++;
  if(i < 538) continue start;
  break;
}

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

উপরের সমস্ত লিঙ্ক যা Goo.js লাইব্রেরিতে পৌঁছেছে সমস্ত মৃত, এখানে লিঙ্কগুলি প্রয়োজন:

geto.js (সঙ্কুচিত) --- পার্সস্ক্রিপ্ট.জেএস (সংকোচিত)

গোটো.জেএস থেকে :

পিএস যে যে কেউ ভাবছেন (এখনও অবধি মোট শূন্য লোক), সামার অফ গোটো এমন একটি শব্দ যা পল আইরিশ জনপ্রিয় করেছিল, এই স্ক্রিপ্ট এবং পিএইচপি-র ভাষায় গোটো যুক্ত করার বিষয়ে আলোচনা করার সময়।

এবং যারা তাত্ক্ষণিকভাবে বুঝতে পারেন না যে এই পুরো জিনিসটি একটি রসিকতা, দয়া করে আমাকে ক্ষমা করুন। <- (বীমা)।


10
@ সুরিলড্রিমগুলি এটি একটি রসিকতা হতে পারে তবে এটি কার্যকরভাবে কাজ করে। আপনি jsFizz লিঙ্কগুলি ক্লিক করতে পারেন এবং দেখুন যে তারা আসলে কাজ করে।
পিটার ওলসন

22
আপনি যে নিবন্ধটি লিঙ্ক করেছেন তা আসলে এটি একটি রসিকতা বলেছে :)
pimvdb

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

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

8
@ অ্যালেক্সমিলের জন্য +1। সত্যিই, আমি মনে করি gotoসম্ভবত স্বল্প-ব্যবহৃত হয়েছে। এটি কিছু খুব সুন্দর ত্রুটি পরিচালনার নিদর্শনগুলির জন্য তৈরি করে। মুরগি, আমরা ব্যবহার করি switch, যা gotoনাম ব্যতীত সমস্ত কিছুই , এবং কেউ পেট-ব্যথা করে না।
0x1mason

122

নং তারা ইসকামাস্ক্রিপ্টে এটি অন্তর্ভুক্ত করেনি:

ইসমাস্ক্রিপ্টের কোনও বিবৃতি নেই।


1
আমি ভাবছিলাম জাভাস্ক্রিপ্ট ডিবাগ করার সময় GOTO কার্যকর হবে কিনা। আফাক, কেবল আইআই তার ডিবাগারে জিওটিও সরবরাহ করে ... এবং আমি এটির জন্য আসলে একটি ব্যবহারের সন্ধান পেয়েছি, তবে আমি নিশ্চিত নই যে এটি সাধারণত কার্যকর হতে পারে ... জাভাস্ক্রিপ্ট ডিবাগ করার সময় চারপাশে ঝাঁপিয়ে পড়তে। আপনি কি মনে করেন?
Vidime বিদাস

3
@ Šime বিদাস: গোটো কার্যকারিতা দিয়ে ডিবাগ করা দরকারী কিনা তা আমি নিশ্চিত নই। মূলত আপনি কোড পথের সাথে এমনভাবে গোলমাল করছেন যে কোনওভাবেই ডিবাগিং না করে কখনও ঘটবে না।
pimvdb

12
কি goto
আফসোস

4
gotoতবে ভবিষ্যতে ব্যবহারের জন্য একটি সংরক্ষিত কীওয়ার্ড। আমরা কেবল আশা করতে পারি :)
আজ্মিসভ

4
gotoআপনি কোনও নেস্টেড ফাংশন থেকে ফিরে আসতে চাইলে দরকারী হবে। উদাহরণস্বরূপ, আন্ডারস্কোর.জেএস ব্যবহার করার সময় অ্যারেগুলিতে পুনরাবৃত্তি করার সময় আপনি একটি বেনামি ফাংশন সরবরাহ করেন। আপনি যেমন একটি ফাংশন ভিতরে থেকে ফিরে আসতে পারবেন না, তাই goto end;দরকারী হবে।
হুব্রো

31

আসলে, আমি দেখতে পাচ্ছি যে ECMAScript (জাভাস্ক্রিপ্ট) এর একটি বিবৃতি রয়েছে। তবে জাভাস্ক্রিপ্টের গোটোতে দুটি স্বাদ আছে!

গোটোতে দুটি জাভাস্ক্রিপ্ট স্বাদকে লেবেলযুক্ত চালিয়ে যাওয়া এবং লেবেল বিরতি বলা হয়। জাভাস্ক্রিপ্টে "গোটো" কোনও কীওয়ার্ড নেই। গেটো জাভাস্ক্রিপ্টে ব্রেক এবং অবিরত কীওয়ার্ড ব্যবহার করে সম্পন্ন হয়েছে।

এবং এটি কম-বেশি স্পষ্টভাবে এখানে ডাব্লু 3 স্কুল ওয়েবসাইট http://www.w3schools.com/js/js_switch.asp এ স্পষ্টভাবে বলা হয়েছে ।

আমি লেবেল অবিরত এবং লেবেল বিরতির কিছুটা বিশ্রীভাবে প্রকাশিত ডকুমেন্টেশনটি পেয়েছি।

লেবেলযুক্ত চালিয়ে যাওয়া এবং লেবেল বিরতির মধ্যে পার্থক্য হ'ল এগুলি ব্যবহার করা যেতে পারে। লেবেলযুক্ত চালিয়ে যাওয়া কেবলমাত্র কিছুক্ষণের লুপের মধ্যে ব্যবহার করা যেতে পারে। আরও কিছু তথ্যের জন্য ডাব্লু 3 স্কুলগুলি দেখুন।

===========

আরেকটি পদ্ধতি যা কাজ করবে তা হ'ল ভিতরে জায়ান্ট সুইচ স্টেটমেন্ট সহ বিবৃতি দেওয়ার সময় একটি দৈত্য থাকা:

while (true)
{
    switch (goto_variable)
    {
        case 1:
            // some code
            goto_variable = 2
            break;
        case 2:
            goto_variable = 5   // case in etc. below
            break;
        case 3:
            goto_variable = 1
            break;

         etc. ...
    }

}

9
"লেবেল করা চালিয়ে যাওয়া কিছুক্ষণের মধ্যেই ব্যবহার করা যেতে পারে" " - না, লেবেলযুক্ত breakএবং লুপগুলিতেও continueব্যবহৃত হতে পারে for। তবে তারা সত্যই যে এটি সম্পর্কিত লুপ (গুলি) এর কাঠামোতে লক হয়ে গেছে তার সমতুল্য নয়goto , তুলনামূলকভাবে যে তুলনায় goto- এটি যে ভাষাগুলিতে রয়েছে - যে কোনও জায়গায় যেতে পারেন।
nnnnnn

31

ক্লাসিক জাভাস্ক্রিপ্টে এই ধরণের কোড অর্জনের জন্য আপনাকে ডু-ওয়েল লুপগুলি ব্যবহার করতে হবে। আমি ধারণা করছি আপনি সম্ভবত অন্য কোনও জিনিসের জন্য কোড তৈরি করছেন।

এটি করার উপায়, যেমন জাভাস্ক্রিপ্টে বাইটকোড ব্যাকেন্ডিংয়ের জন্য হ'ল "লেবেলযুক্ত" -র সময় প্রতিটি লেবেল লক্ষ্যকে মোড়ানো।

LABEL1: do {
  x = x + 2;
  ...
  // JUMP TO THE END OF THE DO-WHILE - A FORWARDS GOTO
  if (x < 100) break LABEL1;
  // JUMP TO THE START OF THE DO WHILE - A BACKWARDS GOTO...
  if (x < 100) continue LABEL1;
} while(0);

আপনি এর মতো ব্যবহার করেন এমন প্রতিটি লেবেল করা ডু-ওয়েল লুপ আসলে একটি লেবেলের জন্য দুটি লেবেল পয়েন্ট তৈরি করে। শীর্ষে একটি এবং লুপের শেষে একটি। পিছনে ঝাঁপ দেওয়া অবিরত ব্যবহার করে এবং সামনের দিকে ঝাঁপুনি বিরতি ব্যবহার করে।

// NORMAL CODE

MYLOOP:
  DoStuff();
  x = x + 1;
  if (x > 100) goto DONE_LOOP;
  GOTO MYLOOP;


// JAVASCRIPT STYLE
MYLOOP: do {
  DoStuff();
  x = x + 1;
  if (x > 100) break MYLOOP;
  continue MYLOOP;// Not necessary since you can just put do {} while (1) but it     illustrates
} while (0)

দুর্ভাগ্যক্রমে এটি করার কোনও উপায় নেই।

সাধারণ উদাহরণ কোড:

while (x < 10 && Ok) {
  z = 0;
  while (z < 10) {
    if (!DoStuff()) {
      Ok = FALSE;
      break;
    }
    z++;
  }
  x++;
} 

সুতরাং বলুন কোডটি বাইটকোডগুলিতে এনকোড হয়ে গেছে তাই এখন কোনও উদ্দেশ্যে আপনার ব্যাকএন্ড অনুকরণ করতে আপনাকে জাভাস্ক্রিপ্টে বাইটকোডগুলি লাগাতে হবে।

জাভাস্ক্রিপ্ট শৈলী:

LOOP1: do {
  if (x >= 10) break LOOP1;
  if (!Ok) break LOOP1;
  z = 0;
  LOOP2: do {
    if (z >= 10) break LOOP2;
    if (!DoStuff()) {
      Ok = FALSE;
      break LOOP2;
    }
    z++;
  } while (1);// Note While (1) I can just skip saying continue LOOP2!
  x++;
  continue LOOP1;// Again can skip this line and just say do {} while (1)
} while(0)

সুতরাং এই কৌশলটি ব্যবহার সহজ কাজ জন্য কাজ সূক্ষ্ম কাজ করে। এটি ছাড়া আর কিছু না আপনি করতে পারেন।

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

বিঃদ্রঃ! এটি সব নিষ্পাপ ব্যাখ্যা। বাইটকোডগুলির সঠিক জেএস ব্যাকএন্ডের জন্য কোড আউটপুট দেওয়ার আগে লুপগুলি পরীক্ষা করার বিষয়টিও বিবেচনা করুন। অনেকগুলি সরল অবস্থায় লুপগুলি সনাক্ত করা যায় এবং তারপরে আপনি গোটোর পরিবর্তে লুপগুলি ব্যবহার করতে পারেন।


1
continueএকটি do ... whileলুপ চেক শর্ত অবিরত । এখানে পিছনের দিকে এভাবে gotoব্যবহার do ... while (0)করে কাজ হয় না। ecma-international.org/ecma-262/5.1/#sec-12.6.1
ZachB

1
কাজ করে না। আমি let doLoopএটি কাজ করতে হবে। আর প্রধান লুপ: let doLoop = false; do { if(condition){ doLoop = true; continue; } } while (doLoop) github.com/patarapolw/HanziLevelUp/blob/...
Polv

15

এটি একটি পুরানো প্রশ্ন, তবে যেহেতু জাভাস্ক্রিপ্ট একটি চলমান লক্ষ্য - এটি বাস্তবায়নের ক্ষেত্রে ES6 এ সম্ভব যা সঠিক লেজ কলকে সমর্থন করে। যথাযথ লেজ কলগুলির সহায়তায় বাস্তবায়নের সময়, আপনার অবিরাম সংখ্যক সক্রিয় লেজ কল থাকতে পারে (যেমন টেল কলগুলি "স্ট্যাকটি বৃদ্ধি করে না")।

একজন gotoকোন প্যারামিটার সঙ্গে একটি পুচ্ছ কল হিসেবে ভাবা যেতে পারে।

উদাহরণ:

start: alert("RINSE");
       alert("LATHER");
       goto start

হিসাবে লেখা যেতে পারে

 function start() { alert("RINSE");
                    alert("LATHER");
                    return start() }

এখানে কলটি startলেজ অবস্থানে রয়েছে, তাই কোনও স্ট্যাকের ওভারফ্লো হবে না।

এখানে আরও জটিল উদাহরণ:

 label1:   A
           B
           if C goto label3
           D
 label3:   E
           goto label1

প্রথমত, আমরা উত্সকে ব্লকে বিভক্ত করি। প্রতিটি লেবেল একটি নতুন ব্লকের সূচনা নির্দেশ করে।

 Block1
     label1:   A
               B
               if C goto label3
               D

  Block2    
     label3:   E
               goto label1

গোটস ব্যবহার করে আমাদের ব্লকগুলি একসাথে আবদ্ধ করতে হবে। উদাহরণস্বরূপ ব্লক E ডি অনুসরণ করে, তাই আমরা একটি goto label3ডি পরে যুক্ত করব

 Block1
     label1:   A
               B
               if C goto label2
               D
               goto label2

  Block2    
     label2:   E
               goto label1

এখন প্রতিটি ব্লক একটি ফাংশন হয়ে যায় এবং প্রতিটি গিট একটি টেইল কল হয়ে যায়।

 function label1() {
               A
               B
               if C then return( label2() )
               D
               return( label2() )
 }

 function label2() {
               E
               return( label1() )
 }

প্রোগ্রামটি শুরু করতে, ব্যবহার করুন label1()

পুনর্লিখনটি সম্পূর্ণরূপে যান্ত্রিক এবং প্রয়োজনে মিষ্টি.js এর মতো ম্যাক্রো সিস্টেমের সাহায্যে এটি করা যেতে পারে।


"বাস্তবায়নের ক্ষেত্রে এটি ES6 এ সম্ভব যা সঠিক লেজ কল সমর্থন করে"। আফাইক টেল কলগুলি সমস্ত বড় ব্রাউজারে অক্ষম করা হয়।
জেডি

আমি বিশ্বাস করি সাফারি যথাযথ টেল কল সমর্থন করে। উত্তরটি দেওয়ার সময়, কমান্ড লাইন সুইচের মাধ্যমে ক্রোমে যথাযথ টেল কল সক্ষম করা সম্ভব হয়েছিল। আসুন আশা করি তারা পুনর্বিবেচনা করেন - বা কমপক্ষে স্পষ্টত চিহ্নিত টেল কলগুলি সমর্থন করা শুরু করে।
soegaard

স্পষ্টভাবে চিহ্নিত টেল কলগুলি সম্ভবত সবাইকে খুশি করবে।
জেডি

14
const
    start = 0,
    more = 1,
    pass = 2,
    loop = 3,
    skip = 4,
    done = 5;

var label = start;


while (true){
    var goTo = null;
    switch (label){
        case start:
            console.log('start');
        case more:
            console.log('more');
        case pass:
            console.log('pass');
        case loop:
            console.log('loop');
            goTo = pass; break;
        case skip:
            console.log('skip');
        case done:
            console.log('done');

    }
    if (goTo == null) break;
    label = goTo;
}

8

কিভাবে একটি forলুপ সম্পর্কে ? আপনি যতবার চান পুনরাবৃত্তি। বা একটি whileলুপ, শর্ত পূরণ না হওয়া পর্যন্ত পুনরাবৃত্তি করুন। নিয়ন্ত্রণ কাঠামো রয়েছে যা আপনাকে কোডটি পুনরাবৃত্তি করতে দেবে। আমার GOTOবেসিক মনে আছে ... এটি এমন খারাপ কোড করেছে! আধুনিক প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি আপনাকে আরও ভাল বিকল্প দেয় যা আপনি আসলে বজায় রাখতে পারেন।


অসীম উত্পাদন লুপ: প্রোটোটাইপ, স্ক্র্যাচ, আরও ভাল প্রোটোটাইপ, স্ক্র্যাচ, আরও ভাল উন্নত প্রোটোটাইপ, স্ক্র্যাচ। রক্ষণাবেক্ষণ প্রায়শই ভ্রান্তি হয়। অনেকগুলি কোড বজায় রাখার দরকার নেই। বেশিরভাগ কোড পুনরায় লেখা হয়, রক্ষণাবেক্ষণ হয় না।
পেসারিয়ার

7

এটি করার একটি উপায় রয়েছে তবে এটি সাবধানতার সাথে পরিকল্পনা করা দরকার। উদাহরণস্বরূপ নিম্নলিখিত কিউবিসিক প্রোগ্রামটি ধরুন:

1 A = 1; B = 10;
10 print "A = ",A;
20 IF (A < B) THEN A = A + 1; GOTO 10
30 PRINT "That's the end."

তারপরে প্রথমে সমস্ত ভেরিয়েবল শুরু করার জন্য আপনার জাভাস্ক্রিপ্ট তৈরি করুন, তারপরে বল রোলিং শুরু করার জন্য প্রাথমিক ফাংশন কল করা (আমরা শেষে এই প্রাথমিক ফাংশন কলটি কার্যকর করি), এবং প্রতিটি লাইনের জন্য যে ফাংশনগুলি কার্যকর করা হবে তাতে সেট আপ করুন এক ইউনিট

প্রাথমিক ফাংশন কল দিয়ে এটি অনুসরণ করুন ...

var a, b;
function fa(){
    a = 1;
    b = 10;
    fb();
}
function fb(){
    document.write("a = "+ a + "<br>");
    fc();
}
function fc(){
    if(a<b){
        a++;
        fb();
        return;
    }
    else
    {
    document.write("That's the end.<br>");
    }
}
fa();

এই উদাহরণস্বরূপ ফলাফল:

a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
a = 10
That's the end.

@ জোনাহরপ কি সর্বাধিক স্ট্যাক সাইজ যা জাভাস্ক্রিপ্ট হ্যান্ডেল করতে পারে এটি ওভারফ্লো স্ট্যাক করার আগে?
এলিসিও ডি'আন্নুজিও

1
হ্যাঁ এবং এটি অত্যন্ত ছোট বলে মনে হচ্ছে। আমি যে কোনও ভাষা ব্যবহার করেছি তার চেয়ে অনেক ছোট।
জেডি

7

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

এরকম কিছু কাজ করবে:

while(true) {
   alert("RINSE");
   alert("LATHER");
}

ডানদিকে আছে একটি অসীম লুপ। জাতির স্ক্রিপ্ট ইঞ্জিন যা যা জাভাস্ক্রিপ্টের ইঞ্জিনের জন্য যাচাই করবে - সেই সময়কার অনুচ্ছেদের অভ্যন্তরে প্রকাশ ("সত্য") - এবং যদি অভিব্যক্তিটি সত্য হয় তবে এটি লুপটিকে চলমান রাখবে। এখানে "সত্য" লেখা সর্বদা সত্যকে মূল্যায়ন করে, অতএব অসীম লুপ।


7

অবশ্যই, আপনি জাভাস্ক্রিপ্টে switchঅনুকরণ করতে পারেন কনস্ট্রাক্ট ব্যবহার gotoকরে। দুর্ভাগ্যক্রমে, ভাষা সরবরাহ করে না goto, তবে এটি প্রতিস্থাপনের পক্ষে যথেষ্ট ভাল।

let counter = 10
function goto(newValue) {
  counter = newValue
}
while (true) {
  switch (counter) {
    case 10: alert("RINSE")
    case 20: alert("LATHER")
    case 30: goto(10); break
  }
}

5

আপনি সম্ভবত এই মত কিছু জাতীয় টিউটোরিয়াল পড়া উচিত এক

gotoজেএসে আদৌ বিদ্যমান কিনা তা নিশ্চিত নয়, তবে, যে কোনও উপায়ে এটি খারাপ কোডিং শৈলীতে উত্সাহ দেয় এবং এড়ানো উচিত।

আপনি করতে পারেন:

while ( some_condition ){
    alert('RINSE');
    alert('LATHER');
}

4

আপনি একটি ফাংশন সাধারণভাবে ব্যবহার করতে পারেন:

function hello() {
    alert("RINSE");
    alert("LATHER");
    hello();
}

5
এটি সত্যিই খারাপ ধারণা কারণ এটি সিস্টেমের স্মৃতিশক্তি শেষ না হওয়া অবধি কল স্ট্যাকের রিটার্নের ঠিকানাটি চাপতে থাকবে।
পল হাচিনসন 21

1
প্রকৃতপক্ষে ব্যবহারকারীর অন্তহীন মডেল রিনসে-লেটার সংলাপগুলি থেকে অনেক আগে CTRL-ALT-DELETED হবে!
শায়নে

4

কল স্ট্যাকটি পরিষ্কার রাখার সময় গোটো-মতো কার্যকারিতা অর্জন করতে, আমি এই পদ্ধতিটি ব্যবহার করছি:

// in other languages:
// tag1:
// doSomething();
// tag2:
// doMoreThings();
// if (someCondition) goto tag1;
// if (otherCondition) goto tag2;

function tag1() {
    doSomething();
    setTimeout(tag2, 0); // optional, alternatively just tag2();
}

function tag2() {
    doMoreThings();
    if (someCondition) {
        setTimeout(tag1, 0); // those 2 lines
        return;              // imitate goto
    }
    if (otherCondition) {
        setTimeout(tag2, 0); // those 2 lines
        return;              // imitate goto
    }
    setTimeout(tag3, 0); // optional, alternatively just tag3();
}

// ...

দয়া করে মনে রাখবেন যে এই কোডটি ধীরে ধীরে ধীরে ধীরে ফাংশন কলগুলি টাইমআউটস সারিতে যুক্ত করা হয় যা পরে মূল্যায়ন করা হয় ব্রাউজারের আপডেট লুপে।

দয়া করে নোট করুন যে আপনি আর্গুমেন্টগুলি পাস করতে পারবেন ( setTimeout(func, 0, arg1, args...)IE9 এর চেয়ে নতুন ব্রাউজারে বা setTimeout(function(){func(arg1, args...)}, 0)পুরানো ব্রাউজারগুলিতে ব্যবহার করতে পারেন) ।

আফাইক, আপনার অ্যাসিঙ্ক / সমর্থন অপেক্ষা না করে পরিবেশে অ-সমান্তরাল লুপটি বিরতি দেওয়ার প্রয়োজন না হলে আপনার এই পদ্ধতির প্রয়োজন হয় না।


1
কদর্য। আমি এটা ভালোবাসি. এফডাব্লুআইডাব্লু, সেই কৌশলটিকে ট্রামপোলাইনিং বলে।
জেডি

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

3

সমস্ত পিতামাতার বন্ধের শুরু এবং শেষ আছে

var foo=false;
var loop1=true;
LABEL1: do {var LABEL1GOTO=false;
    console.log("here be 2 times");
    if (foo==false){
        foo=true;
        LABEL1GOTO=true;continue LABEL1;// goto up
    }else{
        break LABEL1; //goto down
    }
    console.log("newer go here");
} while(LABEL1GOTO);

3
// example of goto in javascript:

var i, j;
loop_1:
    for (i = 0; i < 3; i++) { //The first for statement is labeled "loop_1"
        loop_2:
            for (j = 0; j < 3; j++) { //The second for statement is labeled "loop_2"
                if (i === 1 && j === 1) {
                    continue loop_1;
                }
                console.log('i = ' + i + ', j = ' + j);
            }
        }

2

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

এখানে একটি উদাহরণ:

var number = 0;
start_position: while(true) {
document.write("Anything you want to print");
number++;
if(number < 100) continue start_position;
break;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.