Slide 1

Slide 1 text

JLS myths ~ if-then-else statement ~ HASUNUMA Kenji k.hasunuma@coppermine.jp GlassFish Users Group Japan

Slide 2

Slide 2 text

if-else statement if ( someObject.eval() ) if ( otherObject.eval() ) func1(); else func2(); assume that someObject.eval() is false. which is run, func1 or func2?

Slide 3

Slide 3 text

if-else statement if ( someObject.eval() ) if ( otherObject.eval() ) func1(); else func2(); assume that someObject.eval() is false. Neither func1 nor func2 is run.

Slide 4

Slide 4 text

if-else statement if ( someObject.eval() ) if ( otherObject.eval() ) func1(); else func2(); It's if-else's short-circuit. Don't be misled by source code format!

Slide 5

Slide 5 text

From JLS (Java SE 8) IfThenStatement: if ( Expression ) Statement IfThenElseStatement: if ( Expression ) StatementNoShortIf else Statement IfThenElseStatementNoShortIf: if ( Expression ) StatementNoShortIf else StatementNoShortIf

Slide 6

Slide 6 text

Statement Statement: StatementWithoutTrailingSubstatement LabeledStatement IfThenStatement IfThenElseStatement WhileStatement ForStatement

Slide 7

Slide 7 text

StatementNoShortIf StatementNoShortIf: StatementWithoutTrailingSubstatement LabeledStatementNoShortIf IfThenElseStatementNoShortIf WhileStatementNoShortIf ForStatementNoShortIf *** 'IfThenStatementNoShortIf' don't exist ***

Slide 8

Slide 8 text

if-else statement (fixed) if ( someObject.eval() ) { if ( otherObject.eval() ) func1(); } else func2(); assume that someObject.eval() is false. which is run, func1 or func2?

Slide 9

Slide 9 text

if-else statement (fixed) if ( someObject.eval() ) { if ( otherObject.eval() ) func1(); } else func2(); func2 is run! because it use block as statement in outer if statement

Slide 10

Slide 10 text

JLS myths ~ If-then-else statement ~ HASUNUMA Kenji k.hasunuma@coppermine.jp GlassFish Users Group Japan