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.
Görev
KolayBu 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:
- İki alana sahip bir
Accountyapısı tanımlayın:Name(string) veBalance(float64) - Verilen tutarı hesap bakiyesine ekleyen, işaretçi alıcılı
depositadlı bir yöntem oluşturun - Verilen tutarı hesap bakiyesinden çıkaran, işaretçi alıcılı
withdrawadlı bir yöntem oluşturun - Hesap bilgilerini şu biçimde yazdıran, değer alıcılı
displayBalanceadlı bir yöntem oluşturun:"Account: [name], Balance: $[balance]" - Bir
Accountörneği oluşturmak için girdileri ayrıştırın - Başlangıç bakiyesini göstermek için
displayBalanceçağrısını yapın - İşlem tutarıyla
depositçağrısını yapın - Para yatırma işleminden sonraki bakiyeyi göstermek için
displayBalanceçağrısını yapın - İşlem tutarıyla
withdrawçağrısını yapın - 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
}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ışlarKendi başına pratik yap: Online Go derleyicisi