প্রত্যাবর্তন কি একটি লুপ থামাতে পারে?


156

ধরুন আমার এর মতো লুপ রয়েছে:

for (var i = 0; i < SomeArrayOfObject.length; i++) {

  if (SomeArray[i].SomeValue === SomeCondition) {

     var SomeVar = SomeArray[i].SomeProperty;
     return SomeVar;
  }
}

তাত্ক্ষণিক প্রশ্ন: returnলুপটি নিজেই কার্যকর করা বন্ধ করে দেয়?

উত্তর:


205

হ্যাঁ, returnকার্যকর করা বন্ধ করে এবং ফাংশনটি প্রস্থান করে। returnসর্বদা ** এটির লুপের অভ্যন্তরে না থাকলে আর কার্যকরকরণের সাথে সাথে তত্ক্ষণাত তার ফাংশনটি প্রস্থান করে।

এটি সহজেই নিজের জন্য যাচাই করা হয়:

function returnMe() {
  for (var i=0; i<2; i++) {
    if (i === 1) return i;
  }
}

alert(returnMe());
// 1

** দ্রষ্টব্য: বিশেষ ক্ষেত্রে সম্পর্কে এই অন্য উত্তরটি দেখুন try/catch/finally এবং কীভাবে ফোরের প্রতিটি লুপের নিজস্ব ফাংশন রয়েছে তা সম্পর্কে এই উত্তরটি এতে থাকা ফাংশনটি ভেঙে ফেলবে না।


25
> আগমন সবসময় আরও ফাঁসি দিয়ে অবিলম্বে নিজের কাজের প্রস্থান করে, যদি একটি লুপ ভিতরে ... যদি না তা একটি foreach লুপ
ওও

9
@oo বাছাই সত্য। returnএখনও তার নিজস্ব সুযোগে ফাংশন কলব্যাকের বর্তমান পুনরাবৃত্তি থেকে ফিরে আসে, তবে পুরো কলিং পদ্ধতি থেকে বিরতি প্রত্যাশা করা হবে না forEach()। সুতরাং এটি নিজে লুপ থেকে ফিরে আসেনি , তবে এটি কলব্যাক থেকে ফিরে আসছে লুপটি কার্যকর করে। সংযুক্ত প্রশ্ন থেকে কোড উদাহরণে, আউটপুট ফিরে আসার কারণে 1,2,4,5এড়িয়ে চলেছে 3
মাইকেল বার্কোভস্কি

হতে পারে লাল থ্রেডটি হ'ল returnসর্বদা বর্তমান thisপ্রসঙ্গ থেকে ফিরে আসবে ।
oo

"সম্ভাব্য" প্রারম্ভিক লুপ সমাপ্তির জন্য অ্যারেতে প্রতিটি () বা () এর জন্য ব্যবহারের বিকল্পটি কিছু () ব্যবহার করছে।
আনবিস

1
আমি জানি এই কিছু কিছু মানুষের জন্য তুচ্ছ, কিন্তু কারণ আপনি আর আছে এই তাই জেনে রাখা ভাল হয় breakএবং তারপর return
NoName

60

ইন অধিকাংশ (এটি ছাড়া) ক্ষেত্রে, returnঅবিলম্বে বন্ধ হয়ে যাবে। যাইহোক, যদি tryরিটার্নটি কোনও সহকারী finallyব্লকের সাথে finallyথাকে তবে সর্বদা কার্য সম্পাদন করে এবং এর returnমধ্যে "ওভাররাইড" করতে পারে try

function foo() {
    try {
        for (var i = 0; i < 10; i++) {
            if (i % 3 == 0) {
                return i; // This executes once
            }
        }
    } finally {
        return 42; // But this still executes
    }
}

console.log(foo()); // Prints 42

8

returnবিবৃতি একটি লুপ শুধুমাত্র যদি এটা ফাংশন ভিতরে স্টপ। অন্যথায়, আপনি এই ত্রুটি পাবেন:

Uncaught SyntaxError: Illegal return statement(…)

6

এই কোডটি একটি for ofলুপে প্রথম পুনরাবৃত্তির পরে লুপটি প্রস্থান করবে :

const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
  if (iterator.name == 2) {
    return;
  }
  console.log(iterator.name);// 1
}

নীচের কোডটি শর্তে লাফিয়ে একটি for ofলুপে চালিয়ে যাবে :

const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];

for (const iterator of objc) {
  if (iterator.name == 2) {
    continue;
  }
  console.log(iterator.name); // 1  , 3
}

ধন্যবাদ, এটি আমাকে অনেক সাহায্য করে, আমি নোড ব্যবহার করছি এবং প্রতিটি এবং ... এর জন্য, আমার প্রত্যাবর্তনের কাজগুলি আমার জন্য ভেঙে যাচ্ছে
veroniComS

5

হ্যাঁ, একবার returnবিবৃতি কার্যকর হয়ে গেলে পুরো ফাংশনটি ঠিক সেই সময়েই বেরিয়ে আসে।

একবার ভেবে দেখুন কী হবে যদি তা না ঘটে এবং লুপিং অব্যাহত রাখে এবং returnপ্রতিবার সেই বিবৃতি কার্যকর করে ? আপনি যখন এটির বিষয়ে চিন্তা করেন তখন এটি কোনও অর্থ ফেরত দেওয়ার অর্থটিকে অবৈধ করে দেবে।


1

উত্তর হ্যাঁ, আপনি রিটার্ন স্টেটমেন্ট লিখলে নিয়ন্ত্রণগুলি সঙ্গে সঙ্গে কলার পদ্ধতিতে ফিরে যায়। অবশেষে ব্লক ব্যতীত, যা রিটার্নের স্টেটমেন্টের পরে কার্যকর হয়।

এবং অবশেষে আপনি ফিরে আসা মানটিও ওভাররাইড করতে পারে, যদি আপনি অবশেষে ব্লকের ভিতরে ফিরে যান। লিঙ্ক: চেষ্টা করুন-শেষের দিকে-ফেরতের স্পষ্টতা

বিবৃতি অনুসারে রিটার্নের সংজ্ঞা:

জাভা ডক্স:

একটি রিটার্ন বিবৃতি একটি নিয়ন্ত্রণ ফ্লো ব্লক থেকে শাখা এবং পদ্ধতিটি প্রস্থান করতে ব্যবহার করা যেতে পারে

এমএসডিএন ডকুমেন্টেশন:

রিটার্ন স্টেটমেন্টটি কোনও ফাংশনের কার্য সম্পাদন বন্ধ করে দেয় এবং কলিং ফাংশনে নিয়ন্ত্রণ ফিরিয়ে দেয়। কলটি অনুসরণের সাথে সাথে কলিং ফাংশনে এক্সিকিউশন পুনরায় শুরু হয়।

উইকিপিডিয়া:

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


আপনার ব্যবহৃত উত্সগুলি যথাযথভাবে লিঙ্ক করতে হবে এবং পাশাপাশি উদ্ধৃতিগুলিকেও ফর্ম্যাট করতে হবে।
নাথান টগি

এখন কি দেখতে ভাল লাগছে?
ব্যবহারকারী 1179299

আমি ব্যাকরণ সংশোধনকারীদের প্রশংসা করি, তবে এখনও কোনও লিঙ্ক নেই, এবং আপনি এখনও ব্লককোট বিন্যাস ব্যবহার করছেন না।
নাথান টগি

0

"রিটার্ন" ফাংশন থেকে প্রস্থান করে তবে আপনি যদি প্রচুর পরিমাণে ডেটা ফিরিয়ে দিতে চান তবে আপনি এটিকে একটি অ্যারেতে সংরক্ষণ করতে পারেন এবং তারপরে লুপের প্রতিটি টুকরো 1 দ্বারা 1 করে ফেরত দেওয়ার চেষ্টা না করে ফিরে আসতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.