2012-08-31

akuklev: (Default)
2012-08-31 02:03 am

Not considered harmful

Вообще, я считаю, что выделение break и continue в Си это большая ошибка, вместо этого нужно было сделать правильный return. А именно, return с опциональным аргументом, чего именно мы хотим закончить. И называл бы я эту операцию не return, а finish.

Вместо break:
Loop: for (i <- 0 until size) {
  val v = data(i)
  if (v > maxValue) finish[Loop] v
}

Вместо continue:
for (i <- 0 until size) ProcessElement:{
  if (data(i) == 0) finish[ProcessElement]
  ...
}

Примитив finish (он же return) наиболее естественно реализуется при помощи исключений, так что можно считать его живущим в соответствующей монадке.

Read more... )