[swift-evolution] Anonymous Enums (Updated)

Yong hee Lee yonghee226 at gmail.com
Sat Feb 20 10:59:42 CST 2016


Hi, I have a proposal.


enum Foo {
  case foo,bar
}

func test(a:Foo) {
  // …
}

test(.bar)


If I use an enum only as a parameter of a function, the name of enum  is redundant. 

so I suggest a compact version like below.



func test(a:[foo|bar]) {
  // ...
}

test(.bar)



func adjustTemperature(temp:[low|normal|high]) {
  // ...
}

adjustTemperature(.high)



I think this is very useful.
What do you think?


————————————————————————————



I’ve added an explanation.


Benefits 


Anonymous enums let you see all enum options at a glance.

func adjustTemperature(temp:[low|normal|high]) { … }
In case of normal enums, callers should check inside of the enum interface.


Anonymous enums encourage switch-case coding style.

// Bool variables lead to use if-else clauses.

var switchIsOn : Bool = true

if switchIsOn {
  //
  // ...
  //
} else {
  // 
  // ...
  //
}

// Anonymouse enums lead to use switch-case clauses.

var switchState: [on|off] = .on

switch(switchState) {
case .on :
  //
  // ...
  //
case .off :
  //
  // ...
  //
}

// i think the switch-case is a much better option for readability because you can label each cases. If your code is very long and uses many nested if-clauses, it makes huge differences. 


Generally, you don’t use anonymous enums as an alternative of normal enums.
I think enum is a structure but, anonymous enum is just a flag variable type. 


You can make an anonymouse enum variable without thinking that you are making a new structure and increasing complexity.
Therefore, anonymous enums can replace bool flags easily without a mental barrier.

“Small differences make big changes”

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160221/950ba485/attachment.html>


More information about the swift-evolution mailing list