Menu
Coddy logo textTech

Getter ve Setter Metotları

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

Dışa aktarılmamış alanlara bir paketin dışından doğrudan erişilemediğinden, kontrollü erişime izin veren yöntemler sağlamanız gerekir. Bunlara genellikle getter ve setter adı verilir.

Go'da getter'lar için kural basittir: alan adını ilk harfi büyük olacak şekilde kullanın. "Get" ile önek eklemeyin; GetBalance() yerine yalnızca Balance() kullanın:

type BankAccount struct {
    balance int  // dışa aktarılmamış
}

// Getter - değeri döndürür
func (b *BankAccount) Balance() int {
    return b.balance
}

// Setter - değeri doğrulama ile değiştirir
func (b *BankAccount) SetBalance(amount int) {
    if amount >= 0 {
        b.balance = amount
    }
}

Setter'ların gerçek gücü, doğrulama veya iş mantığı eklemektir. Harici kodun herhangi bir değeri doğrudan ayarlamasına izin vermek yerine, neye izin verileceğini sen kontrol edersin:

func (b *BankAccount) Deposit(amount int) bool {
    if amount <= 0 {
        return false
    }
    b.balance += amount
    return true
}

Bu Deposit yöntemi, kuralları uygulayan özel bir ayarlayıcı görevi görür: negatif para yatırma işlemine izin verilmez. Harici kod, yöntemleriniz üzerinden ilerlemelidir; böylece yapı her zaman geçerli bir durumda kalır. Bu, kapsüllemenin iş başındaki hâlidir: verileri gizlerken kontrollü davranış sunmak.

challenge icon

Görev

Kolay

getter ve setter yöntemlerini kullanarak uygun kapsüllemeyi gösteren bir sıcaklık dönüştürücü oluşturalım. Sıcaklığı dahili olarak Celsius cinsinden depolayan, ancak doğrulama içeren yöntemler aracılığıyla kontrollü erişim sağlayan bir struct oluşturacaksın.

Kodunu iki dosyaya ayıracaksın:

  • temperature.go: Dışa aktarılmamış bir Temperature alanına (float64) sahip bir celsius struct'ı oluştur. Aşağıdaki yöntemleri uygula:
    • Celsius() - mevcut sıcaklığı Celsius cinsinden döndüren bir getter
    • SetCelsius(value float64) - yalnızca mutlak sıfıra (-273.15) eşit veya bundan büyük değerleri kabul eden bir setter. Değer bu eşikten düşükse sıcaklık değişmeden kalmalıdır.
    • Fahrenheit() - şu formülü kullanarak sıcaklığı Fahrenheit'a dönüştürür: (celsius * 9/5) + 32
    • SetFahrenheit(value float64) - girdiyi Fahrenheit'tan Celsius'a dönüştürür ve sonucu saklar; ancak yalnızca elde edilen Celsius değeri -273.15'e eşit veya bundan büyükse
    Ayrıca, verilen değerle başlatılmış bir sıcaklık oluşturan NewTemperature(celsius float64) *Temperature kurucusunu da ekle (kurucu için girdinin geçerli olduğunu varsay).
  • main.go: Girdiden sıcaklık değerlerini oku ve getter/setter yöntemlerini göster. Bir sıcaklık oluştur, değerlerini her iki birimde göster, ardından yeni değerler atamayı dene ve sonuçları göster.

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

  • 1. satır: Başlangıç Celsius değeri
  • 2. satır: Atanacak yeni Celsius değeri
  • 3. satır: Atanacak yeni Fahrenheit değeri

Tüm sıcaklık çıktılarını iki ondalık basamakla biçimlendir. Aşağıdaki sırayı yazdır:

  1. Oluşturma sonrasında: C: [celsius] F: [fahrenheit]
  2. Celsius atandıktan sonra: C: [celsius] F: [fahrenheit]
  3. Fahrenheit atandıktan sonra: C: [celsius] F: [fahrenheit]

Örneğin 25, -300 ve 212 verildiğinde çıktın şöyle olmalıdır:

C: 25.00 F: 77.00
C: 25.00 F: 77.00
C: 100.00 F: 212.00

İkinci satırın değişmemiş değerleri gösterdiğine dikkat et; bunun nedeni -300'ün mutlak sıfırın altında olması ve setter'ın bu değeri reddetmesidir. Üçüncü satır, 212°F başarıyla atandıktan sonraki sıcaklığı gösterir (bu değer 100°C'ye dönüştürülür). Setter'ların gücü budur. Verilerini geçerli tutan kuralları uygularlar.

Kendin dene

package main

import (
	"fmt"
)

func main() {
	// Girdi değerlerini oku
	var initialCelsius float64
	var newCelsius float64
	var newFahrenheit float64
	fmt.Scanln(&initialCelsius)
	fmt.Scanln(&newCelsius)
	fmt.Scanln(&newFahrenheit)

	// TODO: Yapıcı kullanarak yeni bir Temperature oluştur

	// TODO: Başlangıç değerlerini "C: [celsius] F: [fahrenheit]" formatında 2 ondalık basamakla yazdır

	// TODO: Yeni Celsius değerini ayarlamayı dene ve sonucu yazdır

	// TODO: Yeni Fahrenheit değerini ayarlamayı dene ve sonucu yazdır
}
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

Kendi başına pratik yap: Online Go derleyicisi