Menu
Coddy logo textTech

Sıfır Değerler ve Varsayılanlar

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 17 / 107.

Go'da her değişkenin bir sıfır değeri (zero value) vardır; bu, bir değişkeni açıkça başlatmadan tanımladığınızda atanan varsayılan değerdir. Başlatılmamış alanlar otomatik olarak bu varsayılanları aldığı için, sıfır değerlerini anlamak struct'larla çalışırken çok önemlidir.

Her türün kendine özgü bir sıfır değeri vardır:

TürSıfır Değeri
int, float640
string"" (boş string)
boolfalse
pointer, slice, mapnil

Bir struct oluşturduğunuzda, açıkça ayarlamadığınız her alan sıfır değerini (zero value) alır.

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (boş dize)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Bu durum kısmi başlatma için de geçerlidir. Yalnızca belirttiğiniz alanlar özel değerler alır.

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

Sıfır değerler (zero values), struct'ları açık bir başlatma işlemi gerektirmeden hemen kullanılabilir hale getirir. Ancak, slice ve map gibi referans türlerine dikkat edin; bunların sıfır değeri nil'dir ve bu türleri başlatmadan kullanmaya çalışmak çalışma zamanı paniklerine (runtime panics) yol açabilir.

challenge icon

Görev

Kolay

Go'de sıfır değerlerin (zero values) nasıl çalıştığını gösteren bir oyuncu profili sistemi oluşturalım. Bazı alanların açıkça ayarlandığı, diğerlerinin ise varsayılan sıfır değerlerine dayandığı bir oyun profili oluşturacaksınız.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • player.go: Şu alanlara sahip bir Player yapısı (struct) tanımlayın: Username (string), Level (int), Score (int), IsPremium (bool) ve GuildName (string). Ayrıca, oyuncunun tüm bilgilerini gösteren formatlanmış bir dize döndüren bir DisplayProfile metodu oluşturun.
  • main.go: Girişten bir kullanıcı adı okuyun ve yalnızca kısmi başlatma (partial initialization) kullanarak bir Player oluşturun—sadece Username alanını ayarlayın. Ardından, Go'nun ayarlanmamış alanları sıfır değerleriyle nasıl doldurduğunu görmek için tam profili görüntüleyin.

Aşağıdaki giriş sağlanacaktır:

  • Satır 1: Oyuncunun kullanıcı adı

DisplayProfile metodunuz tam olarak şu formatta bir dize döndürmelidir:

Username: [Username]
Level: [Level]
Score: [Score]
Premium: [IsPremium]
Guild: [GuildName]

Örneğin, kullanıcı adı ShadowKnight ise, çıktınız kullanıcı adıyla birlikte başlatılmamış alanlar için tüm sıfır değerlerini göstermelidir:

Username: ShadowKnight
Level: 0
Score: 0
Premium: false
Guild: 

Guild alanının iki noktadan sonra hiçbir şey göstermediğine dikkat edin—bu, boş dize (empty string) sıfır değeridir. Bu meydan okuma, açık bir değer sağlamadığınızda Go'nun her türe tam olarak ne atadığını görmenize yardımcı olur.

Kopya kağıdı

Go'da her değişkenin bir sıfır değeri (zero value) vardır — bu, bir değişkeni açıkça başlatmadan bildirdiğinizde atanan varsayılan değerdir.

Her türün kendi sıfır değeri vardır:

TürSıfır Değeri
int, float640
string"" (boş dize)
boolfalse
pointer, slice, mapnil

Bir struct oluşturduğunuzda, açıkça ayarlamadığınız her alan kendi sıfır değerini alır:

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (empty string)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Kısmi başlatma — yalnızca belirtilen alanlar özel değerler alır:

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

Sıfır değerleri, struct'ları açıkça başlatmaya gerek kalmadan hemen kullanılabilir hale getirir. Slice ve map gibi referans türlerine dikkat edin — bunların sıfır değeri nil'dir ve başlatılmadan kullanılırlarsa çalışma zamanı hatalarına (runtime panics) neden olabilirler.

Kendin dene

package main

import (
	"fmt"
)

func main() {
	// Kullanıcı adını girdiden oku
	var username string
	fmt.Scanln(&username)

	// TODO: Kısmi başlatma kullanarak bir Player oluştur
	// Sadece Username alanını ayarla, diğer alanların sıfır değerlerini kullanmasına izin ver

	// TODO: DisplayProfile metodunu kullanarak oyuncunun profilini görüntüle
}
quiz iconKendini test et

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

Nesne Yönelimli Programlama bölümündeki tüm dersler