"অন্যথায় যদি" ​​একটি একক কীওয়ার্ড হয়?


100

আমি সি ++ এ নতুন। আমি প্রায়শই নীচের মতো শর্তাধীন বিবৃতি দেখতে পাই:

if 
  statement_0;
else if
  statement_1;

প্রশ্ন:

সিনট্যাক্টিক্যালি , আমি else ifকি একক কীওয়ার্ড হিসাবে বিবেচনা করব ? বা এটি কি নীচের মত ifবাইরের মধ্যে একটি নেস্টেড বিবৃতি else?

if 
  statement_0;
else 
  if
    statement_1;

5
আপনার দ্বিতীয় বিষয়। else if
কৃত্রিমভাবে

8
না, এটি ব্যাকরণকে আরও জটিল করে তুলবে: শব্দটি স্থান ব্যতীত একটি শব্দ। অন্যান্য ভাষাগুলির মতো কীওয়ার্ড রয়েছে elseifএবং ELIF। প্রকৃতপক্ষে কেবল (?) প্রোগ্রামিং ল্যাঙ্গুয়েজ Algol68 একটি সনাক্তকারীতে একটি স্থান অনুমতি দেয়; খুব সুন্দর:PROC walk through tree ()
জোপ এগজেন

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

1
elseifশব্দ ভিবি এবং পিএইচপি বিদ্যমান।
সালমান এ

3
নিতপিক: যদিও সি ++ এর আনুষ্ঠানিকভাবে ফাঁকা জায়গাগুলির সাথে কীওয়ার্ড নেই, তবে এটির জন্য সমস্ত উদ্দেশ্য এবং উদ্দেশ্যগুলির মতো নির্মাণ রয়েছে। উদাহরণস্বরূপ, long doubleআপনাকে সেভাবে লিখতে হবে। longdoubleভুল.
মিস্টার লিস্টার

উত্তর:


133

আমরা সি ++ স্ট্যান্ডার্ড বিভাগের খসড়া 2.12 কীওয়ার্ড সারণিতে 4উভয় ifএবং elseপৃথকভাবে তালিকাভুক্ত করি এবং কোনও কীওয়ার্ড না থাকলে সেগুলি একটি কীওয়ার্ড নয় else if। আমরা কীওয়ার্ডের cppreferences বিভাগে গিয়ে সি ++ কীওয়ার্ডগুলির আরও একটি অ্যাক্সেসযোগ্য তালিকা খুঁজে পেতে পারি ।

বিভাগে ব্যাকরণ 6.4এটিও পরিষ্কার করে দেয়:

selection-statement:
 if ( condition ) statement
 if ( condition ) statement else statement

ifমধ্যে else ifএকটি হল বিবৃতি নিম্নলিখিত elseপরিভাষা। বিভাগটি আরও বলে:

[...] একটি substatement নির্বাচন-বিবৃতি (প্রতিটি substatement মধ্যে অন্য আকারে যদি বিবৃতি) পরোক্ষভাবে একটি ব্লক সুযোগ (3.3) সংজ্ঞায়িত করে। যদি একটি নির্বাচন-বিবৃতিতে সাবস্টেটমেন্টটি একটি একক বিবৃতি হয় এবং কোনও যৌগিক-বিবৃতি না হয়, তবে এটি এমনভাবে মনে হয় যে এটি মূল সাবস্টেটমেন্ট যুক্ত যৌগিক-বিবৃতি হিসাবে পুনরায় লেখা হয়েছিল।

এবং নিম্নলিখিত উদাহরণ সরবরাহ করে:

if (x)
 int i;

can be equivalently rewritten as

if (x) {  
  int i;
}

সুতরাং কিভাবে আপনার সামান্য বর্ধিত উদাহরণ পার্স করা হয়?

if 
  statement_0;
else 
  if
    statement_1;
  else
    if
      statement_2 ;

এভাবে পার্স করা হবে:

if 
{
  statement_0;
}
else
{ 
    if
    {
      statement_1;
    }
    else
    {
        if
        {
         statement_2 ;
        }
    }
}

বিঃদ্রঃ

আমরা কীওয়ার্ড শনাক্তকরণকারী তা else ifবুঝতে পেরে একটি কীওয়ার্ড হতে পারি না তা নির্ধারণ করতে পারি এবং আমি আমার উত্তরটিতে একটি শনাক্তকারীর জন্য ব্যাকরণ থেকে দেখতে পাচ্ছি আপনি কি কোনও সংখ্যার অঙ্ক দিয়ে কোনও শ্রেণীর নাম শুরু করতে পারেন? শনাক্তকারীগুলিতে শূন্যস্থানগুলির অনুমতি নেই এবং সুতরাং একক কীওয়ার্ড হতে পারে না তবে দুটি পৃথক কীওয়ার্ড হতে হবে ।else if


1
আপনি স্ট্যান্ডার্ড ছাড়া এই ছাড় করতে পারে? এএসএম এ এর: jeq( if| else if), jne( if| else if), jmp( else)। তার উপর ভিত্তি করে, আমি বলেছিলাম এটি একটি একক কীওয়ার্ড ছিল .. সম্ভবত বাক্যবৈজ্ঞানিকভাবে নয় বরং নির্দেশ-ভিত্তিক।
ব্র্যান্ডন

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

যদিও মনে রাখবেন যে এই সংজ্ঞাটি পার্সারে ব্যাকরণটি সংজ্ঞায়িত করার সময় সম্ভাব্যত অস্পষ্ট "ঝাঁকুনি" দ্বিধাহীন সিনট্যাক্স ট্রি সমস্যার দিকে নিয়ে যায় ...
লিনিয়ারজয়েট্রোপ

2
কিছু ভাষা সমর্থন করে না else if, তবে পরিবর্তে elsif। এই ভাষাগুলিতে, else ifসত্যই একটি কীওয়ার্ড। যাইহোক, সি-ভিত্তিক ভাষাগুলি সাধারণত এই উত্তরটি বলে না।
sfdcfox

1
আমি মনে করি @ ক্রুমিয়া একটি চূড়ান্ত elseবিবৃতি দেখতে চেয়েছিল । আমিও এটির প্রশংসা করব।
ম্যাথিয়াস

78

সিনট্যাক্টিক্যালি, এটি কোনও একক কীওয়ার্ড নয়; কীওয়ার্ডগুলিতে সাদা স্থান থাকতে পারে না। যৌক্তিকভাবে, তালিকাগুলির তালিকা লেখার সময় else if, আপনি যদি এটি একটি একক কীওয়ার্ড হিসাবে দেখেন এবং লিখেন তবে এটি আরও ভাল :

if ( c1 ) {
    //  ...
} else if ( c2 ) {
    //  ...
} else if ( c3 ) {
    //  ...
} else if ( c4 ) {
    //  ...
} // ...

সংকলক আক্ষরিকভাবে এটি দেখতে:

if ( c1 ) {
    //  ...
} else {
    if ( c2 ) {
        //  ...
    } else {
        if ( c3 ) {
            //  ...
        } else {
            if ( c4 ) {
                //  ...
            } // ...
        }
    }
}

তবে দুটি রূপই একই জিনিস থেকে আসে এবং প্রথমটি আরও বেশি পাঠযোগ্য।


1
প্রকৃতপক্ষে, সংকলকটি আক্ষরিকভাবে A এর elseপরে দেখতে পেল না compound-statement। পরে else, এটি সন্ধান করে statement(যা হতে পারে return;বা এর মতো হতে পারে f()) বা compound-statement...
মাস্ক

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

এই উত্তরটি নির্ধারণ করে যে পার্সার কীভাবে টোকেনগুলি বের করে। ভাল.
হ্যাক

24

না এটা না.
এগুলি দুটি কীওয়ার্ড এবং তদ্ব্যতীত, দ্বিতীয় "যদি" প্রথম "অন্য" বিবৃতি দ্বারা নির্ধারিত সুযোগ "ভিতরে" একটি সাবস্টেটমেন্ট হয়।


2
যদিও এটি ভালভাবে যা চলছে তা বর্ণনা করে, আপনি কী বলছেন তা প্রমাণ করার জন্য আপনি প্রকৃত ভাষার সংজ্ঞাগুলির জন্য কিছু উল্লেখ যুক্ত করতে চাইতে পারেন।
ῥεῖ

2
@ πάνταῥεῖ: তথ্যসূত্রগুলি সম্পর্কে আপনি ঠিক বলেছেন, তবে এই কাজটি এখনও শফিক ইয়াঘমৌর দ্বারা ভালভাবে সম্পন্ন হয়েছে। তার উত্তরটি ছিল গৃহীত উত্তর এবং আমিও ভোট দিয়েছি। আমার কাজ এখানে শেষ।
pablo1977

16

কোঁকড়া ধনুর্বন্ধনী ব্যবহার করে আপনি সুযোগটি দেখতে পারেন:

if(X) {
  statement_0;
}
else {
  if(Y) {
    statement_1;
  }  
}

আর সাধারণত, দুটি স্বতন্ত্র কীওয়ার্ড সঙ্গে বাস্তবায়িত হয় যদি এবং এক অন্য


সুতরাং আমি মনে করি যারা জোড়ালো ধনুর্বন্ধনী ব্যবহার করা উচিত যেখানেই কোনও যৌগিক বিবৃতি গৃহীত হবে সেখানে তাদের সমস্ত অনিয়ন্ত্রিত শর্ত লিখতে হবে, তাই না? :)
ডিএলএফ

5
আমি মনে করি যে কেউ যে কোনও কিছু বাড়িয়ে তুলতে পারে এমনকি আমাদের সমস্ত প্রিয় কোঁকড়া ধনুর্বন্ধনী। বাড়িতে এটি করবেন না।
রেিন্ডার

1
সমস্ত ব্রেস-কাঠামোগত ভাষাগুলি (যা আমি জানি) যেগুলি সমস্ত সাবস্টেটমেন্টের চারপাশে কোঁকড়া ধনুর্বন্ধনী প্রয়োজন , এমনকি যদি একটি বিবৃতি দিয়ে গঠিত হয়, তবে "অন্যথায় যদি" ​​অর্থ সহ একটি একক-টোকেন কীওয়ার্ড থাকে। আমি মনে করি এটা বলছে।
zwol

@ জ্যাক: সুইফট এমন একটি ভাষা যা আপনার নিয়ম ভঙ্গ করে। এটি একক বিবৃতি কোড ব্লক এমনকি কোঁকড়া ধনুর্বন্ধনী প্রয়োজন, কিন্তু "অন্যথায়" কীওয়ার্ড নেই। অন্যদিকে, ব্যাকরণ সি একটি থেকে পুরোপুরি ভিন্ন if-statementএকটি ঐচ্ছিক সঙ্গে প্রান্ত else-clause। একটি else-clauseহল পারেন else code-block বা else if-statementcode-blockবাধ্যতামূলক ধনুর্বন্ধনী অন্তর্ভুক্ত। সুতরাং elseকীওয়ার্ডটি কেবলমাত্র অনুসরণ করা যেতে পারে {বা দ্বারা if
গ্রানাইটরবার্ট

@ গ্রানাইটরোবার্টের কাছে সুইফটকে দেখার মতো আমার খুব বেশি সময় ছিল না, তবে এটি একটি আকর্ষণীয় ডেটা পয়েন্ট; আমি ভাবছিলাম যে এর মতো ব্যাকরণটি একটি সম্ভাবনা তবে এটি কখনই ঘটে দেখেনি। এবং আপনি লক্ষ করবেন যে এটিও লোককে " else { if ... }" লেখার বিষয়টি এড়ানো যায় না ।
zwol

10

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

 statement:      
    labeled-statement
    attribute-specifier-seqopt expression-statement
    attribute-specifier-seqopt compound-statement    
    attribute-specifier-seqopt selection-statement  
    attribute-specifier-seqopt iteration-statement    
    attribute-specifier-seqopt jump-statement  
    declaration-statement
    attribute-specifier-seqopt try-block

   selection-statement: 
         if ( condition ) statement
     if ( condition ) statement else statement

নোট করুন যে statementনিজেই অন্তর্ভুক্ত selection-statement। সুতরাং, সমন্বয়গুলি:

if (cond1)
   stat
else if(cond2)
   stat
else
   stat

সি ++ স্ট্যান্ডার্ড / শব্দার্থবিজ্ঞান অনুসারে সম্ভব এবং বৈধ।

দ্রষ্টব্য: সি ++ ব্যাকরণ এই পৃষ্ঠা থেকে নেওয়া ।


1

অন্যথায় এবং যদি দুটি ভিন্ন সি ++ কীওয়ার্ড হয় । একটি if বিবৃতি অনুসরণ করা যেতে পারে একটি byচ্ছিক অন্যথায় যদি ... অন্য বিবৃতি। একটি যদি বিবৃতিতে শূন্য বা তার বেশি থাকতে পারে অন্যথায় যদি 'র এবং তারা আগে আসতে হবে অন্য

আপনি যদি এর মধ্যে বাক্য গঠন এবং উদাহরণ সন্ধান করতে পারেন ... অন্য বিবৃতি টিউটোরিয়াল


-1

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

শুভেচ্ছা সহ


-1

যদি একটি বিবৃতি অনুসরণ করা যায় তবে অন্য একটি canচ্ছিক যদি ... অন্য বিবৃতি, যা একক ব্যবহার করে বিভিন্ন শর্ত পরীক্ষা করার জন্য খুব দরকারী ... অন্যথায় যদি বিবৃতি থাকে।

যদি ব্যবহার করেন, অন্যথায় যদি, অন্য বিবৃতিগুলি মনে রাখার জন্য কয়েকটি পয়েন্ট থাকে।

একটি যদি শূন্য বা অন্য একটি হতে পারে এবং এটি অবশ্যই অন্য যে কোনও পরে আসবে।

যদি থাকে তবে অনেকের কাছে শূন্য থাকতে পারে এবং তাদের অবশ্যই অন্যটির আগে আসতে হবে।

যদি আর একবার সফল হয়, তবে তার বা তার অন্য কোনওটির পরীক্ষা করা হবে না।

একবার দেখুন ... অন্য বিবৃতি টিউটোরিয়াল


2
এটি কেবল মানের সাথে সামঞ্জস্য করে না, এবং তদুপরি, এটি অপ্রয়োজনীয়। ভাষার অনুকরণ করার else ifমতো সমস্ত ভাবের শক্তি রয়েছে যেন এটি কোনও কীওয়ার্ড, সুতরাং এটি স্পষ্টভাবে সংজ্ঞায়িত করার কোনও বুদ্ধি নেই।
রুসলান

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