yaddly
yaddly

Reputation: 360

Is there way to use ternary expression with a continue statement inside a loop in Dart

I'm trying to use a ternary expression along with a continue or break construct inside a do-while loop in Dart but I get a compilation error.

do
{
  expr ? print('Conditionally print something') : continue;

}while(expr == true);

The above code fails at compile-time but if I use a pair of if-else decision structure, the code works. So, the question to the community is why the ternary expression is not working along with continue or break construct?

Upvotes: 0

Views: 1246

Answers (3)

zurcacielos
zurcacielos

Reputation: 1712

  • No, you can't do it.
  • continue is a Dart Statement (read below), and print is a function

First

17.23 Conditional conditional

A conditional expression evaluates one of two expressions based on a boolean condition.

{conditionalExpression} ::= {ifNullExpression} (‘?’ {expressionWithoutCascade} ‘:’ {expressionWithoutCascade})? Evaluation of a conditional expression c of the form e1?e2 : e3 proceeds as

follows: First, e1 is evaluated to an object o1. It is a dynamic error if the runtime type of o1 is not bool. If r is true, then the value of c is the result of evaluating the expression e2. Otherwise the value of c is the result of evaluating the expression e3.

Second

As you can see the ternary operator requires expressions, but continue, in the same PDF of language specification is defined as an statement, a reserved word, as:

18 Statements statements

A statement is a fragment of Dart code that can be executed at run time. Statements, unlike expressions, do not evaluate to an object, but are instead executed for their effect on the program state and control flow

Third

in the case of print, it's taken as a function I guess, didn't find the specification. Perhaps it returns void. We can still ask ourselves, why can't we put continue in a function, even in a lambda like () => { continue; } or similar. The short answer is that as said in the specification for the continue statement, if it's not inside a while, etc. is gonna give a compile error. And if it's inside a function, it will prevent that function to reach the return statement, and again, the ternary will expect a return value.

We can still research a little more, many things are inside the specification.

Upvotes: 1

ישו אוהב אותך
ישו אוהב אותך

Reputation: 29794

Because a ternary operator is returning a value. With the following syntax:

condition ? expresion1 : expression2

which means:

If condition is true, it return expression1. If it is not it return expression2.

So, you can't use statement like this:

print('Conditionally print something')

or

continue

An expression evaluates to a value. A statement does something.

Upvotes: 0

Aman Verma
Aman Verma

Reputation: 918

The ternary operator takes 3 expressions in the form of (expr1) ? (expr2) : (expr3).

You can't execute statements in ternary operator, nor only in dart but in other languages also. Since break and continue are not expressions but statements they cant be used here

Upvotes: 1

Related Questions