Menu
Coddy logo textTech

Pointer Receiver'lar

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

Değer alıcıları yapıların kopyalarıyla çalışırken, işaretçi alıcıları doğrudan özgün yapı örneğiyle çalışır. Bir yöntemi işaretçi alıcısıyla tanımladığınızda, yöntem kopya yerine yapıya bir işaretçi aldığı için özgün verileri değiştirebilir.

Bir işaretçi alıcısı oluşturmak için alıcı bildirimindeki tür adının önüne bir yıldız işareti * eklersiniz:

type Person struct {
    Name string
    Age  int
}

func (p *Person) haveBirthday() {
    p.Age++  // Bu orijinal struct'ı değiştirir
}

Bu örnekte (p *Person) bir işaretçi alıcısıdır. Person örneği üzerinde haveBirthday yöntemini çağırdığınızda, yöntem özgün yapıya bir işaretçi alır. Bu işaretçi aracılığıyla yapı alanlarında yapılan tüm değişiklikler, özgün verileri kalıcı olarak değiştirir.

İşaretçi alıcılar, yöntemlerinizin yapının alanlarını güncellemesi gerektiğinde çok önemlidir; bu da onları verilerinizin durumunu değiştiren işlemler için ideal kılar.

challenge icon

Görev

Kolay

Bu meydan okumada, basit bir banka hesabı sistemi oluşturarak işaretçi alıcılarla yöntemler oluşturma pratiği yapacaksınız. Bir Account yapısı oluşturacak ve işaretçi alıcıları kullanarak hesap bakiyesini değiştirebilen yöntemler tanımlayacaksınız.

Üç girdi alacaksınız:

  • Hesap sahibinin adını temsil eden bir dize (ör. "John Smith")
  • Başlangıç hesap bakiyesini temsil eden bir dize (ör. "1000.50")
  • İşlem tutarını temsil eden bir dize (ör. "250.75")

Göreviniz:

  1. İki alana sahip bir Account yapısı tanımlayın: Name (string) ve Balance (float64)
  2. Verilen tutarı hesap bakiyesine ekleyen, işaretçi alıcılı deposit adlı bir yöntem oluşturun
  3. Verilen tutarı hesap bakiyesinden çıkaran, işaretçi alıcılı withdraw adlı bir yöntem oluşturun
  4. Hesap bilgilerini şu biçimde yazdıran, değer alıcılı displayBalance adlı bir yöntem oluşturun: "Account: [name], Balance: $[balance]"
  5. Bir Account örneği oluşturmak için girdileri ayrıştırın
  6. Başlangıç bakiyesini göstermek için displayBalance çağrısını yapın
  7. İşlem tutarıyla deposit çağrısını yapın
  8. Para yatırma işleminden sonraki bakiyeyi göstermek için displayBalance çağrısını yapın
  9. İşlem tutarıyla withdraw çağrısını yapın
  10. Son bakiyeyi göstermek için displayBalance çağrısını yapın

Bakiye, iki ondalık basamak duyarlılığıyla görüntülenmelidir. Bu meydan okuma, değer alıcılarının kopyalarla çalışmasının aksine, işaretçi alıcıların yöntemlerin özgün yapı verilerini değiştirmesine nasıl olanak sağladığını gösterir.

Kendin dene

package main

import (
	"fmt"
	"strconv"
)

// TODO: Burada Account yapısını (struct) tanımlayın

// TODO: Burada işaretçi alıcılı (pointer receiver) deposit metodunu tanımlayın

// TODO: Burada işaretçi alıcılı (pointer receiver) withdraw metodunu tanımlayın

// TODO: Burada değer alıcılı (value receiver) displayBalance metodunu tanımlayın

func main() {
	// Girdiyi oku
	var name string
	var initialBalanceStr string
	var transactionAmountStr string
	
	fmt.Scanln(&name)
	fmt.Scanln(&initialBalanceStr)
	fmt.Scanln(&transactionAmountStr)
	
	// Dize girdilerini uygun türlere dönüştür
	initialBalance, _ := strconv.ParseFloat(initialBalanceStr, 64)
	transactionAmount, _ := strconv.ParseFloat(transactionAmountStr, 64)
	
	// TODO: Bir Account örneği oluşturun
	
	// TODO: Başlangıç bakiyesini görüntüleyin, para yatırma işlemini gerçekleştirin, bakiyeyi görüntüleyin, para çekme işlemini gerçekleştirin, son bakiyeyi görüntüleyin
}
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