Jeu Vidéo 2

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

Types de données

C# et le typage

En C#, il est requis de spécifier le type d'une variable, d'un champ ou d'un paramètre de fonction dès sa déclaration.

On dit souvent de ce fait que c'est un langage au typage fort.

Cela implique que si une variable, par exemple, est déclarée comme étant d'un certain type (chaîne, entier, etc.) elle ne pourra se voir affecter des valeurs d'un autre type, et ce toute sa vie durant.

Par rapport à un typage dynamique dans lequel les variables peuvent changer de type aisément (comme en JavaScript par exemple), le typage fort (strict) offre des avantages importants:

  • L'exécution du code est plus rapide.
  • La mémoire de l'ordinateur est utilisée plus efficacement.
  • La compilation du code est plus efficace.
  • Les messages d'erreurs sont souvent plus précis.

Types primitifs les plus utilisés
  • bool → true ou false
  • int → un entier, négatif ou positif
  • float → nombre réel, positif ou négatif. Une valeur float est suivie d'un f ( ex: 2.5f )
  • double → nombre réel, positif ou négatif, bien plus grand qu'un float (très grande précision). Une valeur double est suivie d'un d ( ex: 1.1d )
  • string → une chaîne de caractères. Un string est délimité par des guillemets ( ex: "Bob")
  • char → un seul caractère Unicode. Un char est délimité par des apostrophes ( ex: 'a' )
Quelques types 'complexes' (indiquent l'appartenance à une classe spéciale...)
  • GameObject → un objet qui représente un élément affichable sur la scène dans Unity
  • Sprite → un élément graphique 2d
  • Sound → un objet son
  • Text → un champ de texte (UI)
  • Button → bouton (UI)
  • List → une collection de taille variable pour des valeurs de même type
  • Vector2 → un objet stockant une position x, y
  • Vector3 → un objet stockant une position x, y, z
  • etc...

Intégrer des variables dans une chaine

Voici 2 façons d'incorporer les valeurs de variables dans une chaine

string prenom = "Bob";
int age = 20;

// --- concaténation "classique"
string phrase1 = "Mon nom est " + prenom + " et j'ai " + age + " ans.";

// --- interpolation de chaine
string phrase2 = $"Mon nom est {prenom} et j'ai {age} ans.";

Quelques conversions fréquentes

Voici quelques opérations de conversions de base.

// Convertir un int en float ---------------------
int a = 2;
float b = (float) a; // b vaut 2.0f

// Convertir un float en int ---------------------
float a = 2.9f;
int b = (int) a; // b vaut 2

// Convertir un nombre en chaîne ---------------------
// --- exemple 1:
float a = 2.9f;
string b = a.ToString(); // b vaut "2.9"

// --- exemple 2:
float a = 1.77f;
string b = a+""; // b vaut "1.77"

// --- exemple 3:
float a = 6.1f;
string b = $"{a}"; // b vaut "6.1"

// Convertir une chaine en nombre ---------------------
// --- exemple 1:
string a = "245";
int b = int.Parse(a); // b vaut 245

// --- exemple 2:
string a = "245allo";
int b = int.Parse(a); // ERREUR: La chaine contient autre chose qu'un entier valide!

// --- exemple 3:
string a = "3.22";
float b = float.Parse(a); // b vaut 3.22f

Le typage et les fonctions

Dans une fonction, on doit indiquer le type des paramètres à recevoir, et le type de la donnée retournée par la fonction.

void DiviserEntiers(int entier1, int entier2){
	float division = entier1 / (float) entier2; // conversion en float requise ici!
	string message = $"La division de {entier1} par {entier2} donne {division}";
    Debug.Log(message);
}

Indiquer juste avant le nom de la fonction le type de donnée qu'elle retourne (si elle a un return).

Si la fonction ne retourne pas de donnée, on doit utiliser le mot-clé void pour le spécifier.

// Fonction sans return
private void AfficherAllo(){
	Debug.Log("Allo");
}

// Fonction avec return
private string Saluer(){
	return "Salut";
}