Menu
Coddy logo textTech

Basit Sayı Doğrulayıcı

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 67 / 68.

challenge icon

Görev

Kolay

Arayüzlerin davranış sözleşmelerini nasıl tanımladığını ve özel hataların doğrulama başarısız olduğunda anlamlı geri bildirimleri nasıl sağladığını gösteren bir sayı doğrulama sistemi oluştur. Bu görev, arayüzler oluşturma, bunları özel türlerle uygulama ve doğrulama hatalarını uygun şekilde ele alma becerini test edecek.

İki girdi alacaksın:

  • Virgüllerle ayrılmış, doğrulanacak sayıları içeren bir dize (ör. "45,150,25,200,75")
  • "min:max" biçiminde doğrulama aralığını içeren bir dize (ör. "1:100")

Görevin:

  1. Tek bir yönteme sahip bir Validator arayüzü tanımla: Validate() error
  2. İki alana sahip ValidationError adlı özel bir hata türü yapısı oluştur: Value (int) ve Message (string)
  3. Error() string için, mesajı şu biçimde döndüren ValidationError yöntemini uygula: "Validation failed: [message] (value: [value])"
  4. Üç alana sahip bir NumberValidator yapısı oluştur: Number (int), Min (int) ve Max (int)
  5. Validate() error için şu işlemleri yapan NumberValidator yöntemini uygula:
    • Sayı geçerli aralık içindeyse (sınırlar dahil) nil döndürür
    • Sayı minimumdan küçükse ValidationError mesajına sahip bir "number below minimum range" döndürür
    • Sayı maksimumdan büyükse ValidationError mesajına sahip bir "number above maximum range" döndürür
  6. Bireysel sayı dizelerini elde etmek için ilk girdiyi virgüllere göre böl
  7. Minimum ve maksimum değerleri çıkarmak için ikinci girdiyi iki nokta üst üste işaretlerine göre böl
  8. Tüm dize değerlerini strconv paketini kullanarak tamsayılara dönüştür
  9. Doğrulama başlığını görüntüle: "=== NUMBER VALIDATION SYSTEM ==="
  10. Doğrulama parametrelerini görüntüle: "Validating numbers in range [min] to [max]"
  11. Her sayı için:
    • Sayı ve aralık değerleriyle bir NumberValidator örneği oluştur
    • Doğrulayıcı üzerinde Validate() yöntemini çağır
    • Doğrulama başarılı olursa (hata nil ise) şunu görüntüle: "✓ [number] is valid"
    • Doğrulama başarısız olursa (hata nil değilse) şunu görüntüle: "✗ [error_message]"
  12. Doğrulama özetini görüntüle:
    • "=== VALIDATION SUMMARY ==="
    • "Total numbers checked: [total_count]"
    • "Valid numbers: [valid_count]"
    • "Invalid numbers: [invalid_count]"
  13. Tamamlanma mesajını görüntüle: "Number validation completed successfully"

Girdi dizelerini bölmek için strings paketini, dizeleri tamsayılara dönüştürmek için strconv paketini ve biçimlendirilmiş çıktı için fmt paketini kullan. Bu görev, özel hata türleri aracılığıyla ayrıntılı hata bilgileri sağlarken arayüzleri kullanarak esnek doğrulama sistemlerinin nasıl oluşturulacağını gösterir.

Kendin dene

package main

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

func main() {
	// Girdiyi oku
	var numbersInput string
	var rangeInput string
	fmt.Scanln(&numbersInput)
	fmt.Scanln(&rangeInput)
	
	// Girdileri ayrıştır
	numberStrings := strings.Split(numbersInput, ",")
	rangeParts := strings.Split(rangeInput, ":")
	
	// Aralık değerlerini tam sayıya dönüştür
	min, _ := strconv.Atoi(rangeParts[0])
	max, _ := strconv.Atoi(rangeParts[1])
	
	// TODO: Kodunuzu aşağıya yazın
	// 1. Validator arayüzünü (interface) tanımlayın
	// 2. ValidationError yapısını (struct) oluşturun ve Error() metodunu uygulayın
	// 3. NumberValidator yapısını oluşturun ve Validate() metodunu uygulayın
	// 4. Her bir sayıyı işleyin ve doğrulayın
	// 5. Sonuçları ve özeti görüntüleyin
	
	// Doğrulama başlığını görüntüle
	fmt.Println("=== NUMBER VALIDATION SYSTEM ===")
	fmt.Printf("Validating numbers in range %d to %d\n", min, max)
	
	// Her bir sayıyı burada işleyin
	
	// Doğrulama özetini görüntüle
	fmt.Println("=== VALIDATION SUMMARY ===")
	// Özet çıktısını buraya ekleyin
	
	fmt.Println("Number validation completed successfully")
}

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi