Menu
Coddy logo textTech

Tip Onaylamaları

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

Arayüz değişkenleriyle çalışırken, genellikle içlerinde saklanan gerçek somut değere erişmeniz gerekir. Tür onaylamaları (type assertions) burada devreye girer; bunlar, altta yatan değeri güvenli bir şekilde çıkarmanıza ve kullanmanıza olanak tanır.

Bir tür onayı (type assertion) şu sözdizimini kullanır: value, ok := interfaceVariable.(Type). İlk dönüş değeri, belirtilen türdeki çıkarılmış değerdir ve ikincisi, onayın başarılı olup olmadığını size bildiren bir boole değeridir.

var data interface{} = 42

number, ok := data.(int)
if ok {
    fmt.Println("It's an integer:", number)
} else {
    fmt.Println("Not an integer")
}

ok değişkeni güvenlik için kritik öneme sahiptir. Yanlış türü onaylamaya çalışırsanız, ok değeri false olur ve value o türün sıfır değeri olur. ok kontrolü yapılmazsa, başarısız bir tür onayı programınızın paniklemesine yol açar.

interface{} değerleriyle çalışırken tür onaylamaları (type assertions) çok önemlidir; bu, genel arayüzü belirli bir türe geri dönüştürmenize olanak tanıyarak onun metotlarını ve işlemlerini kullanabilmenizi sağlar.

quiz iconKendini test et

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

quiz iconKendini test et

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

quiz iconKendini test et

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

challenge icon

Görev

Kolay

Bu görevde, boş arayüz (interface) değişkenlerinden somut değerleri güvenli bir şekilde çıkarmak ve bunlarla çalışmak için tür onaylamalarını (type assertions) kullanma pratiği yapacaksınız. Boş arayüzlerde saklanan farklı türdeki değerleri işleyen bir veri analizörü oluşturacaksınız.

İki girdi alacaksınız:

  • Kontrol edilecek veri türünü temsil eden bir dize (örneğin, "int", "string" veya "bool")
  • Gerçek değeri temsil eden bir dize (örneğin, "42", "hello" veya "true")

Göreviniz şunları yapmaktır:

  1. Değer dizesini uygun Go türüne dönüştürün ve bir interface{} değişkeninde saklayın:
    • "int" için: tam sayıya dönüştürün
    • "string" için: dize olarak kullanın
    • "bool" için: boolean'a dönüştürün
  2. Arayüz değişkeninin ilk girdide belirtilen beklenen türü içerip içermediğini kontrol etmek için tür onaylamasını (type assertion) kullanın
  3. Tür onaylaması başarılı olursa şunu yazdırın: "Success: [value] is a [type]"
  4. Tür onaylaması başarısız olursa şunu yazdırın: "Failed: value is not a [type]"

Onaylamanın başarılı olup olmadığını kontrol etmek için ok değişkeni ile birlikte güvenli tür onaylama sözdizimini kullanmalısınız. Bu görev, programınızın paniklemesine (panic) neden olmadan arayüz değişkenlerinden somut değerleri nasıl güvenli bir şekilde çıkaracağınızı anlama yeteneğinizi test eder.

Boolean dönüşümü için, "true" değeri true değerine dönüşmeli ve diğer tüm dizeler false değerine dönüşmelidir. Dizeden tam sayıya dönüşüm için strconv paketini kullanın.

Kopya kağıdı

Tür onaylamaları (type assertions), value, ok := interfaceVariable.(Type) sözdizimini kullanarak arayüz değişkenlerinden somut değerler çıkarmanıza olanak tanır:

var data interface{} = 42

number, ok := data.(int)
if ok {
    fmt.Println("It's an integer:", number)
} else {
    fmt.Println("Not an integer")
}

ok değişkeni, onaylamanın başarılı olup olmadığını belirtir. Eğer false ise, value o türün sıfır değeri (zero value) olacaktır. Başarısız onaylamalardan kaynaklanan panikleri (panic) önlemek için her zaman ok değişkenini kontrol edin.

Kendin dene

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// Girdiyi oku
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// Arayüz (interface) değerini saklamak için değişken
	var interfaceValue interface{}
	
	// TODO: Kodunuzu aşağıya yazın
	// 1. valueStr'yi dataType'a göre uygun türe dönüştürün ve interfaceValue içinde saklayın
	// 2. interfaceValue'nun beklenen türü içerip içermediğini kontrol etmek için tür onayı (type assertion) kullanın
	// 3. Uygun başarı veya hata mesajını yazdırın
	
}
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