web-dev-qa-db-fra.com

Déclarant qu'une fonction ne revient jamais

Si j'ai une fonction qui ne retourne jamais (il contient une boucle infinie) Comment puis-je déclarer/communiquer qu'elle ne reviendra jamais à l'utilisateur de la fonction? L'utilisateur ne voit pas le code source, seule la signature de fonction et la documentation.

Donc, l'utilisateur saura appeler ma fonction dans un nouveau fil d'autre que son programme sera bloqué pour toujours et le code ci-dessous ne sera jamais exécuté.

Exemple de fonction:

public void Foo()
{
    while (true)
    {
        _player.Play("scary_sound.wav");
        Thread.Sleep(TimeSpan.FromMinutes(5));
    }
}

Devrais-je déclarer que dans le cadre de la documentation?

/// <summary>Plays scary sounds!</summary>
/// <remarks>This function never returns. Call it on a new thread.</remarks>
public void Foo()

Ou nommez-le avec un préfixe "exécuté" et un suffixe "boucle" ou quelque chose?

public void RunFooLoop()

Quelles voies sont là pour déclarer/communiquer cela? Des pratiques communes? Des exemples?

21
Fred

En Python, vous pouvez utiliser typing.NoReturn Pour indiquer qu'une fonction ne revient jamais. par exemple.

from typing import NoReturn

def stop() -> NoReturn:
    raise RuntimeError('no way')
0
laike9m