Jeu Vidéo 2

Techniques d'intégration multimédia, prof(s):

Fonctions avec retour

Qu'est-ce que c'est?

Une fonction peut contenir une instruction spéciale nommée return. Cette instruction fait en sorte que la fonction renvoie un résultat lors de son exécution. La valeur de ce résultat peut être alors associée à une variable ou même utilisée directement dans une autre ligne d'instruction.

Il faut s'imaginer une fonction avec retour un peu comme un raccourcis, une façon de faire un traitement dont le résultat est réutilisable.

Le type de donnée retournée doit être spécifié...

Juste avant le nom de la fonction, on doit indiquer le type de donnée retournée par elle. Si la fonction ne retourne rien (elle n'a pas de return), on doit l'indiquer grâce au mot void (qui signifie 'néant' ou 'vide').

Important:

Dès qu'une instruction return est exécutée, l'exécution de la fonction qui la contenait prend aussitôt fin. Toute instruction placée après elle à l'intérieur de la fonction est ignorée. Certains programmeurs utilisent cette particularité parfois pour terminer l'exécution d'une fonction prématurément, en faisant exécuter une ligne d'instruction contenant simplement return; Dans ce cas, aucune valeur n'est retournée et l'instruction return a seulement été utilisée pour sortir de l'exécution de la fonction qui la contenait.


Exemple simple:

// Cette fonction calcule et retourne la somme
// de 2 entiers reçus en paramètres

private int Somme(int a, int b)
{
	int total = a + b;
	return total;
}

// Quand la fonction Test() sera activée,
// la console affichera 10

private void Test()
{
	Debug.Log( Somme(6,4) );
}

Utilisations variées!

Voici quelques exemples de fonctions avec retour, utilisables de différentes façons.

// Fonction pour générer le résultat d'un dé à 6 faces

private int D6()
{
	return Random.Range(1,7);
}

// Exemple d'utilisation:
private void Test()
{
	// Ici, la force est la somme de 3 dés à 6 faces
	int force = D6() + D6() +D6();
	Debug.Log(force);
}

// Fonction pour générer le résultat d'un dé à n faces

private int D(int n)
{
	return Random.Range(1,n+1);
}

// Exemple d'utilisation:
private void Test()
{
	// Ici, les points de vie sont la somme d'un dé à 6 faces, d'un dé à 12 faces et d'un dé à 20 faces
	int ptsVie = D(6) + D(12) +D(20);
	Debug.Log(ptsVie);
}

// Fonction qui retourne un mot au hasard

private string Piger()
{
	int n = Random.Range(1, 4);
	if(n==1)
	{
		return "Pomme";
	}
	else if(n==2)
	{
		return "Raisin";
	}
	else
	{
		return "Banane";
	}
}

// Exemple d'utilisation:
private void Test()
{
	Debug.Log( Piger() ); // Affiche un des fruits au hasard
}

Validation

Une fonction de validation est une fonction avec retour qui fait essentiellement passer des tests à une valeur reçue et retourne true ou false en conséquence.

Ce sont des fonctions utilitaires qui servent à s'assurer que des valeurs sont valides avant de les utiliser pour certaines opérations.

On valide surtout les valeurs externes à un programme: saisies de l'usager dans un formulaire ou valeurs obtenues en consultant une base de données par exemple.

Quelques exemples de validations:
// Fonction qui valide si un entier est bien compris de a à b
private bool ComprisEntre(int valeur, int a, int b)
{
	if(valeur>=a && valeur <=b)
	{
		return true;
	}
	return false;
}

// Exemple d'utilisation
private void Test()
{
	int n = Random.Range(1,7) + Random.Range(1,7);
	
	if( ComprisEntre(n, 5, 7) )
	{
		Debug.Log("Résultat moyen");
	}
	else
	{
		Debug.Log("Résultat autre...");
	}
}

// Fonction qui valide si une chaine reçue contient bien un nombre entier
private bool EstEntier(string chaine)
{
	int n;
	bool valide = int.TryParse(chaine, out n);
	return bool;
}

// Exemple d'utilisation
[SerializeField] private InputField _ageUsager; // champ de saisie sur la scène...

private void Test()
{
	string ageChaine = _ageUsager.text;
	
	if( EstEntier(ageChaine) )
	{
		Debug.Log($"Vous avez {ageChaine} ans.");
	}
	else
	{
		Debug.Log("Entrez un nombre pour votre age svp.");
	}
}