En C #, puede construir métodos con el tipo de retorno IEnumerable<T>
y el uso yield return
y yield break
para controlar el flujo. Aquí hay un ejemplo simple que usa ambos controles:
public IEnumerable<int> GetEvens(int start, int end) {
if(end < start)
yield break;
if(start & 2 != 0)
start++;
for(int i = start; i <= end; i+=2) {
yield return i;
}
}
Mi pregunta es, ¿por qué se diseñó originalmente para usar dos palabras clave yield
y no usarlo de la siguiente manera con el único yield
"rendimiento del valor de retorno":
public IEnumerable<int> GetEvens(int start, int end) {
if(end < start)
return; // stop completely and return nothing
if(start & 2 != 0)
start++;
for(int i = start; i <= end; i+=2) {
yield i; // yield the current value.
}
}
Para mí, esto es más fácil de leer y entender.
yield x;
también un error de sintaxis en ese entonces?yield
return
, ni siquiera tiene que molestarse en pensar si fue un error de sintaxis o no. La posibilidad de una colisión se convierte en cero.yield
entoncesyield x;
no sería un error de sintaxis, sino una declaración de variable válida.