Em C #, você pode construir métodos com o tipo de retorno IEnumerable<T>
e usar yield return
e yield break
controlar o fluxo. Aqui está um exemplo simples que usa os dois 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;
}
}
Minha pergunta é: por que ele foi originalmente projetado para usar duas palavras-chave yield
e não usá-lo como o seguinte com o único yield
"produzindo o 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 mim, isso é mais simples de ler e entender.
yield x;
Também não seria um erro de sintaxe na época?yield
return
, você nem precisa se preocupar em pensar se foi um erro de sintaxe ou não. A chance de uma colisão se torna zero.yield
,yield x;
não seria um erro de sintaxe, mas uma declaração de variável válida.