আমি (;;) নির্মাণের জন্য এতগুলি কেন দেখছি? [বন্ধ]


14

আমার চিন্তাভাবনা করার জন্য, একটি লুপ একটি জ্ঞাত বা নির্ধারণযোগ্য ব্যাপ্তিতে পুনরাবৃত্তি করতে ব্যবহৃত হয়।

String[] names = //something;
for ( int i = 0; i < names.length; i++ ) { //do stuff }

যা সমান (আমি একপাশে সরানো):

String[] names = //something;
int i = 0;
while (i < names.length )
{
   // do stuff
   i++;
}

অন্য কথায়, forলুপটি সাধারণত ব্যবহৃত হয় (একটি অত্যন্ত দরকারী) সিনট্যাকটিক চিনিwhile কনস্ট্রাক্টের ।

যাইহোক, আমি for(;;)ওয়েবে অনেকগুলি কনস্ট্রাকশন দেখছি যা কার্যত সমানwhile(true)

এ নিয়ে যুক্তি কী? লুপের জন্য কেন অসীমের চেয়ে অসীমের চেয়ে বেশি পছন্দ হবে?

// এমনকি এমন একটি জাভা পাঠ্যপুস্তকও দেখেছি যা লুপ করার সময় ব্যবহার করে না! যেমন ভয়ানক নির্মাণের দিকে পরিচালিত করে:

String input = getInput();
for( ; !inputIsValid(input) ; )
{
   //redo;
}

মূল কারণটি হচ্ছে অগ্রাধিকার। ওয়াইএমএমভি নির্বাচন করার সময় পঠনযোগ্যতাটি খেলতে হবে।
অ্যারন ম্যাকআইভার

কেন কেউ বিশ্রী নির্মাণ পছন্দ করবেন?
ক্রিস চডমোর

10
আপনি অদলবদল করতে পারেন whileএবং forএখানে এবং প্রশ্ন পরিবর্তন হবে না। while(true)এবং for(;;)একই জিনিস বোঝাতে। স্পষ্টতই আপনার পক্ষে দৃ strong় অগ্রাধিকার রয়েছে while, অন্যের পক্ষেও সমানভাবে দৃ strong় পছন্দ থাকতে পারে for। একজনের তুলনায় অন্যটির চেয়ে আরও সঠিক এটি বলা অসম্ভব।
কালেব

3
@ ক্রিস, আমি মোটেও for(;;)বিভ্রান্তি পাই না । এটি একটি স্ট্যান্ডার্ড সি আইডিয়োম, যা আপনি কে অ্যান্ড আর (2 ই) এর ৩.৩ ধারায় নথিভুক্ত করেছেন। আমি বুঝতে পারি যে আপনি এটি পছন্দ করেন না; আপনার বুঝতে হবে যে অন্যরা অবশ্যই এটি পছন্দ করে (অন্যথায় আপনি এটি কখনই দেখতে পাবেন না)। এটি সি ব্যতীত অন্য ভাষায় কম-বেশি গ্রহণযোগ্য হতে পারে; আপনি এই ভাষা-অজ্ঞাতকে ট্যাগ করেছেন যা কেবলমাত্র একটি নির্দিষ্ট উত্তরের সম্ভাবনা হ্রাস করে। আবার, আমি বন্ধ করে ভোট দিয়েছি কারণ প্রশ্নটি গঠনমূলক নয়; যদি আমার বিরক্তি থাকে তবে আমি বন্ধ হওয়ার পরিবর্তে বা অতিরিক্ত হিসাবে আপত্তিজনক হিসাবে চিহ্নিত করব। এটাই সব।
কালেব

1
ব্যক্তিগতভাবে আমি মনে করি সেখানে অসীম loops জন্য সম্পূর্ণরূপে অন্য সিনট্যাক্স আছে এখানে একটি বাস্তব সুযোগ: কিছু মতwheeeeeeee { ... }
detly

উত্তর:


33

এটি পিডিপি -11 এ পুরানো প্রোগ্রামিং অনুশীলনগুলির একটি হোল্ড-ওভার (হ্যাঁ, আমি পুরানো বলেছিলাম )। এটি একটি একক নির্দেশনা সংরক্ষণ করত যা লুপগুলি দ্রুত চালানোর জন্য দরকারী।

অতিরিক্ত তথ্যের জন্য নিম্নলিখিতটি দেখুন: http://www.flounder.com/exception.htm


3
এটাই হ'ল আমি যা খুঁজছিলাম। একটি আসল, বৈধ কারণ আছে, তবে এটি আর বৈধ নয়।
ক্রিস চডমোর

1
@ ক্রিস এননোপ, আধুনিক সংকলকরা কখনও কখনও লুপের অবস্থায় ধ্রুবক ব্যবহার সম্পর্কে অভিযোগ করবেন। এটি নিখুঁতভাবে একটি হোল্ডওভার নয়।
ইজকাটা

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

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

@ টলেমি: আচ্ছা আপনি অবশ্যই লিখতে পারতেন while(1) { }
এড এস

10

কিছু সংকলক ব্যবহার করার সময় একটি সতর্কতা দেবে ( শর্তাধীন অভিব্যক্তির মতো কিছু ধ্রুবক ) while( 1 )তবে for( ; ; )সতর্ক করার মতো কিছুই নেই। প্রোগ্রামাররা সতর্কতা ছাড়াই কোড চায়, তাই তারা বৈকল্পিকের জন্য এটি ব্যবহার করে।


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

5

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


4
... সন্দেহ সেখানে ছিল একটি হার্ডওয়্যার কারণ ...
হারুন McIver

2
এডওয়ার্ড রবার্টসন যেমন উল্লেখ করেছেন, এর কারণ হ'ল পিডিপি -11-এর সি সংকলক বুঝতে পারেনি যে "যখন (সত্য)" তে সত্যটি একটি সংকলন সময় ধ্রুবক ছিল এবং সমাবেশ তৈরি করার সময় একটি অতিরিক্ত নির্দেশ (তুলনা) যুক্ত করত। পিডিপি -11 এ উপলব্ধ সীমিত সংস্থানগুলির কারণে প্রোগ্রামাররা প্রোগ্রামটির বাইরে থাকা একটি অতিরিক্ত নির্দেশকে অপ্টিমাইজ করতে লুপের জন্য ব্যবহার করেছিল।
জেটি

3

(;;) এর জন্য "চিরকালের" হিসাবে পড়া যায় যা কিছু "সত্যের চেয়ে" বেশি প্রাকৃতিক বলে মনে করে।


যদিও এটি আসল কারণ নয়, এটি মূল কারণটি মূল কারণটি অচল হয়ে যাওয়ার অনেক পরে আটকে যাওয়ার কারণ। দীর্ঘস্থায়ী প্রোগ্রামারদের জিজ্ঞাসা করা ছাড়া এটি সমর্থন করার জন্য কোনও প্রমাণ খুঁজে পাওয়া খুব কঠিন।
ডেরেনডাব্লু

-2

সকল অভিজ্ঞ প্রোগ্রামারদের আমি জিজ্ঞাসা চিনতে পারে for(;;)তুলনায় আরো দ্রুত while(true)বা while(1)


2
যে কোনও প্রোগ্রামার যে জঘন্য মূল্যবান তা তাত্ক্ষণিকভাবে তিনটিই সনাক্ত করতে সক্ষম হওয়া উচিত। তিনটিই যথেষ্ট সাধারণ যে কেউ যে 5 মিনিটের বেশি পড়ার কোড ব্যয় করেছেন তাদের প্রত্যেককেই বেশ কয়েকবার দেখেছেন।
সিএওও

1
গবেষণায় দেখা গেছে যে অভিজ্ঞ প্রোগ্রামারগণ for(;;)14- মিমি থেকে while(1):-) -র চেয়ে দ্রুত বুঝতে পারবেন
কেভিন cline
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.