Menu
Coddy logo textTech

Validatore semplice di numeri

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 67 di 68.

challenge icon

Sfida

Facile

Crea un sistema di convalida dei numeri che dimostri come le interfacce definiscano contratti di comportamento, mentre gli errori personalizzati forniscano un feedback significativo quando la convalida non riesce. Questa sfida metterà alla prova la tua capacità di creare interfacce, implementarle con tipi personalizzati e gestire gli errori di convalida in modo appropriato.

Riceverai due input:

  • Una stringa contenente numeri da convalidare separati da virgole (ad es. "45,150,25,200,75")
  • Una stringa contenente l'intervallo di convalida nel formato "min:max" (ad es. "1:100")

Il tuo compito è:

  1. Definire un'interfaccia Validator con un solo metodo: Validate() error
  2. Creare un tipo di errore personalizzato chiamato struct ValidationError con due campi: Value (int) e Message (string)
  3. Implementare il metodo Error() string per ValidationError, che restituisce il messaggio nel formato: "Validation failed: [message] (value: [value])"
  4. Creare una struct NumberValidator con tre campi: Number (int), Min (int) e Max (int)
  5. Implementare il metodo Validate() error per NumberValidator in modo che:
    • Restituisca nil se il numero rientra nell'intervallo valido (estremi inclusi)
    • Restituisca un ValidationError con il messaggio "number below minimum range" se il numero è minore del minimo
    • Restituisca un ValidationError con il messaggio "number above maximum range" se il numero è maggiore del massimo
  6. Analizzare il primo input suddividendolo in corrispondenza delle virgole per ottenere le singole stringhe numeriche
  7. Analizzare il secondo input suddividendolo in corrispondenza dei due punti per estrarre i valori minimo e massimo
  8. Convertire tutte le stringhe in numeri interi usando il package strconv
  9. Visualizzare l'intestazione della convalida: "=== NUMBER VALIDATION SYSTEM ==="
  10. Visualizzare i parametri di convalida: "Validating numbers in range [min] to [max]"
  11. Per ogni numero:
    • Creare un'istanza di NumberValidator con il numero e i valori dell'intervallo
    • Chiamare il metodo Validate() sul validatore
    • Se la convalida riesce (l'errore è nil), visualizzare: "✓ [number] is valid"
    • Se la convalida non riesce (l'errore non è nil), visualizzare: "✗ [error_message]"
  12. Visualizzare il riepilogo della convalida:
    • "=== VALIDATION SUMMARY ==="
    • "Total numbers checked: [total_count]"
    • "Valid numbers: [valid_count]"
    • "Invalid numbers: [invalid_count]"
  13. Visualizzare il messaggio di completamento: "Number validation completed successfully"

Usa il package strings per suddividere le stringhe di input, il package strconv per convertire le stringhe in numeri interi e il package fmt per l'output formattato. Questa sfida dimostra come creare sistemi di convalida flessibili usando le interfacce e fornendo informazioni dettagliate sugli errori tramite tipi di errore personalizzati.

Provalo tu

package main

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

func main() {
	// Leggi l'input
	var numbersInput string
	var rangeInput string
	fmt.Scanln(&numbersInput)
	fmt.Scanln(&rangeInput)
	
	// Analizza gli input
	numberStrings := strings.Split(numbersInput, ",")
	rangeParts := strings.Split(rangeInput, ":")
	
	// Converti i valori dell'intervallo in numeri interi
	min, _ := strconv.Atoi(rangeParts[0])
	max, _ := strconv.Atoi(rangeParts[1])
	
	// TODO: Scrivi il tuo codice qui sotto
	// 1. Definisci l'interfaccia Validator
	// 2. Crea la struct ValidationError e implementa il metodo Error()
	// 3. Crea la struct NumberValidator e implementa il metodo Validate()
	// 4. Elabora ogni numero e convalidalo
	// 5. Mostra i risultati e il riepilogo
	
	// Mostra l'intestazione della convalida
	fmt.Println("=== NUMBER VALIDATION SYSTEM ===")
	fmt.Printf("Validating numbers in range %d to %d\n", min, max)
	
	// Elabora ogni numero qui
	
	// Mostra il riepilogo della convalida
	fmt.Println("=== VALIDATION SUMMARY ===")
	// Aggiungi qui l'output riepilogativo
	
	fmt.Println("Number validation completed successfully")
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online