Value Receiver'lar
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 7 / 68.
Bir yöntemi değer alıcısıyla tanımladığınızda, yöntem özgün yapı değişkeni yerine yapı örneğinin bir kopyası üzerinde çalışır. Bu, yöntem içinde alıcıda yapılan değişikliklerin özgün yapı değişkenini etkilemeyeceği anlamına gelir.
type Counter struct {
Value int
}
func (c Counter) increment() {
c.Value++ // Bu, orijinali değil, kopyayı değiştirir
}Bu örnekte, increment yöntemi (c Counter) değer alıcısına sahiptir. Bu yöntemi bir Counter örneği üzerinde çağırdığınızda Go, yapının bir kopyasını oluşturur ve bunu yönteme iletir. Yöntemin içindeki c.Value üzerinde yapılan değişiklikler yalnızca bu kopyayı etkiler.
Değer alıcıları, metodunuzun struct’tan yalnızca veri okuması ve onu değiştirmemesi gerektiğinde kullanışlıdır. Bunları kullanmak güvenlidir; çünkü özgün verilerin değişmeden kalmasını garanti eder, böylece kodunuzu daha öngörülebilir hâle getirir ve istenmeyen yan etkileri önler.
Görev
KolayBu mücadelede, basit bir sıcaklık izleme sistemi oluşturarak değer alıcılarıyla çalışmayı pratik edeceksin. Bir Sensor yapısı oluşturacak ve değer alıcılarının yapının kopyalarıyla nasıl çalıştığını gösteren metotlar tanımlayacaksın.
Üç girdi alacaksın:
- sensör kimliğini temsil eden bir dize (ör.
"TEMP001") - mevcut sıcaklık değerini temsil eden bir dize (ör.
"23.5") - sıcaklık ayarlama değerini temsil eden bir dize (ör.
"2.0")
Görevin:
- İki alana sahip bir
Sensoryapısı tanımlamak:ID(string) veTemperature(float64) - Değer alıcısına sahip, sensör bilgilerini şu biçimde yazdıran
displayReadingadlı bir metot oluşturmak:"Sensor [ID]: [temperature]°C" - Değer alıcısına sahip, ayarlama değerini sıcaklığa ekleyen ve şu çıktıyı veren
adjustTemperatureadlı bir metot oluşturmak:"Adjusted reading: [new_temperature]°C" - Bir
Sensorörneği oluşturmak için girdileri ayrıştırmak - Başlangıç sıcaklığını göstermek için
displayReadingmetodunu çağırmak adjustTemperaturemetodunu ayarlama değeriyle çağırmak- Başlangıçtaki yapının değişmeden kaldığını göstermek için
displayReadingmetodunu tekrar çağırmak
Bu mücadele, değer alıcılarına sahip metotların yapının kopyaları üzerinde çalıştığını gösterecek; bu nedenle adjustTemperature metodu çağrıldıktan sonra bile başlangıçtaki yapının sıcaklık değeri değişmeden kalacaktır. Sıcaklık değerleri bir ondalık basamak duyarlılıkla görüntülenmelidir.
Kendin dene
package main
import (
"fmt"
"strconv"
)
// TODO: Sensor yapınızı (struct) burada tanımlayın
// TODO: Değer alıcılı (value receiver) displayReading metodunuzu burada tanımlayın
// TODO: Değer alıcılı (value receiver) adjustTemperature metodunuzu burada tanımlayın
func main() {
// Girdileri oku
var sensorID string
var tempStr string
var adjustStr string
fmt.Scanln(&sensorID)
fmt.Scanln(&tempStr)
fmt.Scanln(&adjustStr)
// Sıcaklık ve ayarlama değerlerini ayrıştır
temperature, _ := strconv.ParseFloat(tempStr, 64)
adjustment, _ := strconv.ParseFloat(adjustStr, 64)
// TODO: Bir Sensor örneği oluşturun ve gerekli metodları çağı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ışlarKendi başına pratik yap: Online Go derleyicisi