ভিতরে "বিরতি" সহ "যখন (সত্য)" লুপটির শব্দটি কী? [বন্ধ]


24

ধরুন আমার সি ++ বা সি # তে একটি লুপ রয়েছে যা এরকম হয়:

while( true ) {
    doSomething();
    if( condition() ) {
        break;
    }
    doSomethingElse();
}

একে সাধারণত "অসীম লুপ" বলা হয়। তবু এটি প্রযুক্তিগতভাবে অসীম নয় - একবার নিয়ন্ত্রণ প্রবাহের মাধ্যমে বন্ধ হয়ে যাবে break

এই জাতীয় লুপটির কী শব্দ - এর ভিতরে "লুপ চিরতরে" লুপ নিয়ন্ত্রণ বিবৃতি এবং "ব্রেক" রয়েছে?


22
আমি মনে করি না এখানে একটি বিশেষ শব্দ আছে।
ক্রিসএফ

2
নিয়ন্ত্রণ কি বিরতি দিয়ে প্রবাহিত হবে যে কোন গ্যারান্টি আছে? উদাহরণস্বরূপ, যদি condition()সবসময় মিথ্যা ফিরে আসে? আমি বলব এটি শর্তযুক্ত বিরতি সহ অসীম লুপ।
জন

1
এমনকি একটি ছাড়া breakলুপটি অসীম নয় ( kill, ctrl-alt-del, আনপ্লাগ করুন ...) un তাহলে কেন পরিভাষার বিবরণ নিয়ে বিরক্ত করবেন?
mouviciel

5
"শব্দটি কী?" - "একে সাধারণত অসীম লুপ বলা হয়"। এটি আপনার উত্তর এখনই। আপনি এই শব্দটির সাথে স্পষ্টভাবে খুশি নন, তবে এটি (প্রাকৃতিক) ভাষাগুলি বর্ণনামূলক যে সত্যটি সরিয়ে দেয় না। "এক্স ফর টার্ম" হ'ল লোকেরা যা ব্যবহার করছে তা নয়, তাদের ব্যবহার করা উচিত not
MSalters

5
এই প্রশ্নটি অফ-টপিক হিসাবে উপস্থিত বলে মনে হচ্ছে কারণ এটি একটি "নাম সেই জিনিস" প্রশ্ন। "সেই জিনিসটির নাম দিন" একই কারণগুলির জন্য খারাপ প্রশ্ন যা "এই অস্পষ্ট টিভি শো, চলচ্চিত্র বা তার চরিত্র বা গল্পের দ্বারা চিহ্নিত বই" খারাপ প্রশ্ন: আপনি তাদের গুগল করতে পারবেন না, তারা কোনওভাবেই ব্যবহারিক নয়, তারা অন্য কাউকে সাহায্য করবেন না এবং তাদেরকে অন্য ধরণের প্রান্তিক প্রশ্ন জিজ্ঞাসা করার দরজা খুলে দেওয়ার অনুমতি দিন। দেখুন blog.stackoverflow.com/2012/02/lets-play-the-guessing-game
মশা

উত্তর:


24

সিএস অধ্যয়নরত, এই অধ্যাপক আমাদের শিখিয়েছিলেন যে প্রাক-চেকিং লুপগুলি ( while(cond) {}), পোস্ট-চেকিং লুপগুলি ( do {} while(cond);) এবং মিডল-চেকিং লুপ রয়েছে । (আমি এটি ইংরেজিতে খারাপভাবে অনুবাদ করেছি, তবে আপনি ধারণাটি পেতে পারেন))

সি এবং সি ++ এর উত্তরোত্তরটি নেই (আইআরটিএস এডা এটি রয়েছে, বিআইসিসিডাব্লু), সুতরাং আপনার নির্মাণটি সি এবং সি ++ এর জন্য ব্যবহৃত হয়।


1
হ্যাঁ, আদার কাছে এটি রয়েছে:loop ... exit when condition; ... end loop;
কেথ থম্পসন

@ কিথ: নিশ্চিত করার জন্য ধন্যবাদ! আমি কিছু অ্যাডা করেছি প্রায় 20 বছর।
sbi

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

অনুবাদ সম্পর্কে - আমার মনে হয় "প্রাক" এবং "পোস্ট" ব্যবহার করা হলে "ইন" সাধারণত আরও বেশি মানানসই, যেমন "প্রিআর্ডার / পোস্টর্ডার / ইনর্ডার ট্রি ট্রভারসাল"।
ওক

1
আমি যে শব্দটির সাথে বড় হয়েছি তা হ'ল "মধ্য-প্রস্থান লুপ"। আমি মধ্য-প্রস্থান লুপগুলির জন্য সুস্পষ্ট সমর্থন সহ কয়েকটি ভিন্ন ভাষায় কাজ করেছি।
mjfgates

13

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

prompt user and read in the first value
while (value != sentinel) {
    process the data value
    prompt user and read in a new value
}

এবং তারপরে ডুপ্লিকেট কোড এড়াতে লুপ এবং অর্ধ ধারণাটি ব্যবহার করে একই জিনিসটি সমাধান করা হয়েছে :

while (true) {
    prompt user and read in a value
    if (value == sentinel) break;
    process the data value
}

10

অফিসিয়াল নাম না থাকাতে আমি এটিকে ব্রোকেন লুপ বলব । একটি লুপের মাঝখানে বিরতি কিছুটা অপরিষ্কার, যেহেতু এই শব্দের অস্পষ্টতা লক্ষ্য করা যায় goto


আমি বলব, গোটোয়ের চেয়ে অনেক খারাপ। আমি এর চেয়ে লুপে মিথ্যাভাবে নির্মিত অবস্থার চেয়ে অনেকটা দেখতে চাই।
ব্রায়ান নোব্লাচ

14
@ ব্রায়ান কি? 'সত্য' শর্তটি এটিকে স্পষ্ট করে তোলে এবং এর মতো লুপগুলি সত্যই সাধারণ। উদাহরণস্বরূপ, আপনি যদি ফাইলের প্রতিটি লাইনকে তালিকায় যুক্ত করতে চান তবে আপনাকে লাইনটি পড়তে হবে (কিছু করতে), এটি ব্যর্থ হলে বন্ধ করুন (শর্ত ভাঙ্গলে), অন্যথায় এটি তালিকায় যুক্ত করুন এবং পুনরায় পুনরুদ্ধার করুন (কিছু করুন অন্য)।
ক্রেগ গিডনি

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

1
ম্যালকম: সম্ভাব্য সমস্যাটি হ'ল কোডটি পড়ার সময়, কখন এবং কেন লুপটি বেরিয়ে আসে তা দেখা শক্ত। অতিরিক্ত সমস্যা দেখা দেয় যখন আপনি দুটি বা ততোধিক লুপ বাসা বাঁধেন এবং অভ্যন্তরীণ লুপের মধ্যে পাওয়া অবস্থার ভিত্তিতে বাইরের লুপটি ভেঙে ফেলতে চান।
ব্যবহারকারী 281377

আসুন বলতে আপনি একটি ইভেন্ট লুপ, একটি উপলব্ধকারী Xorg আবেদন ড্রাইভিং মত (সিউডো-কোড :) আছে while(XEventGet(&ev) != NULL){ ... }, আপনি স্বাভাবিকভাবেই লুপ ভিতরে কী চেক করতে চান করতে যাচ্ছেন: if(ev.key == XK_q) break;। নিম্নলিখিতগুলি করা while(XEventGet(&ev) != NULL && ev.key != XK_q){ ... }:, মিড-লুপ বিরতির চেয়ে কুরুচিপূর্ণ এবং তর্কযোগ্যভাবে পড়া শক্ত। এছাড়াও, যদি চেক করার আগে প্রথমে মানটির কিছু করা দরকার হয়? আপনি লুপের বেস কেসে সিরিয়াসলি স্টাফ করে যাচ্ছেন না, তাই না?
ব্র্যাডেন সেরা

8

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

যদি আপনি কাউকে "একটি অসীম লুপ তৈরি করেন এবং এক্স শর্তের জন্য একটি বিরতি ব্যবহার করেন" এবং তারা আপনার অর্থ কী তা জানবে। যদি কেউ আপনার কোড পর্যালোচনা করে থাকে এবং "আপনার লেখা অসীম লুপটি আমি পছন্দ করি না" এর চেয়ে বেশি কিছু না বলে আপনি অবশ্যই জানবেন যে তারা কী সম্পর্কে কথা বলছেন (অবশ্যই যদি আপনার একাধিক না থাকে তবে)।


1
এটি অসীম লুপ নয়; এটি একটি সাধারণ whileলুপের মতোই একটি সু-সংজ্ঞায়িত সমাপ্তির শর্ত পেয়েছে এবং আপনি যেভাবে সমাপ্তির প্রমাণ করেন তা ঠিক একইরকম (একঘেয়েমি-হ্রাসকারী মেট্রিক সন্ধান করা একটি দুর্দান্ত শুরু)।
ডোনাল ফেলো

8

এটি ভুল জায়গায় শর্তসাপেক্ষে একটি ডু-ওয়েল লুপ।


2
হ্যাঁ, এটি লেখা উচিত: যখন (রাখুন_জাগানো) {doSomething (); if (শর্ত) {রাখুন_জাগানো = মিথ্যা; } অন্য {doSomethingElse (); }}
স্টিফেন গ্রস

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

5
@ স্টিফেনগ্রস দ্যা কোড স্নিপেট একটি ভয়ঙ্কর পরামর্শ। লুপ সংজ্ঞায় আসল শর্তটি রাখার জন্য রিফ্যাক্টর, বা কেবল ব্যবহার করুন breakবা continue। সেন্ডিনেল মানগুলি যেকোন মূল্যে এড়িয়ে চলুন, তারা মানসিকভাবে ট্র্যাক রাখার জন্য রাষ্ট্রের অন্য এক স্বেচ্ছাসেবী টুকরো, যা কোডের উদ্দেশ্যটিকে ছদ্মবেশ দেয়।
ইজকাটা

2
মানসিক মানগুলি গোটোতে বিলম্বিত হয়।
উইনস্টন ইওয়ার্ট

2
একক বহির্গমন ওয়েইনি হওয়ার জন্য -1।
ডোনাল ফেলো

6

আমি "নিঃশর্ত লুপ" , "শর্তহীন জাম্প" এর অনুরূপ ভোট দেব । মিথ্যা বলার অপেক্ষা রাখে না ("অসীম লুপ" এর বিপরীতে) ঠিক কী চলছে (কোডটি নিঃশর্তভাবে লুপ করে) এটি চিত্রিত করে।


1
তবে এটির সমাপ্তির শর্ত রয়েছে; যে if/ breakমাঝখানে প্যাটার্ন অংশ।
ডোনাল ফেলো

5

এই জাতীয় লুপটির কী শব্দ - এর ভিতরে "লুপ চিরতরে" লুপ নিয়ন্ত্রণ বিবৃতি এবং "ব্রেক" রয়েছে?

এটি বিরতির শর্ত সহ একটি অসীম লুপ।

আমি এটিতে অমিলিন্ডের সাথে একমত হব যদি আপনি এটির একটি বিশেষ নাম দিতে চান তবে আপনি এটিকে একটি অসীম আংশিক লুপ বলতে পারেন


1
এটি মোটেও অসীম নয়; সমাপ্তির শর্তটি যে বিন্দুতে পরীক্ষা করা হয় সেটি ঠিক একটি অন্য জায়গায়।
ডোনাল ফেলো

5

রোসটা কোডে, এই নির্দিষ্ট প্যাটার্নটিকে "এন প্লাস ওয়ান হাফ" লুপ হিসাবে বর্ণনা করা হয়েছে । যদিও এটি আমার প্রিয় শব্দ নয়, এটি ভয়ঙ্কর নয় এবং এটি স্পষ্টভাবে এমন একটি প্যাটার্ন যা কিছু ধরণের লুপের জন্য দরকারী। (বিকল্পগুলি হ'ল প্রাক-শর্তের কোডটি নকল করা - বাস্তব প্রোগ্রামগুলিতে সম্ভাব্য কৌশলযুক্ত বা লুপ শর্তের পরিবর্তনশীল যুক্ত করার পরে শর্তের পরে কোডের নীড়ের গভীরতা বৃদ্ধি করা; কোডের রক্ষণাবেক্ষণ বা বোধগম্যতার উন্নতিও নয়) এই জাতীয় নির্মাণ প্রত্যাখ্যানের একমাত্র কারণ হ'ল যদি কেউ লুপ লেখার জন্য ফ্রি হতে জোর দেয় break))


4

কোনও মানক পদ নেই, তবে আমি এটি আংশিক লুপ হিসাবে বলব ।

এই লুপটি তখন ব্যবহার করা হয় যখন আপনি একবারে লুপের কিছু অংশ শেষবারের পরে চালিত করতে চান (অর্থাত্ আংশিক কার্যকর)। আপনি যখন এমন কোনও উপযুক্ত পরিস্থিতি খুঁজে না পান যেখানে আপনি পুরো লুপটি ভেঙে ফেলতে চাইতে পারেন এটি ব্যবহার করা হয় ।

এই ক্ষেত্রে, আপনি অন্তত doSomething()শেষ বার কার্যকর করার পরে লুপটি ভাঙ্গতে চান ।


2

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

এটি বলেছিল যে, এটি এখন বিস্তৃত জ্ঞান যে whileলুপগুলি সাধারণত আরও মেন্টেনেবল হয়, যেহেতু আক্রমণকারীদের সম্পর্কে যুক্তি করা সহজ এবং তারা প্রায়শই খালি খালি কেসটি আরও ভালভাবে পরিচালনা করে।

আপনার বিশেষ ক্ষেত্রে আপনার লুপটি ঠিক সমান

for(; doSomething(), !condition(); doSomethingElse()){}

সুতরাং আমি কেবল তখনই breakসংস্করণটি ব্যবহার করব যদি হয় doSomethingবা doSomethingElseএকাধিক বক্তব্য জড়িত থাকে এবং আমি তাদের পরিবর্তে আপনার মতো আলাদা ফাংশনে রাখি না।

এটি বলেছে, যদি আপনার লুপটি আরও জটিল হয় তবে একটি (শুরু, চেক, ইনক্রিমেন্ট) পুনরাবৃত্তিটি তখন আপনাকে এটিকে আরও সহজ কিছুতে রিফ্যাক্টর করার বিষয়টি বিবেচনা করা উচিত।


1

আমি অনুমান করি আমরা যদি এর জন্য একটি শব্দ তৈরি করার চেষ্টা করতে যাই তবে হতে পারে:

পালানো লুপ


-1। প্রশ্নটি কোনও নাম তৈরির বিষয়ে নয়, এটি একটি সাধারণ নাম ইতিমধ্যে বিদ্যমান কিনা তা নিয়ে। এছাড়াও, সমস্ত লুপগুলি "পলায়নযোগ্য" তাই এটি কোনও কার্যকর নাম নয়।
ব্রায়ান ওকলে

@ ব্রায়ানওকলে সংজ্ঞা অনুসারে একটি অসীম লুপটি ভেঙে যাওয়া উচিত নয়। খারাপ প্রোগ্রামিং ব্যতীত সম্ভবত এর জন্য একটি শব্দ থাকা উচিত নয়।
লার্সটেক


0

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

while (loop
    .getAExecutionModelFactory()
    .getActiveXexecutor()
    .getYCancelModelHandler()
    .getCurrentHandler()
    .isCancelled()) {
        // ... do something with the current Handler ....
        loop = ..... // prepare for next loop
}

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

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