Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

To brace or not to brace: case statement block

I am asking a specific question here (not an opinion): is there any scala style guide recommendation for the following "case o:" addressing whether the (optional) use of braces were to be avoided or if either with/without were both acceptable:

 def mycase(x : Int) = {
      x match {
      case 0 =>
        println("zero")
        println("blah zero")
      case 1 =>
        println("one")
      }

I was not initially convinced it would even work (thought it might do a fall through): but it does the correct breakout:

scala> mycase(0)
zero
blah zero

I specifically want to know if there were a canonical answer on this (not "I prefer" , etc.). E.g. for java, Sun had stated long ago that placing the initial curly brace for a method may happen either on same or next line - both are acceptable. is there such a clear answer in this case?

UPDATE An answer provided below by @acjay provides a link to the style guide. Inside here is a specific blurb.

from http://docs.scala-lang.org/style/control-structures.html#curlybraces

case - Omit braces if the case expression fits on a single line. Otherwise, use curly braces for clarity (even though they are not required by the parser).

like image 517
WestCoastProjects Avatar asked May 23 '14 18:05

WestCoastProjects


People also ask

DO case statements need brackets?

The braces are always needed following the switch statement. No braces are needed following any case. If the variable is equal to one of the values following a case, then the code following the case is executed.

Why do we use block of statements with braces?

Braces are used around all statements, even single statements, when they are part of a control structure, such as an or statement. This makes it easier to add statements without accidentally introducing bugs due to forgetting to add braces.

Can we use braces in switch case?

It's certainly not invalid to use braces in every case block, and it's not necessarily bad style either. If you have some case blocks with braces due to variable declarations, adding braces to the others can make the coding style more consistent.

How do you write multiple lines on a switch case?

Also, you can write multiple statements in a case without using curly braces { }. As per the above syntax, switch statement contains an expression or literal value. An expression will return a value when evaluated. The switch can includes multiple cases where each case represents a particular value.


2 Answers

The Scala's style guide about this http://docs.scala-lang.org/style/control-structures.html#curly-braces seems changed, where it says

case - Always omit braces in case clauses.

Actually, when editing in IntelliJ, it will remind user of unnecessary braces around case block.

Thus, to avoid introducing further confusion to users, please make a correction to the accepted answer :)

like image 196
eval Avatar answered Oct 17 '22 17:10

eval


The Scala Documentation Style Guide says:

case - Omit braces if the case expression fits on a single line. Otherwise, use curly braces for clarity (even though they are not required by the parser).

Therefore, the correct format is:

def mycase(x : Int) = x match {
  case 0 => {
    println("zero")
    println("blah zero")
  }
  case 1 => println("one")
}

Separate from the question, but with pertinence to the example given, the declarations section of the style guide mentions the preferred formatting for the match as such:

Methods which contain a single match expression should be declared in the following way:

def sum(ls: List[Int]): Int = ls match {
  case hd :: tail => hd + sum(tail)
  case Nil => 0
}
like image 39
acjay Avatar answered Oct 17 '22 17:10

acjay