এই স্পষ্ট এবং প্রাসঙ্গিক ক্ষেত্রে যখন ব্যবহার করা হয় তখন গোটোতে এত খারাপ কী হবে?


40

আমি সবসময়েই জানি যে gotoএটি খারাপ কিছু, কোথাও একটি বেসমেন্টে লক থাকে যা ভাল কখনও দেখা যায় না তবে আমি আজ একটি কোড উদাহরণে চলে এসেছি যা ব্যবহারের জন্য সঠিক ধারণা তৈরি করে goto

আমার একটি আইপি রয়েছে যেখানে আমার আইপিগুলির তালিকার মধ্যে রয়েছে কিনা তা পরীক্ষা করে দেখতে হবে এবং তারপরে কোডটি নিয়ে এগিয়ে যান, অন্যথায় একটি ব্যতিক্রম ছুঁড়ে ফেলুন।

<?php

$ip = '192.168.1.5';
$ips = [
    '192.168.1.3',
    '192.168.1.4',
    '192.168.1.5',
];

foreach ($ips as $i) {
    if ($ip === $i) {
        goto allowed;
    }
}

throw new Exception('Not allowed');

allowed:

...

আমি যদি ব্যবহার না gotoকরি তবে আমাকে কিছু ভেরিয়েবল ব্যবহার করতে হবে

$allowed = false;

foreach ($ips as $i) {
    if ($ip === $i) {
        $allowed = true;
        break;
    }
}

if (!$allowed) {
    throw new Exception('Not allowed');
}

আমার প্রশ্নটি এ gotoজাতীয় সুস্পষ্ট এবং ইমো প্রাসঙ্গিক ক্ষেত্রে ব্যবহার করার সাথে এত খারাপ কী ?


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
maple_shaft

উত্তর:


120

গোটো নিজেই কোনও তাত্ক্ষণিক সমস্যা নয়, এটি এমন অন্তর্ভুক্ত রাষ্ট্রীয় মেশিন যা লোকেদের সাথে এটি প্রয়োগ করে implement আপনার ক্ষেত্রে, আপনি এমন কোড চান যা আইপি ঠিকানাটি অনুমোদিত ঠিকানাগুলির তালিকায় রয়েছে কিনা তা পরীক্ষা করে

if (!contains($ips, $ip)) throw new Exception('Not allowed');

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

আপনি যদি কোডটি আপনার প্রধান প্রোগ্রামটিতে চেক করে রাখেন তবে আপনি এটি হারাবেন। আপনি পরিবর্তনীয় অবস্থা প্রবর্তন করুন, হয় স্পষ্টভাবে:

$list_contains_ip = undef;        # STATE: we don't know yet

foreach ($ips as $i) {
  if ($ip === $i) {
      $list_contains_ip = true;   # STATE: positive
      break;
  }
                                  # STATE: we still don't know yet, huh?                                                          
                                  # Well, then...
  $list_contains_ip = false;      # STATE: negative
}

if (!$list_contains_ip) {
  throw new Exception('Not allowed');
}

যেখানে $list_contains_ipআপনার একমাত্র রাষ্ট্র পরিবর্তনশীল, বা স্পষ্টভাবে:

                             # STATE: unknown
foreach ($ips as $i) {       # What are we checking here anyway?
  if ($ip === $i) {
    goto allowed;            # STATE: positive
  }
                             # STATE: unknown
}
                             # guess this means STATE: negative
throw new Exception('Not allowed');

allowed:                     # Guess we jumped over the trap door

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

if ($ip =~ /:/) goto IP_V6;
if ($ip =~ /\//) goto IP_RANGE;
if ($ip =~ /^10\./) goto IP_IS_PRIVATE;

foreach ($ips as $i) { ... }

IP_IS_PRIVATE:
   foreach ($ip_priv as $i) { ... }

IP_V6:
   foreach ($ipv6 as $i) { ... }

IP_RANGE:
   # i don't even want to know how you'd implement that

ALLOWED:
   # Wait, is this code even correct?
   # There seems to be a bug in here.

এবং যে কোডটি ডিবাগ করতে হবে সে আপনাকে এবং আপনার বাচ্চাদের অভিশাপ দেবে।

ডিজকস্ট্র এটিকে এভাবে রাখে:

বিবৃতিতে যান এর নিরবচ্ছিন্ন ব্যবহারের তাত্ক্ষণিক পরিণতি হিসাবে প্রক্রিয়াটির অগ্রগতি বর্ণনা করার জন্য একটি অর্থবহ সমন্বয়ের একটি সার্থক সেট খুঁজে পাওয়া মারাত্মক শক্ত হয়ে পড়ে।

এবং সে কারণেই গোটোকে ক্ষতিকারক হিসাবে বিবেচনা করা হয়।


22
এই $list_contains_ip = false;বিবৃতিটি ভুল জায়গায় রয়েছে বলে মনে হচ্ছে
বার্গি

1
নুড়ি ভর্তি একটি ব্যাগ সহজ, আমি তাদের ধরে রাখার জন্য একটি সুবিধাজনক ব্যাগ পেয়েছি। : পি
whatsisname

13
@ বার্গি: আপনি ঠিক বলেছেন। এটি দেখায় যে এই বিষয়গুলিতে গোলমাল করা কতটা সহজ।
ওয়ালেনবারন

6
@ ওয়াটসিসনাম bag ব্যাগটি ধরে রাখার জন্য তাকে একটি ফাংশন / শ্রেণি / প্যাকেজ বলা হয়। গোটোস ব্যবহার করা তাদের জাগ্রত করা এবং ব্যাগটি ফেলে দেওয়ার মতো।
ফ্যালকো

5
আমি ডিজকস্ট্রার উক্তিটি ভালবাসি, আমি এটি সেভাবে শুনিনি তবে এটি সত্যিই ভাল বিষয়। প্রবাহের পরিবর্তে বেশ উপরে থেকে নীচে, হঠাৎ আপনার কাছে এমন কিছু রয়েছে যা এলোমেলোভাবে পুরো পৃষ্ঠায় লাফিয়ে উঠতে পারে। এটি সংক্ষেপে লাগানো বেশ চিত্তাকর্ষক।
বিল কে

41

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

if (!in_array($ip, $ips)) throw new Exception('Not allowed');

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

অবশ্যই আপনার যদি অন্য কোনও পছন্দ না GOTOথাকে তবে আপনি ব্যবহার করেন তবে ফাংশন এবং নিয়ন্ত্রণ কাঠামো দিয়ে যদি একই প্রভাব অর্জন করা যায় তবে এটি পছন্দনীয়।


5
@ জেমস্লারেজ কি it's easier to write good optimizing compilers for "structured" languages.বিস্তৃত যত্ন? একটি পাল্টা উদাহরণ হিসাবে, মরিচা লোকেরা এমআইআর প্রবর্তন করে, সংকলকটিতে একটি মধ্যবর্তী উপস্থাপনা যা বিশেষত লুপগুলি প্রতিস্থাপন করে, চালিয়ে যায়, বিরতি দেয়, এবং গোটোসের সাথে, কারণ এটি পরীক্ষা করা এবং অনুকূলিত করা সহজ।
বিট্রি

6
"আপনার যদি অন্য কোনও পছন্দ না থাকে তবে আপনি GOTO ব্যবহার করেন" এটি অত্যন্ত বিরল। আমি সম্পূর্ণরূপে হাস্যকর বিধিনিষেধের বাইরে বিদ্যমান কোড বা অনুরূপ বাজে কথাগুলি প্রতিরোধকারী এর বাইরে অন্য কোনও পছন্দ নেই এমন ক্ষেত্রে আমি সত্যিই ভাবতে পারি না ।
jpmc26

8
এছাড়াও, আইএমও, gotoপতাকা এবং শর্তসাপেক্ষে ইঁদুরের বাসা দিয়ে একটিকে অনুকরণ করে (ওপি'র দ্বিতীয় উদাহরণ হিসাবে) একটি ব্যবহারকারীর ঝাঁটের তুলনায় খুব কম পঠনযোগ্য goto

3
@ 8 বিট্রি: কাঠামোগত প্রোগ্রামিং উত্স ভাষার জন্য করা হয়, সংকলকের লক্ষ্য ভাষা নয়। নেটিভ কম্পাইলার জন্য টার্গেট ভাষা CPU- র নির্দেশাবলী, যা নিশ্চিতভাবে হয় না "কাঠামোবদ্ধ," প্রোগ্রামিং ভাষা অর্থে।
রবার্ট হার্ভে

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

17

অন্যরা যেমন বলেছে, সমস্যাটি gotoনিজেই নয়; সমস্যা কীভাবে লোকেরা ব্যবহার করে gotoএবং কীভাবে এটি কোড বোঝা ও বজায় রাখা আরও শক্ত করে তুলতে পারে তা নিয়েই সমস্যা।

নিম্নলিখিত কোড স্নিপেট অনুমান:

       i = 4;
label: printf( "%d\n", i );

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

'90 এর দশকের গোড়ার দিকে ফিরে আসার পথে আমাদের কাছে সি কোডের একটি গাদা দেওয়া হয়েছিল যা 3 ডি গ্রাফিকাল ডিসপ্লে চালিত করে এবং এটিকে দ্রুত চালিত করতে বলে। এটি কোডের প্রায় 5000 লাইন ছিল তবে এটি সমস্তই ছিল mainএবং লেখক gotoউভয় দিকেই প্রায় 15 বা এর বেশি শাখা ব্যবহার করেছিলেন। এটি দিয়ে শুরু করা খারাপ কোড ছিল , তবে তাদের উপস্থিতি gotoএটিকে আরও খারাপ করে তুলেছে। নিয়ন্ত্রণ প্রবাহ ধাঁধাতে আমার সহকর্মীকে প্রায় 2 সপ্তাহ সময় লেগেছে। আরও ভাল, সেগুলির gotoফলাফলের ফলে কোডটি নিজের সাথে এত দৃ with়ভাবে মিলিত হয়েছিল যে আমরা কিছু ভঙ্গ না করে কোনও পরিবর্তন করতে পারি না

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

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

তারা দ্রুত হার্ডওয়্যার কিনেছিল।

ব্যবহারের জন্য বোডের নিয়ম goto:

  1. কেবল শাখা এগিয়ে;
  2. বাইপাস নিয়ন্ত্রণ কাঠামো (অর্থাত, একটি শরীরের মধ্যে শাখায় বিভক্ত না না ifবা forবা whileবিবৃতি);
  3. gotoনিয়ন্ত্রণ কাঠামোর জায়গায় ব্যবহার করবেন না

সেখানে যখােন হয় goto হয় সঠিক উত্তর, কিন্তু তারা বিরল (ক গভীরভাবে নেস্টেড লুপ খুঁজে ভঙ্গ সম্পর্কে একমাত্র জায়গা আমি এটা ব্যবহার চাই যায়)।

সম্পাদনা

এই শেষ বিবৃতিটি প্রসারিত করে, এখানে কয়েকটি বৈধ ব্যবহারের ক্ষেত্রে একটি goto। ধরুন আমাদের নিম্নলিখিত ফাংশন রয়েছে:

T ***myalloc( size_t N, size_t M, size_t P )
{
  size_t i, j, k;

  T ***arr = malloc( sizeof *arr * N );
  for ( i = 0; i < N; i ++ )
  {
    arr[i] = malloc( sizeof *arr[i] * M );
    for ( j = 0; j < M; j++ )
    {
      arr[i][j] = malloc( sizeof *arr[i][j] * P );
      for ( k = 0; k < P; k++ )
        arr[i][j][k] = initial_value();
    }
  }
  return arr;
}

এখন, আমাদের একটি সমস্যা আছে - যদি mallocমাঝপথে কোনও কল কল ব্যর্থ হয়? সম্ভবত এটির মতো ঘটনাটি, আমরা আংশিক বরাদ্দকৃত অ্যারেটি ফিরিয়ে দিতে চাই না, বা ত্রুটিযুক্তভাবে আমরা কেবল ফাংশন থেকে জামিন দিতে চাই না; আমরা আমাদের পরে পরিষ্কার করতে এবং কোনও আংশিক বরাদ্দ মেমরি অপসারণ করতে চাই। যে ভাষায় একটি খারাপ বরাদ্দ ব্যতিক্রম ছুঁড়ে, এটি মোটামুটি সোজা - আপনি ইতিমধ্যে যা বরাদ্দ করা হয়েছে তা খালি করার জন্য কেবল ব্যতিক্রম হ্যান্ডলারটি লিখুন।

সি তে, আপনার কাঠামোগত ব্যতিক্রম হ্যান্ডলিং নেই; আপনাকে প্রতিটি mallocকলের রিটার্ন মানটি পরীক্ষা করতে হবে এবং যথাযথ পদক্ষেপ নিতে হবে।

T ***myalloc( size_t N, size_t M, size_t P )
{
  size_t i, j, k;

  T ***arr = malloc( sizeof *arr * N );
  if ( arr )
  {
    for ( i = 0; i < N; i ++ )
    {
      if ( !(arr[i] = malloc( sizeof *arr[i] * M )) )
        goto cleanup_1;

      for ( j = 0; j < M; j++ )
      {
        if ( !(arr[i][j] = malloc( sizeof *arr[i][j] * P )) )
          goto cleanup_2;

        for ( k = 0; k < P; k++ )
          arr[i][j][k] = initial_value();
      }
    }
  }
  goto done;

  cleanup_2:
    // We failed while allocating arr[i][j]; clean up the previously allocated arr[i][j]
    while ( j-- )
      free( arr[i][j] );
    free( arr[i] );
    // fall through

  cleanup_1:
    // We failed while allocating arr[i]; free up all previously allocated arr[i][j]
    while ( i-- )
    {
      for ( j = 0; j < M; j++ )
        free( arr[i][j] );
      free( arr[i] );
    }

    free( arr );
    arr = NULL;

  done:
    return arr;
}

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


আমি এই নিয়ম পছন্দ। আমি এখনও ব্যবহার করা হবে না gotoএমনকি এই অনুযায়ী নিয়ম-আমি এটি ব্যবহার করবেন না সব যদি না তা পাওয়া শাখাবিন্যাস একমাত্র ফর্ম ভাষা-কিন্তু আমি দেখতে পারেন এটা খুব বেশী ডিবাগ করার জন্য একটি দুঃস্বপ্ন হবে না gotoসেগুলি যদি এই নিয়ম অনুসারে লেখা হয়।
ওয়াইল্ডকার্ড ২

যদি আপনাকে গভীরভাবে নেস্ট করা লুপটি ভেঙে ফেলার প্রয়োজন হয় তবে আপনাকে সেই লুপটি অন্য একটি ফাংশন তৈরি করে ফিরে আসতে হবে
বুনিয়াক্লোভেন

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

@ এনজুফা "একটি সফ্টওয়্যার অপ্টিমাইজেশান বিশেষজ্ঞ হিসাবে আমি একমত যে অব্যাহত কাঠামোগত নিয়ন্ত্রণ প্রবাহ একটি লুপের জন্য কম্পাইলারগুলি (এবং মানুষ!) নিক্ষেপ করতে পারে" " - আরও বিস্তারিত? আমি ভেবেছিলাম কার্যত প্রতিটি অপ্টিমাইজ করা সংকলক আজকাল এসএসএকে আইআর হিসাবে ব্যবহার করে যার অর্থ এটি নীচে গোটো-মতো কোড ব্যবহার করছে।
ম্যাকিয়েজ পাইচোটকা

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

12

return, break, continueএবং throw/ catchকোডের অন্য টুকরা সব স্থানান্তর নিয়ন্ত্রণ তারা এবং সব gotos সঙ্গে প্রয়োগ করা যায়নি - - সব মূলত gotos হয় আসলে আমি একটি স্কুল প্রকল্পে তাই একবার করেনি, একটি PASCAL প্রশিক্ষক বলছিলেন কিভাবে অনেক ভালো পাসকাল চেয়ে ছিল কাঠামোর কারণে বেসিক ... সুতরাং আমার বিপরীত হতে হয়েছিল ...

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

বছরের পর বছর ধরে ভাষাগুলিতে যুক্ত হওয়া বেশিরভাগ বৈশিষ্ট্য হ'ল সফটওয়্যারকে আরও রক্ষণাবেক্ষণযোগ্য করে তোলা, সহজে লেখা সহজ নয় (যদিও কিছু ভাষাগুলি সেই দিকে যায় - তারা প্রায়শই দীর্ঘমেয়াদী সমস্যা সৃষ্টি করে ...)।

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

তাই কয়েক বছর ধরে স্প্যাগেটি দুঃস্বপ্নের সাথে মোকাবিলা করার পরে আমরা কেবল "না" বলেছিলাম, একটি সম্প্রদায় হিসাবে আমরা এটি মেনে নেব না - খুব অল্প কিছুটা দূরে থাকলে খুব বেশি লোক এটিকে জড়িয়ে ফেলেন - তাদের সাথে সত্যই এটিই সমস্যা। আপনি সেগুলি ব্যবহার করতে পারেন ... তবে এটি যদি নিখুঁত ক্ষেত্রে হয় তবে পরবর্তী লোকটি ধরে নেবে আপনি একটি ভয়ানক প্রোগ্রামার কারণ আপনি সম্প্রদায়ের ইতিহাস বুঝতে পারেন না।

আপনার কোডটি আরও বোধগম্য করার জন্য আরও অনেকগুলি কাঠামো তৈরি করা হয়েছে: ফাংশনস, অবজেক্টস, স্কোপিং, এনক্যাপসুলেশন, কমেন্টস (!) ... পাশাপাশি "ডিআরওয়াই" (অনুলিপি প্রতিরোধ) এবং "ইয়াজিএনআই" এর মতো আরও গুরুত্বপূর্ণ নিদর্শন / প্রক্রিয়াগুলি (অতিরিক্ত সাধারণীকরণ / কোডের জটিলতা হ্রাস করা) - সমস্তই কেবল আপনার কোডটি পড়ার জন্য নেক্সট লোকটির জন্য আমদানি করে (কে সম্ভবত আপনি হবেন - আপনি প্রথমে যা করেছেন তা ভুলে যাওয়ার পরে!)


3
আমি কেবল এই বাক্যটির জন্য উচ্চারণ করছি, "সর্বাধিক গুরুত্বপূর্ণ বিষয়টি ... কোডকে পাঠ্যযোগ্য করে তুলছে ; এটি কিছু করা প্রায় গৌণ বিষয় is" আমি এটি কিছুটা ভিন্নভাবে বলব; এটা না, তাই অনেক কোড বানাচ্ছেন পাঠযোগ্য হিসাবে কোড উপার্জন সহজ । কিন্তু উভয় ক্ষেত্রেই, এটি উহু তাই সত্য যে এটা করছে না কিছু মাধ্যমিক হয়।
ওয়াইল্ডকার্ড

" return, break, continueএবং throw/ catchসবাই মূলত gotos" অসম্মতি, সাবেক শ্রদ্ধার মতবাদ গঠিত প্রোগ্রামিং (আপনি ব্যতিক্রম সম্পর্কে তর্ক পারে যদিও), যেতে-টু স্পষ্টভাবে না। এই প্রশ্নের আলোকে, এই মন্তব্য দ্বারা খুব বেশি লাভ হয় না।
এরিক

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

7

GOTOএকটি সরঞ্জাম। এটি ভাল বা মন্দ জন্য ব্যবহার করা যেতে পারে।

খারাপ পুরানো দিনগুলিতে, ফরটারন এবং বেসিকের সাথে এটি প্রায় একমাত্র হাতিয়ার ছিল।

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

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

হাস্যকরভাবে, GOTOখুব বিরল হয় না যখন এটি বিরল। আপনি যখন একটি দেখেন, আপনি জানেন যে এখানে বিশেষ কিছু চলছে, এবং এটি কেবলমাত্র কাছের এটির লেবেল হওয়ায় সংশ্লিষ্ট লেবেলটি খুঁজে পাওয়া সহজ।

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

পরিবর্তে আপনি " GOTOখারাপ। GOTOখারাপ। GOTOপরীক্ষা ব্যর্থ " বলেছিলেন । শিক্ষার্থীরা বুঝতে হবে যে !


4
অবজ্ঞাতৃত সমস্ত জিনিসের ক্ষেত্রে এটি সত্য। Globals। এক-বর্ণের পরিবর্তনশীল নাম। স্ব পরিবর্তনকারী কোড code Eval। এমনকি, আমি সন্দেহ করি, অবিলম্বে ব্যবহারকারী ইনপুট। একবার আমরা যখন প্লেগের মতো বিষয়গুলি এড়াতে নিজেদের শর্ত দিয়েছিলাম, তখন আমরা সেগুলির নির্দিষ্ট ব্যবহার, ভাল সাইনপोस्টেড কোনও নির্দিষ্ট সমস্যার সঠিক সমাধান হতে পারে কিনা তা মূল্যায়নের জন্য উপযুক্ত অবস্থানে রয়েছি। তার আগে, আমরা কেবল নিষিদ্ধ হিসাবে তাদের আচরণ করা ভাল।
দেবী মরগান

4

ব্যতিক্রম বাদে goto, পিএইচপি (এবং বেশিরভাগ ভাষা) এর সমস্ত ফ্লো কনস্ট্রাক্টস স্তরক্রমিকভাবে স্কোপযুক্ত।

কলঙ্কিত চোখের মাধ্যমে পরীক্ষা করা কিছু কোডের কল্পনা করুন:

a;
foo {
    b;
}
c;

কি নিয়ন্ত্রণ কনস্ট্রাক্ট তথাপি fooআছে ( if, whileইত্যাদি), সেখানে মাত্র নির্দিষ্ট অনুমতি আদেশ হয় a, bএবং c

আপনার a- b- c, বা a- c, বা এমনকি a- b- b- b- থাকতে পারে c। তবে আপনি কখনওb - cবা a- b- a- থাকতে পারেন নিc

... না থাকলে goto

$a = 1;
first:
echo 'a';
if ($a === 1) {
    echo 'b';
    $a = 2;
    goto first;
}
echo 'c'; 

goto(বিশেষত পিছনের দিকে goto) যথেষ্ট ঝামেলা হতে পারে যে এটিকে কেবল একা রেখে দেওয়া, এবং শ্রেণিবদ্ধ, অবরুদ্ধ প্রবাহের কাঠামো ব্যবহার করা ভাল।

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


এফওয়াইআই, উদাহরণ কোডটি আপনার যে কোনও প্রস্তাবের চেয়ে আরও ভাল লেখা যেতে পারে।

if(!in_array($ip, $ips, true)) {
    throw new Exception('Not allowed');
}

2

নিম্ন স্তরের ভাষায় জিওটিও অনিবার্য। তবে উচ্চ স্তরে এড়ানো উচিত (ক্ষেত্রে ভাষা এটি সমর্থন করে) কারণ এটি প্রোগ্রামগুলি পড়া আরও কঠিন করে তোলে

কোডটি পড়তে আরও কঠিন করে তুলতে সবকিছু ফোটে। উচ্চ স্তরের ভাষাগুলি সুপারোসেট হয় ও নিম্ন স্তরের ভাষার মতো, বলা, এসেম্বলার বা সি এর চেয়ে কোড পড়া সহজ করে তোলে say

GOTO গ্লোবাল ওয়ার্মিং সৃষ্টি করে না বা এটি তৃতীয় বিশ্বে দারিদ্র্যের কারণ হয় না। এটি কোড পড়তে আরও জটিল করে তোলে।

বেশিরভাগ আধুনিক ভাষায় নিয়ন্ত্রণ কাঠামো রয়েছে যা GOTO কে অপ্রয়োজনীয় করে তোলে। কিছু জাভা মত এটি এমনকি না।

প্রকৃতপক্ষে, স্প্যাগুটি কোডটি সংশ্লেষিত থেকে এসেছে, কাঠামোগত কাঠামোগত কাঠামোগত কাঠামোগত কোড কারণগুলি অনুসরণ করা কঠিন।


6
gotoকোড eaiser পড়তে করতে পারেন। আপনি যখন একক লাফের তুলনায় অতিরিক্ত ভেরিয়েবল এবং নেস্টেড শাখা তৈরি করেছেন তখন কোডটি পড়া এবং বোঝা আরও অনেক কঠিন।
ম্যাথু সাদা

@ ম্যাথিউহাইটেড সম্ভবত দশটি লাইন পদ্ধতিতে যদি আপনার একক গোটো থাকে। তবে বেশিরভাগ পদ্ধতিগুলি দশ লাইন দীর্ঘ হয় না এবং বেশিরভাগ সময় লোকেরা GOTO ব্যবহার করে তারা "কেবল একবার এই" ব্যবহার করে না।
তুলিনাস কর্ডোভা

2
@ ম্যাথেজওয়েটেড প্রকৃতপক্ষে স্প্যাগুটি কোডটি সংঘবদ্ধ , কাঠামোযুক্ত , কাঠামোগত কাঠামোগত কাঠামোগত কাঠামোর কারণে কোড অনুসরণ করা থেকে এসেছে। নাকি স্প্যাগুটি কোডটি এখন লাল করা সহজ? হতে পারে. ভিনিল ফিরছে, কেন যাবে না।
তুলিনস কর্ডোভা

3
@ টিউলিনস আমাকে এই জাতীয় খারাপ জিনিসগুলির উপস্থিতি বিশ্বাস করতে হবে কারণ লোকেরা তখন অভিযোগ করে চলেছে, তবে বেশিরভাগ সময় আমি যখন দেখি তখন gotoগুলিয়ে যাওয়া স্প্যাগেটি কোডের উদাহরণ নয়, বরং মোটামুটি সোজা জিনিস, প্রায়শই ভাষাগুলিতে নিয়ন্ত্রণ প্রবাহের নমুনা অনুকরণ করে যেগুলি এর জন্য বাক্য গঠন নেই: দুটি সর্বাধিক সাধারণ উদাহরণ gotoহ'ল একাধিক লুপ ভেঙে দেওয়া এবং ওপিতে উদাহরণ যেখানে প্রয়োগ করতে ব্যবহৃত হয় for- else

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

1

gotoনিজেদের বিবৃতিতে কোনও ভুল নেই । ভুলগুলি এমন কিছু ব্যক্তির সাথে রয়েছে যা বিবৃতিটি অনুপযুক্তভাবে ব্যবহার করে।

জ্যাকসবি যা বলেছিল (সি-তে ত্রুটি পরিচালনা করতে) এর পাশাপাশি, আপনি gotoএকটি অ-নেস্টেড লুপটি প্রস্থান করতে ব্যবহার করছেন যা আপনি ব্যবহার করে করতে পারেন break। এই ক্ষেত্রে আপনি আরও ভাল ব্যবহার break

তবে আপনার যদি নেস্টেড লুপের দৃশ্য থাকে তবে ব্যবহারটি gotoআরও মার্জিত / সহজ হবে। উদাহরণ স্বরূপ:

$allowed = false;

foreach ($ips as $i) {
    foreach ($ips2 as $i2) {
        if ($ip === $i && $ip === $i2) {
            $allowed = true;
            goto out;
        }
    }
}

out:

if (!$allowed) {
    throw new Exception('Not allowed');
}

উপরের উদাহরণটি আপনার নির্দিষ্ট সমস্যাটিকে বোঝায় না কারণ আপনার নেস্টেড লুপের দরকার নেই। তবে আমি আশা করি আপনি এটির নেস্টেড লুপ অংশটি কেবল দেখতে পাচ্ছেন।

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


6
আমি পিএইচপি সম্পর্কে নিশ্চিত নই, তবে অনেকগুলি ভাষা ব্যবহার করে breakএবং continueএকটি সংখ্যার সাহায্যে (সেই লুপগুলির অনেক স্তর ভাঙ্গতে / চালিয়ে যেতে) বা একটি লেবেল (সেই লেবেলের সাথে লুপটি ভাঙ্গতে / চালিয়ে যেতে) সমর্থন করবে, যেগুলির দুটি সাধারণত হওয়া উচিত gotoনেস্টেড লুপগুলির জন্য ব্যবহার করা ভাল ।
বিট্রি

@ 8 বিট্রি ভালো পয়েন্ট আমি জানতাম না যে পিএইচপি এর বিরতি যে অভিনব নয়। আমি কেবল জানি সি বিরতি যে অভিনব নয়। পার্লের বিরতি (তারা এটিকে শেষ বলে ডাকে )ও সি এর সাথে মিল ছিল (যেমন পিএইচপি'র মতো অভিনব নয়) তবে এটি কিছুটা পরে অভিনব হয়ে উঠেছে। আমি অনুমান করি যে আমার উত্তর কম এবং কম কার্যকর হওয়ায় আরও ভাষাগুলি ব্রেকের অভিনব সংস্করণগুলি প্রবর্তন করছে :)
গুহ্যমান

3
গভীরতার মান সহ একটি বিরতি অতিরিক্ত পরিবর্তনশীল ব্যতীত সমস্যাটি সমাধান করবে না। নিজের মধ্যে একটি পরিবর্তনশীল যা জটিলতার একটি অতিরিক্ত স্তর তৈরি করে।
ম্যাথু সাদা

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

@ NPSF3000 আপনি একটি নেস্টেড লুপ যে আপনি একটি ব্যবহার না করেই প্রস্থান করতে পারবেন একটি উদাহরণ দিতে দয়া করে এতে যান , বিবৃতি পাশাপাশি একটি ভাষা যে একটি অভিনব সংস্করণ নেই ব্যবহার বিরতি যে নির্দিষ্ট করে গভীরতা?
গুহামান

0

গোটো দিয়ে আমি দ্রুত কোড লিখতে পারি!

সত্য। যত্ন নেই।

সমাবেশে গোটো বিদ্যমান! তারা এটিকে কেবল জ্যাম্প বলে।

সত্য। যত্ন নেই।

গোটো আরও সহজভাবে সমস্যার সমাধান করে।

সত্য। যত্ন নেই।

শৃঙ্খলাবদ্ধ বিকাশকারী কোডের হাতে যা গোটো ব্যবহার করে তা পড়তে সহজ হতে পারে।

সত্য। যাইহোক, আমি যে শৃঙ্খলাবদ্ধ কোডার হয়েছে। সময়ের সাথে সাথে কোডের কী হয় তা আমি দেখেছি। Gotoসূক্ষ্ম শুরু হয়। তারপরে কোডগুলি পুনরায় ব্যবহার করার তাগিদটি সেট হয়ে গেল Fair মোটামুটি খুব শীঘ্রই আমি নিজেকে একটি ব্রেকপয়েন্টে দেখতে পেলাম এমনকি প্রোগ্রামের অবস্থা দেখার পরেও কী ঘটছে তা নিয়ে কোনও অভিশাপ নেই। Gotoকোড সম্পর্কে যুক্তিযুক্ত করা শক্ত করে তোলে। আমরা কাজ করেছি সত্যিই কঠিন তৈরী while, do while, for, for each switch, subroutines, functionsসব এবং আরো অনেক কিছু কারণ সঙ্গে এই জিনিস করছেন ifএবং gotoমস্তিষ্কের উপর কঠিন।

সুতরাং না। আমরা দেখতে চাই না goto। নিশ্চিত যে এটি বাইনারিটিতে জীবিত এবং ভাল তবে আমাদের উত্সটিতে এটি দেখার দরকার নেই। আসলে, ifকিছুটা নড়বড়ে দেখা শুরু করছে।


1
"গোটো সমস্যাগুলি আরও সহজভাবে সমাধান করে।" / "সত্য। যত্ন নেই।" - আমি আপনার কোডটি দেখতে ঘৃণা করব যেখানে আপনি ইচ্ছাকৃতভাবে সর্বাধিক বর্ধনযোগ্য এর পক্ষে সহজ সমাধানগুলি এড়াতে পারেন। (YAGNI শুনেছেন?)
ব্যবহারকারী 253751

1
@ উইল্ডকার্ড যদি সমস্যা সমাধানের অন্যান্য উপায়গুলি সমাধান করার খুব সহজ উপায় হয় তবে got এগুলি কম ঝুলন্ত ফল। এটি নির্দিষ্ট ভাষা সম্পর্কে নয়। Gotoকোডটিকে অন্য কিছু বিট তৈরি করে আপনাকে একটি বিমূর্ততা দেয়। Ifআপনাকে সেই বিমূর্ততা চয়ন করতে দেয়। বিমূর্ত করার আরও ভাল উপায় এবং বিমূর্ততা চয়ন করার আরও ভাল উপায় রয়েছে। এক জন্য বহুবর্ষ
মোমবাতি_আরঙ্গ

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

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

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

-1

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

পয়েন্টটি আন্ডারস্কোর করার জন্য, ইতিমধ্যে উদ্ভাবিত " COME FROM " বিবৃতি রয়েছে।

সি, সি ++, সি #, পাস্কাল, জাভা ইত্যাদির মতো ভাষায় ব্যবহারিকভাবে গোটো ব্যবহার করার প্রয়োজন নেই; বিকল্প নির্মাণগুলি ব্যবহার করা যেতে পারে যা প্রায় অবশ্যই কার্যকর এবং অনেক বেশি রক্ষণাবেক্ষণযোগ্য হবে। এটি সত্য যে উত্স ফাইলে থাকা একটি গোটো কোনও সমস্যা হবে না। সমস্যাটি হ'ল এটি কোডের একককে অনুসরণ করতে অসুবিধা বজায় রাখতে এবং ত্রুটি-প্রবণ বজায় রাখতে অনেক সময় নেয় না। এই কারণেই গ্রহণযোগ্য জ্ঞান হ'ল যখনই সম্ভব GOTO এড়ানো উচিত।

গোটো স্টেটমেন্টে এই উইকিপিডিয়া নিবন্ধটি সহায়ক হতে পারে

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