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 (interfaces) davranış sözleşmelerini nasıl tanımladığını ve özel hataların (custom errors) doğrulama başarısız olduğunda nasıl anlamlı geri bildirimler sağladığını gösteren bir sayı doğrulama sistemi oluşturun. Bu meydan okuma, arayüzler oluşturma, bunları özel türlerle uygulama ve doğrulama hatalarını uygun şekilde yönetme yeteneğinizi test edecektir.

İki girdi alacaksınız:

  • Doğrulanacak sayıları içeren, virgülle ayrılmış bir dize (örneğin, "45,150,25,200,75")
  • "min:max" formatında doğrulama aralığını içeren bir dize (örneğin, "1:100")

Göreviniz şunları yapmaktır:

  1. Tek bir metoda sahip bir Validator arayüzü tanımlayın: Validate() error
  2. Value (int) ve Message (string) olmak üzere iki alana sahip ValidationError adında özel bir hata yapısı (struct) oluşturun
  3. ValidationError için, mesajı şu formatta döndüren Error() string metodunu uygulayın: "Validation failed: [message] (value: [value])"
  4. Number (int), Min (int) ve Max (int) olmak üzere üç alana sahip bir NumberValidator yapısı oluşturun
  5. NumberValidator için şu işlemleri yapan Validate() error metodunu uygulayın:
    • Sayı geçerli aralıktaysa (sınırlar dahil) nil döndürür
    • Sayı minimum değerden küçükse "number below minimum range" mesajıyla bir ValidationError döndürür
    • Sayı maksimum değerden büyükse "number above maximum range" mesajıyla bir ValidationError döndürür
  6. Bireysel sayı dizelerini elde etmek için ilk girdiyi virgüllerden ayırarak ayrıştırın
  7. Minimum ve maksimum değerleri çıkarmak için ikinci girdiyi iki nokta üst üste işaretinden ayırarak ayrıştırın
  8. strconv paketini kullanarak tüm dize değerlerini tam sayılara (integer) dönüştürün
  9. Doğrulama başlığını görüntüleyin: "=== NUMBER VALIDATION SYSTEM ==="
  10. Doğrulama parametrelerini görüntüleyin: "Validating numbers in range [min] to [max]"
  11. Her sayı için:
    • Sayı ve aralık değerleriyle bir NumberValidator örneği oluşturun
    • Doğrulayıcı üzerinde Validate() metodunu çağırın
    • Doğrulama geçerse (hata nil ise), şunu görüntüleyin: "✓ [number] is valid"
    • Doğrulama başarısız olursa (hata nil değilse), şunu görüntüleyin: "✗ [error_message]"
  12. Doğrulama özetini görüntüleyin:
    • "=== VALIDATION SUMMARY ==="
    • "Total numbers checked: [total_count]"
    • "Valid numbers: [valid_count]"
    • "Invalid numbers: [invalid_count]"
  13. Tamamlanma mesajını görüntüleyin: "Number validation completed successfully"

Girdi dizelerini bölmek için strings paketini, dizeleri tam sayılara dönüştürmek için strconv paketini ve formatlı çıktı için fmt paketini kullanın. Bu meydan okuma, özel hata türleri aracılığıyla ayrıntılı hata bilgisi sağlarken arayüzleri kullanarak nasıl esnek doğrulama sistemleri 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