কোন কার্যকর বিকল্প নিয়ন্ত্রণ কাঠামো আপনি জানেন? [বন্ধ]


12

অনুরূপ প্রশ্ন এসও বন্ধ ছিল।

কখনও কখনও যখন আমরা প্রোগ্রামিং করি, আমরা দেখতে পাই যে কিছু বিশেষ নিয়ন্ত্রণ কাঠামো আমাদের পক্ষে খুব কার্যকর হবে তবে আমাদের প্রোগ্রামিং ভাষায় সরাসরি উপলভ্য নয়।

কোন বিকল্প নিয়ন্ত্রণ কাঠামো গণনা সংগঠিত করার একটি কার্যকর উপায় বলে আপনি মনে করেন?

এখানে লক্ষ্যটি হ'ল কাঠামোগত কোড এবং যুক্তি উন্নত করার জন্য স্ট্রাকচারিং কোড সম্পর্কে নতুনভাবে চিন্তাভাবনা করা।

আপনি একটি ইচ্ছাকৃত সিনট্যাক্স / শব্দার্থক তৈরি করতে পারেন যা এখন উপলভ্য নয় বা বিদ্যমান কোন প্রোগ্রামিং ভাষার উপর কম পরিচিত নিয়ন্ত্রণ কাঠামো উদ্ধৃত করতে পারেন।

উত্তরগুলির একটি নতুন প্রোগ্রামিং ভাষা বা একটি আসল ভাষা বর্ধনের জন্য ধারণা দেওয়া উচিত।

এটিকে বুদ্ধিমান হিসাবে ভাবুন, সুতরাং এমন কিছু পোস্ট করুন যা আপনি মনে করেন এটি একটি ক্রেজি ধারণা তবে এটি কিছু পরিস্থিতিতে কার্যকর হতে পারে।

এটি অত্যাবশ্যক প্রোগ্রামিং সম্পর্কে।


1
এই প্রশ্নটি "অপরিহার্য প্রোগ্রামিং" সম্পর্কে থাকতে হবে কেন?
অনুপস্থিত 23

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

3
ঠিক আছে, আমি গার্ডদের সাথে প্যাটার্ন ম্যাচিং ভাগ করতে যাচ্ছিলাম, যেহেতু এগুলি আরও সাধারণ যে কেস স্টেটমেন্ট এবং ইফ-থান্স, তবে এটি যদি কোনও এফপি অঞ্চল না হয় তবে আমি অনুমান করি যে আমাদের বাকিদের জন্য এটি আরও প্যাটার্ন ম্যাচিং!
কোডেক্সআর্কানিয়াম

@ কোডেক্সআরকানাম: ঠিক আছে, প্যাটার্ন ম্যাচিং একটি আবশ্যকীয় নির্মাণের মতোই একটি নির্মাণ। প্রকৃতপক্ষে, প্যাটার্ন ম্যাচিং নিজেই জরুরী নিয়ন্ত্রণ কাঠামোর একটি বিকল্প। লজ্জা পাবেন না ;-)
ম্যানেরিও

সমস্ত উত্তরের দিকে তাকানো আমাকে খুশি করে যে প্রস্তাবগুলির কোনওটিই বাস্তব জীবনে নেই (এবং আশা করি কখনই তা হবে না)। দুঃখিত :)
সার্জ 23

উত্তর:


14

ঠিক আছে, এটি একটি মজার প্রশ্ন।

আমি কিছু সময়ের elseজন্য এবং লুপগুলির জন্যও একজন জেনারেল রাখতে চাই , যখন প্রথম পরীক্ষায় শর্তটি সত্য না হয় :

while (condition) {
    // process
}
else {
    // condition was never true
}

এটি শর্তটির বিশ্রী পুনরায় গণনা বা এটিকে ভেরিয়েবলের মধ্যে সঞ্চয় করে এড়িয়ে চলে।


পাইথন এটি আছে।
ব্যারি ব্রাউন

হে! অবশেষে পাইথনের একটি উদ্দীপনা পছন্দ যার সাথে আমি একমত! ;-)
ম্যাকনাইল

5
লুপের জন্য / যখন লুপগুলির জন্য অন্য ক্লজটি কার্যকর করা হয় যদি লুপটি শেষ হয় তবে লুপটি বিরতি বা রিটার্নের বিবৃতি বা কোনও ব্যতিক্রমের মাধ্যমে শেষ হয় না। লুপগুলির জন্য অন্য সংঘর্ষগুলি কার্যকর করা হয় যখন লুপগুলি অপরিবর্তিত হয় এমন উপাদানগুলির ক্রম শেষ হয়ে যায় এবং যখন লুপগুলি কার্যকর হয় তখন লুপ শর্তটি প্রথমবারের জন্য ফলসকে মূল্যায়ন করে।
পিলমুনচারে

4
আছে একটি অনুরোধ যোগ করার জন্য while ... elseকনস্ট্রাক্ট পথ MacNeil পিএইচপি তা বর্ণনা করা হয়েছে। আমি মনে করি এটি দুর্দান্ত ধারণা, কারণ "অ্যাপ্লিকেশনগুলির ফলাফল এখানে / ফলাফল ছিল না" ওয়েব অ্যাপ্লিকেশনগুলিতে মোটামুটি প্রচলিত প্রবাদ।
ডিন হার্ডিং

1
@ এসএনআরফাস: তিনি কোডের একটি ব্লক চান (লুপের ব্লক থেকে পৃথক) যা কেবল তখনই সম্পাদন করে যদি যদি শর্তটি কখনও পূরণ না হয়। কর-যখন শর্তসাপেক্ষে নির্বিশেষে একবার লুপের কোডের ব্লক (কিছু পৃথক ব্লক নয়) কার্যকর করে।
সৈন্যদল

10

কয়েকটি উত্তর একটিতে ম্যাস করবেন না কেন?

while (expr) {

    // Executed every iteration, unless first{} is present.
    // May be explicitly called rest{} if you like first{} to come first.

    // Blocks may return results, and consequently be used in expressions.
    return expr;

} first {

    // Executed only on the first iteration.

} pre {

    // Executed before every iteration.

} post {

    // Executed after every iteration.

} catch (oops) {

    // All blocks are implicitly try{}ed if followed by a catch{}.

} finally {

    // Executes after the block completes, regardless of exceptions.

} else {

    // Executed if the loop body or rest{} never executes.

} never {

    // Executes only when a client is present.

} drop (bad, worse), // Explicitly ignore certain exceptions.
  until (expr);      // Here, have a post-body condition, too.

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


5
দরকারী নয়, বিভ্রান্তিকর। বিনোদন নয়, ধীর slow
জোশ কে

2
@ জো কে: হ্যাঁ, আপনি ঠিক বলেছেন। কি, আপনি ভেবেছিলেন আমি একমত না? এই উত্তরটি হাসতে না থাকার জন্য জিহ্বাকে কামড় দিচ্ছে।
জন পূর্দি

যদি এটি উপহাসের দ্বারা বোঝানো হত তবে তা অবশ্যই সফল হয়েছিল!
জোশ কে

11
+1 আমাকে হাসিয়েছে। পুনরাবৃত্তির মধ্যে কার্যকর করতে কোডের জন্য একটি "মধ্যবর্তী" ধারা প্রয়োজন eds
ব্যারি ব্রাউন

1
+1, তবে এটির seventh { ... }পাশাপাশি প্রয়োজন।
j_random_hacker

7

ফাংশন হিসাবে কাঠামো নিয়ন্ত্রণ করুন।

আমি চাই for, if, else, while, ইত্যাদি ফাংশন, না বিশেষ কাঠামো যাবে।

আমি চাই return, try/exceptএবং gotoধারাবাহিকতা এর ডেরাইভেটিভ হতে।

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


2
ধারাবাহিকতা একটি ভাষার জন্য একটি ভারী ওজনের ধারণা এবং এগুলিকে অনেকগুলি ভাষা থেকে দূরে সরিয়ে রাখার যথেষ্ট কারণ রয়েছে।
ডেভিড থর্নলি

আমি একমত নই; থাকার for, if, else, এবং whileফাংশন হিসাবে তোলে আমাকে অনুমান যে ফাংশন পরামিতি প্রখর রৌদ্রে অর্ডার মূল নির্মান হিসাবে একই আচরণ করে মৃত্যুদন্ড কার্যকর করা প্রয়োজন। অলস মৃত্যুদন্ড কার্যকর করার ক্ষমতা রাখলে ভাল লাগবে।
ডক্টর উইলির অ্যাপ্রেন্টিস

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

1
@ ডায়েটবুদ্ধ: (ধারাবাহিক) আমি ধারাবাহিকতাগুলি খারাপ বলে দিচ্ছি না, আমি বলছি তারা হেভিওয়েট, এবং এগুলি ব্যবহারযোগ্য করে তোলার ফলে ভাষার ক্ষেত্রে প্রভাব রয়েছে, ব্যতিক্রমের মতো কিছু রয়েছে। তদ্ব্যতীত, ধারাবাহিকতা থাকার ফলে লোকেরা কীভাবে ভাষা +++ ব্যবহার করে আবার পরিবর্তন করতে বাধ্য করে, C ++ তে ব্যতিক্রমগুলির মতো। ধারাবাহিকতা সমর্থন করে এমন একটি ভাষা ভাল এবং খারাপ উভয় উপায়ে নয় এমন একটি থেকে আলাদা হবে be
ডেভিড থর্নলি

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

6

লিঙ্কযুক্ত নিবন্ধটি অবশ্যই ডোনাল্ড নুথের এন + 1/2 লুপ সম্পর্কে সঠিকভাবে পেয়েছে । সি / সি ++ / জাভাতে প্রকাশিত:

for (;;) {
  get next element;
  if (at the end) break;
  process the element;
}

এটি কোনও ফাইলের লাইন বা অক্ষরগুলি পড়ার জন্য, আপনি যদি ইওএফ পৌঁছেছেন কিনা তা পরীক্ষা করে এবং তারপরে প্রক্রিয়াজাতকরণের জন্য এটি দরকারী। আমি প্যাটার্নটি for(;;)..if(..)break;দেখতে এটির অভ্যস্ত যে এটি আমার কাছে বুদ্ধিমান। (নাইট প্রবন্ধটি পড়ার আগে আমি সাহিত্যের প্রোগ্রামিং বইটিতে পুনরায় ছাপা হয়েছিল, এটি "wtf?" হিসাবে ব্যবহৃত হত)

নথ কীওয়ার্ডগুলির পরামর্শ দিয়েছিলেন loop/while/repeat:

loop:
  S;
while C:
  T;
repeat

শূন্য বা আরও বেশি স্টেটমেন্টের সিরিজ Sএবং যেখানে বুলিয়ান শর্ত হিসাবে স্থানধারক Tএবং Cসেখানে। যদি কোনও Sবিবৃতি না থাকে তবে এটি একটি সময় লুপ হবে এবং যদি কোনও Tবিবৃতি না থাকে তবে এটি ডু লুপ হবে।

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

একই নিবন্ধে, নুথ একটি সিগন্যালিং মেকানিজমটির পরামর্শ দিলেন যা ব্যতিক্রম ছোঁড়া / ধরার স্থানীয় সংস্করণ হবে (গোটো ব্যবহারের বিকল্প হিসাবে)।

আমার জন্য? আমি জাভা টেল-কল অপ্টিমাইজেশান সমর্থন করি, যাতে আমি প্রয়োজন হিসাবে যে কোনও সাধারণ নিয়ন্ত্রণ কাঠামো প্রকাশ করতে পারি ।


আপডেট: আমি উল্লেখ করতে ভুলে গেছি যে অনেক সি / সি ++ / জাভা প্রোগ্রামার শর্তে এমবেডেড অ্যাসাইনমেন্ট ব্যবহার করে এটিকে ঘিরে রাখে while:

while ((c = getc(f)) != -1) {
   T;
}

Knuth এর কনস্ট্রাক্ট থেকে পদ ব্যবহার করে, এই মঞ্জুরিযোগ্য যখন Sএবং Cএকটি একক অভিব্যক্তি একত্রিত করা যেতে পারে। কিছু লোক উপরের এম্বেড করা অ্যাসাইনমেন্টটি দেখতে ঘৃণা করেন, আবার কেউ কেউ উপরের এম্বেডটি দেখে ঘৃণা breakকরেন for (;;)। তবে কখন Sএবং Cএকত্রিত করা যায় না, যেমন যখন Sএকাধিক বিবৃতি দেওয়া হয়, for (;;)কোডটি পুনরাবৃত্তি না করেই একমাত্র বিকল্প। অন্য বিকল্পটি হ'ল কোডটির নকল করা S:

S;
while (C) {
  T;
  S;
}

নোথের loop/while/repeatবিকল্পটি আরও ভাল বলে মনে হচ্ছে।


সেই লুপ-যখন-পুনরাবৃত্তি পুরোপুরি দেখতে প্যাসকেল repeat-untilলুপের মতো দেখায় ।
ম্যাসন হুইলারের

@ মেসন: পার্থক্যটি হ'ল দুটি স্থানে আপনি বিবৃতি যুক্ত করতে পারেন এবং আপনার শর্তটি কেবল একটি নয়।
ম্যাকনিল

ওহ, আমি কি ঘটছে তা দেখতে পাচ্ছি। হ্যাঁ, এটি আকর্ষণীয় ...
ম্যাসন হুইলারের

এএনএসআই বেসিকের একটি ছিল do while ... loop until- পূর্বশর্ত এবং উত্তরোত্তর উভয়ই alচ্ছিক এবং আমি (অস্পষ্টভাবে) উভয়কে একটি লুপে ব্যবহার করার কথা মনে করি। আপনার মধ্য-শর্তের জন্য, অ্যাডা আছে exit when ...;। এর মূল সুবিধাটি if ... break;হ'ল আপনি exit loopname when ...;একসাথে একাধিক (তবে সমস্ত প্রয়োজন নয়) নেস্টেড লুপগুলি থেকে বেরিয়ে আসতে লিখতে পারেন । সম্ভবত, বিরতির চেয়ে কিছুটা বেশি দৃশ্যমান।
স্টিভ 314

মজার ব্যাপার. আদার ঠিক সেই বৈশিষ্ট্য রয়েছে।
জন আর স্ট্রোহম

6

বিসিপিএল ভাষার একটি valueofপ্রকাশ ছিল যা বিবৃতিগুলির ক্রমকে একক অভিব্যক্তিতে পরিণত করতে ব্যবহৃত হতে পারে:

foo(a, b, valueof {some series of statements; resultis v});

যেখানে some series of statementsকিছু হতে পারে এবং পুরো valueofমূল্যায়ন করে v

এটি যখন জাভাতে কার্যকর হতে পারে যখন আপনি কোনও কল করার জন্য কোনও যুক্তি গণনা করতে হবে this()বা super()(যার প্রয়োজন আগে এর আগে কিছু হয় না)। অবশ্যই, আপনি কেবল একটি পৃথক পদ্ধতি লিখতে পারেন, তবে আপনার যদি প্রসঙ্গের জন্য অনেক স্থানীয় মান পাস করার প্রয়োজন হয় তবে এটি একটি ব্যথা হতে পারে।

আপনি যদি finalপ্রয়োজনীয় ভেরিয়েবলগুলির জন্য ব্যবহার করতে সক্ষম হন তবে আপনি valueofবেনামে অভ্যন্তরীণ ক্লাসগুলি ব্যবহার করে ইতিমধ্যে জাভাতে একটি করতে পারেন :

foo(a, b, new Object(){String valueof(){
    String v ...; some series of statements; return v;}}.valueof());

1
জিসিসির এর জন্য একটি এক্সটেনশন রয়েছে - ({ statement1; statement2; ...; result-expr; })। আমি অন্য কোথাও এরকমও দেখেছি, কিন্তু কোথায় ছিল তা আমার মনে নেই। সম্ভবত বিসিপিএল থেকে সমস্ত অনুলিপি করা হয়েছে।
স্টিভ 314

6
unless(condition) {
  // ...
}

একই জিনিস করে:

if(!condition) {
  // ...
}

repeat {
  // ...
} until(condition)

একই জিনিস করে:

do {
  // ...
} while(!condition)

আপনি লিস্পে যেতে চাইতে পারেন ...
ডুরোস

1
বা রুবি, এটির জন্য অনুরূপ সিনট্যাক্স রয়েছে unless
জোশ কে

2
বেশ পার্লিশ দেখাচ্ছে। এটি করার একাধিক উপায় রয়েছে।

2
@ স্টিভ 314 আপনাকে অবশ্যই একটি ভুল ব্রেস শৈলী ব্যবহার করতে হবে । ;-)
অরব্লিং

1
@ অর্বলিং - মোটেও নয়। অন্য প্রত্যেকে একটি ভুল ব্রেস শৈলী ব্যবহার করে।
স্টিভ 314

5

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

for (String s, Integer i : stringsSet, integersSet) {
    // use the pair (s, i)
}

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

দুটি সেট যদি একই আকার না হয় তবে এটি একটি ব্যতিক্রম ছুঁড়ে ফেলতে পারে বা elseআকারের মধ্যে পার্থক্য রয়েছে এমন সিগন্যাল দেওয়ার জন্য লুপের পরে আপনার থাকতে পারে ।

স্বাভাবিকভাবেই, আপনি তিন বা ততোধিক তালিকার নীচে যাওয়ার জন্য এটি সাধারণ করতে পারেন।


আপডেট: কারটিশিয়ান পণ্যটি পুনরাবৃত্তিযোগ্যদের মধ্যে করাও দরকারী:

for (String s, Integer i : stringsSet * integersSet) {
    // use the pair (s, i), each s with each i
}

যা নেস্টেড লুপগুলি ছাড়া আর কিছুই হবে না:

for (String s : stringsSet) {
    for (Integer i : integersSet) {
        // use the pair (s, i), each s with each i
    }
}

আমি কিছুটা উদ্বিগ্ন যে আমি এখানে দুটি প্রদত্ত স্বীকৃতি দিয়েছি যে কেবলমাত্র একটি একক চরিত্রের পরিবর্তন সহ জোড় সংখ্যার মধ্যে একটি O (n) এবং O (n ^ 2) পার্থক্য রয়েছে।


2
পাইথনে এখানে জিপ এবং জিপ_লম্বেষ্ট রয়েছে যা এটি করে।
পিলমুনচার

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

1
এই দুটি মামলা স্কালায়: পেস্ট.পোকো.আর.গো
শো

1
কার্টেসিয়ান পণ্য সম্পর্কিত: আবার, পাইথন এটি আছে। for a, b, c in itertools.product(iter1, iter2, iter3):আপনাকে অলসভাবে মূল্যায়িত কার্টেসিয়ান পণ্য দেয়। ওটা কী? আপনি কোনও প্রদত্ত পুনরাবৃত্তির ক্রম এবং সংমিশ্রণ চান? itertools.permutations, itertools.combinations
অ্যারোনস্টার্লিং

1
হাস্কেল দৃষ্টিকোণ: প্রথম কেস এবং তালিকার বোঝার জন্য "জিপউইথ" ব্যবহার করুন বা দ্বিতীয়টির জন্য তালিকা মনড। পাইথন / স্কালার এক্সপামলেসগুলির মতো তবে আরও মার্জিত। :)
লেনি প্রোগ্রামাররা

5

তথাকথিত "ডিজকস্ট্রার লুপ" (এটি "ডিজকস্ট্রার রক্ষিত লুপ" নামেও পরিচিত) রয়েছে। এটি গার্ডেড কমান্ড ল্যাঙ্গুয়েজে (জিসিএল) সংজ্ঞায়িত হয়েছিল । উপরের উইকিপিডিয়া নিবন্ধে synt অনুচ্ছেদে পুনরাবৃত্তি: করুন সম্পর্কে আপনি সিনট্যাক্স এবং শব্দার্থ সম্পর্কে কিছু তথ্য পেতে পারেন ।

আজকাল আমি আসলে একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ জানি যা সরাসরি এই নিয়ন্ত্রণের অগ্রযাত্রাকে সমর্থন করে। এটি ওবেরন -07 (পিডিএফ, 70 কেবি)। এবং এটি "বিবরণীর লুপ" সমর্থন করে বিবৃতি আকারে। বিভাগ 9.6 দেখুন। উপরের পিডিএফ-তে বিবৃতি দেওয়ার সময়।

WHILE m > n DO m := m – n 
ELSIF n > m DO n := n – m 
END

পিএস এটি আমার এসও উত্তরের অনুলিপি ।


দেখে মনে হচ্ছে মডেল চেকার স্পিনেও এই কনস্ট্রাক্ট রয়েছে, একই রকম শব্দার্থক এবং মূলত অভিন্ন সিনট্যাক্স সহ।
j_random_hacker

4

অন্তর্নির্মিত ব্যাকট্র্যাকিংয়ের সাথে আইকন-শৈলীর এক্সপ্রেশন।

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

x = (a / b) else c;

শূন্য দ্বারা বিভাগ মত বিফল ক্ষেত্রে পরিচালনা করতে।

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

আমি সবসময় ভেবেছিলাম তাদের ifআর কোনও অংশ ছাড়াই তাদের মত প্রকাশ করা উচিত - if (condition, success-value)একধরণের জিনিস, শর্তটি মিথ্যা বলে প্রত্যাবর্তন করলে ব্যাকট্র্যাকিং - এবং অদ্ভুত তুলনা ফেলে দিন।

আমি মনে করি সম্পাদনা - প্রকৃতপক্ষে। দুটি আর্গুমেন্টের সাথে একটি তুলনা হয় সফল হয় বা ব্যর্থ হয় - এটি ফেরতের জন্য কোনও নতুন মান গণনা করে না। সুতরাং যখনই সফল, কি করে তা ফেরত? উত্তর - একটি যুক্তি। তবে আপনি যদি লিখেন তবে a > bফিরে আসার যৌক্তিক যুক্তি কোনটি - aবা b? আর b < aপরিবর্তে লিখলে কী হবে? আমি মনে করি এটি সর্বদা সঠিক যুক্তি ফিরিয়ে দিয়েছে, যা যে কোনও কিছুর চেয়ে অনেক বেশি বোঝা যায়, তবে এটি এখনও আমার কাছে সাধারণত ভুল তর্ক হিসাবে মনে হয়।


4

এটি কেবল একটি সাধারণ ধারণা এবং বাক্য গঠন:

if (cond)
   //do something
else (cond)
   //do something
also (cond)
   //do something
else
   //do something
end

ALSO শর্তটি সর্বদা মূল্যায়ন করা হয়। ELSE যথারীতি কাজ করে।

এটি ক্ষেত্রে ক্ষেত্রেও কাজ করে। সম্ভবত বিরতি বিবৃতিটি হ্রাস করার একটি ভাল উপায়:

case (exp)
   also (const)
      //do something
   else (const)
      //do something
   also (const)
      //do something
   else
      //do something
end

হিসাবে পড়া যেতে পারে:

switch (exp)
   case (const)
      //do something
   case (const)
      //do something
      break
   case (const)
      //do something
   default
      //do something
end

আমি জানিনা এটি পড়ার জন্য দরকারী বা সহজ কিনা তবে এটি একটি উদাহরণ।


3

ক্রমাগত পাসিং স্টাইলটি মনে আসে। তারপরে অবশ্যই আপনি টেইল কল অপটিমাইজেশনও করতে চান ।


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

1
অবশ্যই এটি একটি নিয়ন্ত্রণ কাঠামো। এটি 'ইফ' বা 'ফর' এর মতো কীওয়ার্ডের সাথে আসে না, তবে নিয়ন্ত্রণ প্রবাহকে কাঠামোর রূপ হিসাবে (সুতরাং, নিয়ন্ত্রণ কাঠামো)। এমনকি অনেক সংকলক এটি পর্দার আড়ালে ব্যবহার করেছেন। এবং এটি FL- তেও সীমাবদ্ধ নয়। যদিও আপনার প্রথম শ্রেণীর অবজেক্ট হিসাবে ফাংশন প্রয়োজন।
পিলমুনচারে

1
আপনি আজকাল সি এবং সি ++ এ টেল কল অপ্টিমাইজেশন পান তবে আইএমও এটি পয়েন্টটি মিস করে mis পয়েন্ট যে এটা হল একটি অপ্টিমাইজেশান। স্কিমে, একটি আসল পুচ্ছ কল স্পষ্ট। বিশেষত সি ++ এ, অনেক কিছুই বোঝাতে পারে আপনার লেজ কল কোনও লেজ কল নয়। এবং স্ট্যাক ওভারফ্লো মানে আপনার অ্যাপ্লিকেশনটি নষ্ট হয়ে গেছে। আইএমও, এখানে একটি goto return ...;বিবৃতি দেওয়ার মতো কিছু হওয়া উচিত , যা টেইল-কলকে স্পষ্ট করার উদ্দেশ্য করে, তাই যদি সংকলক এটি পুনরাবৃত্তি করতে না পারে তবে এটি একটি ত্রুটি।
স্টিভ 314

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

1
@ মাইক - এটাই আমার বক্তব্য। যদি আপনি পুনরাবৃত্ত কোডিং স্টাইল ব্যবহার করেন, লেজ কলটি "অপ্টিমাইজেশন" ছাড়াই আপনার কোডটি সম্ভাব্যভাবে নষ্ট হয়ে গেছে, কারণ স্ট্যাক ওভারফ্লো একটি ত্রুটি। সি ++ এ এটি একটি অপ্টিমাইজেশন - সংকলকটির জন্য অপ্টিমাইজেশন করা যাতে আপনার ভাল না হয় তবে আপনি তাদের উপর নির্ভর করতে পারবেন না। আপনি যদি পুনরাবৃত্ত শৈলীতে লেখার স্বাধীনতা চান তবে স্ট্যাকের গভীরতার সমস্যা নিয়ে চিন্তা করতে চান না, লেজ কল বর্জন অপ্টিমাইজেশন নয় - এটি একটি নির্ভুলতার বিষয় ness যদি কোনও কিছু কোড করার জন্য পুনরাবৃত্তি হ'ল উপায়, আপনার এটি করতে সক্ষম হওয়া উচিত - স্ট্যাক ওভারফ্লো সম্পর্কে চিন্তা করার দরকার নেই।
স্টিভ 314

3

বিরামবিহীন থ্রেড ব্রাঞ্চিং, এটি একটি ফাংশনের মতো বাক্য গঠন করে তবে একটি পৃথক থ্রেডে চালিত করে এবং প্রাথমিকভাবে এটি পাস করা হয়নি এমন ডেটা অ্যাক্সেস করতে পারে না।

branch foo(data, to, be, processed){
    //code
    return [resulting, data]
}

যখন একটি শাখা বলা হয় এটি তাত্ক্ষণিকভাবে একটি হ্যান্ডেল ফিরিয়ে দেবে।

handle=foo(here, is, some, data)

কাজটি সম্পন্ন হয়েছে কিনা তা পরীক্ষা করতে হ্যান্ডেলটি ব্যবহার করা যেতে পারে।

handle.finished() //True if the execution is complete

ফলশ্রুতিটি সম্পূর্ণ হওয়ার আগে যদি ফলাফলটির অনুরোধ করা হয় তবে মূল থ্রেডটি কেবল অপেক্ষা করবে।

[result, storage]=handle.result()

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


সিল্কটি দেখুন, এটি সি: en.wikedia.org/wiki/Cilk এর একটি খুব পরিষ্কার এবং সাধারণ বর্ধন । আমি জানি না এটির কোনও handle.finished()পরীক্ষা আছে কিনা , spawnএবং sync90% সমান্তরাল প্রোগ্রামিং কাজের জন্য আপনার প্রয়োজন।
j_random_hacker

3
if (cond)
   //do something
else (cond)
   //do something
else (cond)
   //do something
first
   //do something
then
   //do something
else (cond)
   //do something
else
   //do something
end

3 টি শর্তাবলীর মধ্যে কোনওটির যদি সত্য হিসাবে মূল্যায়ন করা হয় তবে FIRST এবং THEN ব্লকগুলি চলে। কন্ডিশনাল ব্লকের আগে প্রথম ব্লক চলে এবং শর্তসাপেক্ষে ব্লকটি চলার পরে তারা চলে।

ELSE- এর শর্তসাপেক্ষ বা চূড়ান্ত লেখার পরে FIRST এবং THEN বিবৃতি এই ব্লকগুলি থেকে স্বতন্ত্র।

এটি পড়তে পারে:

if (cond)
   first()
   //do something
   then()
else (cond)
   first()
   //do something
   then()
else (cond)
   first()
   //do something
   then()
else (cond)
   //do something
else
   //do something
end


function first()
   //do something
return
function then()
   //do something
return

এই ফাংশনগুলি পড়ার জন্য কেবল একটি ফর্ম। তারা সুযোগ তৈরি করবে না। এটি আরও বেসিক থেকে গসব / রিটার্নের মতো।

আলোচনার বিষয় হিসাবে দরকারীতা এবং পাঠযোগ্যতা।


2

আমি মাঝে মাঝে নিজেকে একটি লুপ লিখতে দেখি যা প্রথম পুনরাবৃত্তির সময় কিছু আলাদা করার দরকার হয়। উদাহরণস্বরূপ, <td> ট্যাগগুলির পরিবর্তে <ম> ট্যাগ প্রদর্শন করা হচ্ছে।

আমি বুলিয়ান পতাকা দিয়ে এই পরিস্থিতিটি পরিচালনা করি। এটার মতো কিছু:

first = true

while (some_condition)
    if (first)
        do_something
        first = false
    else
        do_something_else

এটি firstবেশিরভাগ সময় মিথ্যা হতে চলেলে প্রতিটি পুনরাবৃত্তির মান পরীক্ষা করা নির্বোধ বলে মনে হয় ।

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


এসও প্রশ্নের একই ধারণা রয়েছে তবে মানগুলির ক্ষেত্রে "তত্ক্ষণ" অপারেটরটি ব্যবহার করা উচিত। এইভাবে, আপনার সম্ভবত ডুপ্লিকেট কোড নেই। উদাহরণস্বরূপprint(out, first "<th>" then "<td>")
ম্যাকনিল

1
ভাল উপায় হয় হয় পুনরাবৃত্তি +1 শুরু করা।
জোশ কে

1
সাধারণ ক্ষেত্রে হ্যান্ডলিংয়ের মধ্য দিয়ে লুপিং হয়, উদাহরণস্বরূপ কমা বিভাজক সহ আইটেম তালিকা করা। কঠোরভাবে, এটি if (!first) gimme-a-comma ();কিন্তু একই জিনিস। আমার একটি আপত্তি ছিল, যদিও - যদি আপনি এটি যথাযথভাবে গুটিয়ে রাখেন তবে আপনি পাইথন স্ট্রিংয়ের যোগদানের পদ্ধতি মতো জিনিসগুলি শেষ করেন - তবে প্রায়শই আপনার মৌলিক প্যাটার্নের প্রয়োজন হয়, অন্তর্নিহিত লুপটি প্রায়শই পুনরায় লেখার প্রয়োজন হয় না।
স্টিভ 314

জোশ যেমন বলেছেন, অবশ্যই লুপের বাইরে প্রথম আইটেমটি টানাই বৈধ। কমা-বিভাজক ক্ষেত্রে এর অর্থ সদৃশ কোড, তবে এটি একটি সদৃশ ফাংশন কল হতে পারে। ব্যক্তিগতভাবে, আমি এর অদক্ষতা পছন্দ করি if (!first), তবে মাইক্রো-আশাবাদীরা শাখা-পূর্বাভাস আপত্তি তুলতে পারে।
স্টিভ 314

1
@ ব্য্যারি ব্রাউন: লুপের 1 ম পুনরুক্তিটি আনোলল করা বুলিয়ান পতাকা চেক করার চেয়ে দ্রুত বা নাও হতে পারে। একটি শালীন শাখার ভবিষ্যদ্বাণী 1 ম 2 টি পুনরাবৃত্তিকে সবচেয়ে খারাপভাবে ভবিষ্যদ্বাণী করবে, আমি পূর্বাভাস দিয়েছি :) আমি ব্যবহার করতে পছন্দ করব if (!first)এবং একটি অনুকূলিতকরণ সংকলকটি সিদ্ধান্ত নিতে দিন যে লুপের দেহটি এত ছোট যে অনিয়োলিং এবং পরিত্রাণ পাওয়া firstনেট জয়।
j_random_hacker

1

[স্ট্যাকওভারফ্লোতে আমার নিজের উত্তর থেকে অনুলিপি করা হয়েছে]


ignoring - কোডের একটি নির্দিষ্ট ব্লকে ব্যতিক্রমগুলি উপেক্ষা করার জন্য।

try {
  foo()
} catch {
  case ex: SomeException => /* ignore */
  case ex: SomeOtherException => /* ignore */
}

একটি উপেক্ষা কন্ট্রোল কনস্ট্রাক্টের সাহায্যে আপনি এটিকে আরও সংক্ষিপ্তভাবে এবং আরও পড়ার মতো লিখতে পারেন:

ignoring(classOf[SomeException], classOf[SomeOtherException]) {
  foo()
}

[স্কালা এটি ব্যবহারকারীর নিয়ন্ত্রণ প্যাকেজে, তার মান লাইব্রেরিতে এটি (এবং আরও অনেকগুলি ব্যতিক্রম পরিচালনা পরিচালনা নিয়ন্ত্রণ) সরবরাহ করে। ]


4
ব্যতিক্রমগুলি উপেক্ষা করা উচিত নয়।
জোশ কে

1
এটি ব্যতীত, প্রসঙ্গে, ব্যতিক্রম ত্রুটি নাও হতে পারে।
স্টিভ 314

1
@ জোশ, @ স্টিভ: এমন কিছু ঘটনা রয়েছে যখন আপনি ব্যতিক্রমগুলি উপেক্ষা করতে চান। এই জাতীয় কিছু থিমটি দেখুন some
অনুপস্থিতি

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

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

1

পরিবর্তে:

switch(myEnum) {
  case MyEnum.Val1: do1(); ...
  case MyEnum.Val2: do2(); ...
....

পাইথনটি করুন, বা এখন সি # উপায়েও করুন:

action = val2func[myEnum]
action()

স্কালায় প্রচুর নতুন বৈশিষ্ট্য রয়েছে।

শেষ অবধি, ক্লোজারের মতো ভাষাগুলিকে অতিরিক্ত কার্যকারিতা সরবরাহ করার জন্য বাড়ানো যেতে পারে।


1
সি এটিও করতে পারে। এবং পাস্কেল সম্ভবত সেই সমস্ত 70s / 80s / 90s এর ভাষা। ফাংশনগুলির একটি অ্যারে ফাংশন পয়েন্টারগুলির একটি অ্যারে হয়ে যায়, তবে এটি কোনও বড় বিষয় নয়। যখন আপনি অনামী ফাংশনগুলি পেয়েছেন এটি যেখানে সহজ হয় - আপনি জানেন, লিস্প, এমএল-এর মতো ...
স্টিভ 314

স্টিভ 314 - সংশোধন - এটি একটি অভিধানের উদাহরণ যা কোনও ফাংশনের কোনও মানকে মানচিত্র করে। এখানেই 70s / 80s / 90 এর দশকের বেশিরভাগ জিনিসের চেয়ে জিনিসগুলি কিছুটা পরিষ্কার হয়ে যায়।
কাজ

1

আমার দুটি ধারণা আছে।

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

try {
    // Save something
} catch (Exception e) {
    // Something we do for all Exceptions
    catch (ProcessingException e) {
        // Something we do for all Processing exceptions
        catch (DBExcpetion e) {
            // DBExceptions are a subclass of ProcessingException
        }
        catch (BusinessRuleException e) {
            // BusinessRuleExceptions are also a subclass of ProcessingException
        }
    }
    // Something we do after specific sub class Exceptions
 }

ওয়েব প্রোগ্রামিংয়ে আমি প্রায়শই নিজেকে প্রায়শই এই জাতীয় কিছু করতে দেখি (এটি আসল উদাহরণ নয় তাই কাল্পনিক কেসগুলি বিশ্লেষণ করবেন না):

Account a = getSavedAccount();
if (a == null) {
    a = getAccountFromSessionId();
}
if (a == null) {
    a = getAccountFromCookieId();
}
if (a == null) {
    a = createNewAccount();
}

জাভাস্ক্রিপ্টে (ভাল, ECMAScript, এবং অন্যরাও যেগুলির সাথে আমি অপরিচিত তা) যেহেতু কোনও মান শর্ত হিসাবে মূল্যায়ন করা যায়, ||সাহায্য করতে পারে।

var a = getAFromLocation1() || getAFromLocation2() || default;

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


পাইথন আপনার মতো কিছু করে মূল্যায়ন, কিন্তু যখন এটি অবশেষে এটির শর্তসাপেক্ষ অভিব্যক্তি x if c else yসিনট্যাক্স পেল , এর একটি প্রধান কারণ ঘটল কারণ এই শব্দার্থক শব্দগুলির ব্যবহার করার জন্য প্রচুর পরিমাণে অভিব্যক্তিগুলি ছিল ||এবং &&তারা সূক্ষ্মভাবে বগিযুক্ত ছিল। আইআইআরসি একটি সাধারণ ক্ষেত্রে হ'ল একটি মান (যেমন শূন্য) অ্যাপ্লিকেশন হিসাবে বিবেচিত হওয়ার জন্য এটি বৈধ ছিল false, এইভাবে বাতিল করা হয়েছে যাতে পরিবর্তে একটি অবৈধ ফ্যালব্যাক ব্যবহার করা হত। যাইহোক - আমার উত্তর ডাব্লুআরটি আইকন প্রোগ্রামিং ভাষা দেখুন, যার মত প্রকাশ হতে পারে get1() else get2() else default
স্টিভ 314

1

সাধারণীকৃত সুইচ উপরে বলেছে:

 switch(x){
  predicate1:
     dosomething();
  predicate2:
     dosomethingelse();
 }

হাসকেলে:

  switch' :: a -> [(a -> Bool, b)] -> b
  switch' a [] = undefined
  switch' a (f,b):xs = if f a
                     then b
                      else switch' a xs

0

সি # তে আমি সাধারণ ব্যবহার করতে চাই switch () { ... }, তবে এই জাতীয় অভিব্যক্তিগুলির সাথে প্রসারিত :

switch (value)
{
  // string-based operators:
  case begins "Maria": // to catch Maria Carey
    break;
  case ends "Washington": // to catch George Washington
    break;
  case like "ph": // to catch Phil, Phillip, Sophie
    break;
  case between "Aaron" and "April": // to catch all names between
    break;

  // use non-static variables in case expression:
  case Dao.GetDefaultBabyName():
    break;

  // continuable cases without breaking
  case "John":
    bonus = 25;
  case "Peter":
    salary = 500;
    break;

  // jumps between cases
  case "Aleron":
    // do something
    break;
  case "Bella":
    // do something
    jump "Aleron";
    break;

}

ইত্যাদি। সংখ্যা বা অন্যান্য ধরনের সঙ্গে একই (যে সমর্থন IComparable, IConvertible, ...)

এটি আমার কোডটিকে আরও লকোনিক এবং পঠনযোগ্য করে তুলতে পারে।


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

0

এটি মজাদার প্রশ্ন, যেমন @ ম্যাকনিল বলেছেন is

আমার প্রিয় অস্বাভাবিক নিয়ন্ত্রণ কাঠামো, যা আমি (নম্র কাশি) আবিষ্কার করেছি তা ডিফারেন্সিয়াল এক্সিকিউশন

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

সাধারণত আমি এটি সি বা সি ++ তে ম্যাক্রো দ্বারা প্রয়োগ করি। সি # তে আমাকে হাত বাড়ানোর বিবৃতি দিয়ে করতে হবে। এটি একটি ব্যথা, কিন্তু এটি কাজ করে।

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


0

"Ditionতিহ্যবাহী" নিয়ন্ত্রণ কাঠামো যেমন forশ্রমজীবী ​​মানুষকে নিয়ন্ত্রণ করা এবং তাকে ক্ষমতাসীন পুঁজিবাদী অভিজাতদের দুর্নীতিগ্রস্থ আদর্শের অধীনে রাখার মতো। এজন্য আমি এর ph0rপরিবর্তে বিকল্প নিয়ন্ত্রণ কাঠামো ব্যবহার করি । এটি এর মতো for, তবে আরও র‌্যাডিক্যাল: আপনি ph0rকোনও কর্পোরেট বিএস-কে স্লুট করে স্যুট এবং টাই পরাবেন না। ph0rএটা বাস্তব রাখে, মানুষ।

শক্তির যুদ্ধ!


0

সহজ forলুপ-

for(100)
{
    //Will run for 100 times
}


for(i)
{
    //Will run for i times while i must be a positive integer
}


for(i as a)
{
    //Will run for i times while i must be a positive integer
    //and a is the incremental loop variable starting from 0 and 
    //scoped within the loop
}


for(i as a=2)
{
    //Will run for i times while i must be a positive integer
    //and a is the incremental loop variable starting from 2 and 
    //scoped within the loop
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.