Parcours
/
Go
Go
/
Exercices
/
Recensement
Recensement

Recensement

Exercice d'apprentissage

Introduction

Go n'a pas de notion de vide, de null ou d'undefined pour la valeur des variables. Les variables déclarées sans valeur initiale explicite prennent par défaut la valeur zéro de leur type respectif.

La valeur zéro des types primitifs, comme les booléens, les types numériques et les strings, est respectivement false, 0 et "".

L'identifiant nil, qui signifie zéro, est la valeur zéro des types plus complexes, comme les pointeurs, les fonctions, les interfaces, les slices, les channels et les maps.

Le tableau suivant détaille la valeur zéro des types de Go.

Type Valeur zéro
booléen false
numérique 0
string ""
pointeur nil
fonction nil
interface nil
slice nil
channel nil
map nil

Tu as peut-être remarqué que les types structure sont absents du tableau ci-dessus. C'est parce que la valeur zéro d'une structure dépend de ses champs. Une structure est mise à sa valeur zéro lorsque tous ses champs sont mis à leur valeur zéro respective.

Instructions

Ton travail consiste à préparer le système informatique de la ville pour un prochain recensement. Plus précisément, tu es responsable du programme qui traitera les données des agents recenseurs.

Le programme doit pouvoir créer un nouvel habitant dans le système à partir des informations d'un habitant. De plus, tu vas écrire des fonctions qui vérifient que les informations requises sont bien présentes dans les données d'un habitant, et qui suppriment les données d'un habitant. Enfin, tu compteras les habitants pour fournir un décompte précis du recensement.

1. Créer un nouvel habitant

Lorsqu'un agent recenseur collecte les informations d'un habitant, il doit enregistrer cet habitant en saisissant son nom, son âge et son adresse dans le système.

Implémente la fonction NewResident qui prend trois arguments :

  • Le nom de l'habitant.
  • L'âge de l'habitant.
  • L'adresse de l'habitant.

La fonction doit renvoyer un pointeur vers une structure Resident qui contient ces informations.

name := "Matthew Sanabria"
age := 29
address := map[string]string{"street": "Main St."}

NewResident(name, age, address)
// => &{Matthew Sanabria 29 map[street:Main St.]}

2. Valider les informations requises

Les habitants peuvent être réticents à fournir des données personnelles aux agents recenseurs. Dans ce cas, il est nécessaire de déterminer si l'habitant a fourni les informations requises pour être compté dans le recensement.

Pour être compté, un habitant doit fournir une valeur non nulle pour son nom et une adresse qui contient une valeur non nulle pour la clé street. Toutes les autres informations, comme l'âge de l'habitant, sont facultatives. Implémente la méthode HasRequiredInfo qui renvoie un booléen indiquant si l'habitant a fourni les informations requises.

name := "Matthew Sanabria"
age := 0
address := make(map[string]string)

resident := NewResident(name, age, address)

resident.HasRequiredInfo()
// => false

3. Supprimer les informations d'un habitant

La vie va vite et les erreurs arrivent. Un habitant peut quitter la ville. Un agent recenseur peut faire des erreurs en collectant les données. Dans ces cas, il est nécessaire de pouvoir supprimer les données d'un habitant afin qu'il ne soit pas compté.

Implémente la méthode Delete qui remet tous les champs de l'habitant à leur valeur nulle.

name := "Matthew Sanabria"
age := 29
address := map[string]string{"street": "Main St."}

resident := NewResident(name, age, address)

fmt.Println(resident)
// Output: &{Matthew Sanabria 29 map[street:Main St.]}

resident.Delete()

fmt.Println(resident)
// Output: &{ 0 map[]}

4. Compter les habitants

Maintenant que le système prend en charge les données du recensement, il est temps de réaliser le recensement et de compter les habitants !

Implémente la fonction Count qui prend un argument :

  • Un slice de pointeurs vers des structures Resident.

La fonction doit renvoyer un entier indiquant le nombre d'habitants comptés lors du recensement. Un habitant ne peut être compté que s'il a fourni les informations requises à l'agent recenseur.

name1 := "Matthew Sanabria"
age1 := 29
address1 := map[string]string{"street": "Main St."}

resident1 := NewResident(name1, age1, address1)

name2 := "Rob Pike"
age2 := 0
address2 := make(map[string]string)

resident2 := NewResident(name2, age2, address2)

residents := []*Resident{resident1, resident2}

Count(residents)
// => 1
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Go Exercism

Prêt à commencer Recensement ?

Inscris-toi sur Exercism pour apprendre et maîtriser Go avec 34 concepts166 exercices, et un vrai mentorat humain, le tout gratuitement.