Menu
Coddy logo textTech

Tip Seçimi

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

Tür onayları tek bir türü kontrol etmek için iyi çalışsa da bir arayüz değişkeni için genellikle birden çok olası türü ele almanız gerekir. İşte tür anahtarının son derece kullanışlı olduğu nokta burasıdır - somut türe göre farklı eylemler gerçekleştirmek için temiz bir yol sağlar.

Bir tür switch’i şu özel sözdizimini kullanır: switch v := i.(type). Belirli bir tür yerine (type) anahtar sözcüğünün kullanıldığına dikkat et. v değişkeni her case’te somut türüyle birlikte gerçek değeri içerecektir:

func describe(data interface{}) {
    switch v := data.(type) {
    case int:
        fmt.Printf("Integer: %d\n", v)
    case string:
        fmt.Printf("String: %s\n", v)
    case bool:
        fmt.Printf("Boolean: %t\n", v)
    default:
        fmt.Printf("Unknown type: %T\n", v)
    }
}

Her durumda v otomatik olarak doğru türe sahip olur; ek bir tür doğrulamasına gerek yoktur. Bu, özellikle tek bir yerde birkaç farklı türü işlemeniz gerektiğinde, tür anahtarlarını birden fazla tür doğrulamasını if-else ifadeleriyle zincirlemekten çok daha anlaşılır hâle getirir.

challenge icon

Görev

Kolay

Bu challenge'da, bir notification system içinde birden fazla data type'ı işlemek için type switch kullanmayı pratiğe dökeceksin. Farklı notification type'larını işleyen ve bunları concrete type'larına based uygun şekilde biçimlendiren bir function oluşturacaksın.

İki input alacaksın:

  • Notification type'ını temsil eden bir string (ör. "email", "sms", "push" veya "alert")
  • Notification content'ını veya değerini temsil eden bir string

Görevin:

  1. processNotification adında, interface{} parameter alan bir function oluşturmak
  2. Notification type input'una based olarak content'ı appropriate Go type'a convert etmek ve bir interface{} variable içinde saklamak:
    • "email" için: content'ı string olarak kullan
    • "sms" için: content'ı bir integer'a convert et (character count'ı temsil eder)
    • "push" için: content'ı bir boolean'a convert et ("enabled" için true, diğer her şey için false)
    • "alert" için: content'ı bir float64'e convert et (priority level'ı temsil eder)
  3. Convert edilmiş değerle processNotification function'ını çağırmak
  4. processNotification içinde her type'ı işlemek ve appropriate mesajı yazdırmak için bir type switch kullanmak:
    • string için: "Email notification: [value]"
    • int için: "SMS notification with [value] characters"
    • bool için: "Push notifications: [value]"
    • float64 için: "Alert with priority: [value]"
    • Diğer tüm type'lar için: "Unknown notification type"

String conversions için strconv package'ını kullan. Boolean conversion için yalnızca "enabled" değeri true sonucunu vermelidir. Bu challenge, type switch'lerin tek bir control structure içinde birden fazla type'ı işlemenin temiz bir yolunu nasıl sağladığını ve her case'te correctly typed value'yu otomatik olarak nasıl verdiğini gösterir.

float64 değerini, fmt.Println veya %v / %g verb'lerinin yaptığı gibi en kısa biçiminde yazdır: 3.5, 3.5 olarak; 1.0 ise 1 olarak yazdırılır (%f verb'i 1.000000 yazdırır).

Kendin dene

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// Girdiyi oku
	var notificationType string
	var content string
	fmt.Scanln(&notificationType)
	fmt.Scanln(&content)
	
	// TODO: Kodunuzu aşağıya yazın
	// 1. Create processNotification function that takes interface{} parameter
	// 2. Convert content to appropriate type based on notificationType
	// 3. Call processNotification with the converted value
	// 4. Use type switch inside processNotification to handle different types
	
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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

Kendi başına pratik yap: Online Go derleyicisi