Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does an else if statement exist?

Some time ago after not standing anymore lines like this:

if (arg)
    invk(test);
else if (test)
{
    alot();
    stuff();
}

I decided for my self its better for readability in our 1920x1200 times, to not omit the {}.

So I wrote a tool that reformats my existing code.

later I noticed a bug in that tool resulting in

if (x)
{
 ...
}
else if(y)
{
 ...
}
else if(z)
{
 ...
}

had been changed (wihtout obvisiously changing the behavior) into:

if (x)
{
 ...
}
else 
{
    if(y)
    {
     ...
    }
    else
    {
        if(z)
        {
         ...
        }
    }
}

This made me realize (unintended) that this is actually what a else if does by syntax and semantical rules of C.

So is there even an statement like else if() existing or is it just an abuse of semantic that results in this usefull but (lets call it so for this purpose) obfuscation originated wording that breaks any formating rules and just serves as human readable?

like image 603
dhein Avatar asked May 04 '16 10:05

dhein


People also ask

Is there an ELSE IF statement?

Use the else if statement to specify a new condition if the first condition is false .

CAN AN else exist without an if statement?

An if statement looks at any and every thing in the parentheses and if true, executes block of code that follows. If you require code to run only when the statement returns true (and do nothing else if false) then an else statement is not needed.

Does else if exist in Java?

Java has the following conditional statements: Use if to specify a block of code to be executed, if a specified condition is true. Use else to specify a block of code to be executed, if the same condition is false. Use else if to specify a new condition to test, if the first condition is false.

Does else if exist in Python?

An if else Python statement evaluates whether an expression is true or false. If a condition is true, the “if” statement executes. Otherwise, the “else” statement executes. Python if else statements help coders control the flow of their programs.


2 Answers

As per the C11, chapter §6.8.4, selection statements, the available statement blocks are

if ( expression ) statement
if ( expression ) statement else statement
switch ( expression ) statement

and, regarding the else part,

An else is associated with the lexically nearest preceding if that is allowed by the syntax.

So, there is no else if construct, exists as per standard C.

Obviously, an if (or if...else) block can exist as the statement in else block (nested if...else, we may say).

The choice of indentation , is left to the user.


Note:

Just to add, there is no reason for a separate else if construct to exist, the functionality can be achieved by nesting. See this wiki article. Relevant quote

The often-encountered else if in the C family of languages, and in COBOL and Haskell, is not a language feature but a set of nested and independent "if then else" statements combined with a particular source code layout. However, this also means that a distinct else-if construct is not really needed in these languages.

like image 188
Sourav Ghosh Avatar answered Oct 05 '22 23:10

Sourav Ghosh


As every one is aware, there is several different styles of programming languages. The presence of a elseif is based on the style of language. In a C/Pascal style the if statement is

if (...)
   statment; 
else
   statement;

and you have a compound statement: { statment; statment; }

while in a Modula2 / VB / (python ?) style language you have

if (...)
   statement;
   ...
   statement;
else
   statement;
   ...
   statement;
end-if

in the Modula2 / VB you need a elseif statement because if you tried using else if you get

if (..)
else if (..)
else if (..)
end-if; end-if; end-if;

The end-if's at the end are rather ugly.

As @anatolyg noted this is why you have a #elif in C macro language.


Cobol-85 has a different take on the elseif statement. It provides an extended Select/case statement. In Cobol you have an evaluate:

evaluate option
   when 1
      ...
   when 2
      ...

but you can also do

evaluate true
   when age > 21 and gender = 'male'
      ...
   when age > 21 and gender = 'female'

In Cobol you can also mix the case and if structure

evaluate option also true
   when 1 also age > 21 and gender = 'male'
      .... 
   when 1 also age > 21 and gender = 'female'
      .... 
   when 2 also any
      ....

One final point in java and C you sometimes see

if () {

} else if () {

} else if () {

}

To all intents and purposes, this is VB / Modula-2 written in Java/C.

like image 25
Bruce Martin Avatar answered Oct 06 '22 01:10

Bruce Martin