Certains algorithmes exécutent une boucle while avec la condition true et se termineront (à coup sûr) à un moment donné par une déclaration de retour dans le corps de la boucle while. Par exemple :
def foo: Int = {
while(true) {
// At some time, the while loop will do a return statement inside its body
if( ... )
return 0
}
}
Exemple simple (sans sens sémantique) :
def foo: Int = {
var i = 0
while(true) {
i += 1
if(i == 10)
return 0
}
}
Le compilateur Scala se plaint d'une incompatibilité de type, car la boucle while a le type Unit et le compilateur ne sait pas que la boucle while retournera une valeur à un moment donné. Nous pourrions résoudre ce problème avec une solution de contournement comme celle-ci :
def foo: Int = {
var i = 0
while(true) {
i += 1
if(i == 10)
return 0
}
0 // !
}
Mais ça, c'est moche. Existe-t-il une meilleure solution ? Ou même une meilleure solution pour ce type de problème ?