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.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayBu 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:
- 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
- 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
- Tür onaylaması başarılı olursa şunu yazdırın:
"Success: [value] is a [type]" - 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
}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
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve Davranışlar