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 démontre comment les interfaces définissent des contrats de comportement tandis que les erreurs personnalisées fournissent un retour d'information significatif en cas d'échec de la validation. Ce défi testera votre capacité à créer des interfaces, à les implémenter avec des types personnalisés et à gérer les erreurs de validation de manière appropriée.

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 : "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 qui :
    • Renvoie nil si le nombre est dans la plage valide (inclusive)
    • 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 divisant par des virgules pour obtenir des chaînes de nombres individuelles
  7. Analyser la deuxième entrée en la divisant par des deux-points pour 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 plage
    • Appeler la méthode Validate() sur le validateur
    • Si la validation réussit (l'erreur est nil), afficher : "✓ [number] is valid"
    • Si la validation échoue (l'erreur n'est 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 diviser les chaînes d'entrée, le package strconv pour convertir les chaînes en entiers et le package fmt pour la sortie formatée. Ce défi démontre comment créer des systèmes de validation flexibles à l'aide d'interfaces tout en fournissant des informations d'erreur détaillées via des types d'erreur 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