Menu
Coddy logo textTech

Validateur de nombres simple

Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 67 sur 68.

challenge icon

Défi

Facile

Créez un système de validation de nombres qui montre comment les interfaces définissent des contrats de comportement, tandis que les erreurs personnalisées fournissent des informations utiles lorsque la validation échoue. Ce défi testera votre capacité à créer des interfaces, à les implémenter avec des types personnalisés et à gérer correctement les erreurs de validation.

Vous recevrez deux entrées :

  • Une chaîne contenant des nombres à valider, séparés par des virgules (par exemple, "45,150,25,200,75")
  • Une chaîne contenant la plage de validation au format "min:max" (par exemple, "1:100")

Votre tâche consiste à :

  1. Définir une interface Validator avec une seule méthode : Validate() error
  2. Créer un type d’erreur personnalisé appelé structure ValidationError avec deux champs : Value (int) et Message (string)
  3. Implémenter la méthode Error() string pour ValidationError, qui renvoie le message au format suivant : "Validation failed: [message] (value: [value])"
  4. Créer une structure NumberValidator avec trois champs : Number (int), Min (int) et Max (int)
  5. Implémenter la méthode Validate() error pour NumberValidator afin qu’elle :
    • Renvoie nil si le nombre se trouve dans la plage valide (bornes incluses)
    • Renvoie une ValidationError avec le message "number below minimum range" si le nombre est inférieur au minimum
    • Renvoie une ValidationError avec le message "number above maximum range" si le nombre est supérieur au maximum
  6. Analyser la première entrée en la séparant sur les virgules afin d’obtenir les chaînes représentant chaque nombre
  7. Analyser la deuxième entrée en la séparant sur les deux-points afin d’extraire les valeurs minimale et maximale
  8. Convertir toutes les valeurs de chaîne en entiers à l’aide du package strconv
  9. Afficher l’en-tête de validation : "=== NUMBER VALIDATION SYSTEM ==="
  10. Afficher les paramètres de validation : "Validating numbers in range [min] to [max]"
  11. Pour chaque nombre :
    • Créer une instance de NumberValidator avec le nombre et les valeurs de la plage
    • Appeler la méthode Validate() sur le validateur
    • Si la validation réussit (l’erreur vaut nil), afficher : "✓ [number] is valid"
    • Si la validation échoue (l’erreur ne vaut pas nil), afficher : "✗ [error_message]"
  12. Afficher le résumé de la validation :
    • "=== VALIDATION SUMMARY ==="
    • "Total numbers checked: [total_count]"
    • "Valid numbers: [valid_count]"
    • "Invalid numbers: [invalid_count]"
  13. Afficher le message de fin : "Number validation completed successfully"

Utilisez le package strings pour séparer les chaînes d’entrée, le package strconv pour convertir les chaînes en entiers et le package fmt pour produire un affichage formaté. Ce défi montre comment créer des systèmes de validation flexibles à l’aide d’interfaces, tout en fournissant des informations détaillées sur les erreurs grâce à des types d’erreurs personnalisés.

Essayez vous-même

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// Lire l'entrée
	var numbersInput string
	var rangeInput string
	fmt.Scanln(&numbersInput)
	fmt.Scanln(&rangeInput)
	
	// Analyser les entrées
	numberStrings := strings.Split(numbersInput, ",")
	rangeParts := strings.Split(rangeInput, ":")
	
	// Convertir les valeurs de la plage en entiers
	min, _ := strconv.Atoi(rangeParts[0])
	max, _ := strconv.Atoi(rangeParts[1])
	
	// TODO: Écrivez votre code ci-dessous
	// 1. Définir l'interface Validator
	// 2. Créer la structure ValidationError et implémenter la méthode Error()
	// 3. Créer la structure NumberValidator et implémenter la méthode Validate()
	// 4. Traiter chaque nombre et le valider
	// 5. Afficher les résultats et le résumé
	
	// Afficher l'en-tête de validation
	fmt.Println("=== NUMBER VALIDATION SYSTEM ===")
	fmt.Printf("Validating numbers in range %d to %d\n", min, max)
	
	// Traiter chaque nombre ici
	
	// Afficher le résumé de la validation
	fmt.Println("=== VALIDATION SUMMARY ===")
	// Ajouter la sortie du résumé ici
	
	fmt.Println("Number validation completed successfully")
}

Toutes les leçons de Logique & Flux

Entraînez-vous par vous-même : Compilateur Go en ligne