Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Bu 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:

  1. İki alana sahip bir Sensor yapısı tanımlamak: ID (string) ve Temperature (float64)
  2. Değer alıcısına sahip, sensör bilgilerini şu biçimde yazdıran displayReading adlı bir metot oluşturmak: "Sensor [ID]: [temperature]°C"
  3. Değer alıcısına sahip, ayarlama değerini sıcaklığa ekleyen ve şu çıktıyı veren adjustTemperature adlı bir metot oluşturmak: "Adjusted reading: [new_temperature]°C"
  4. Bir Sensor örneği oluşturmak için girdileri ayrıştırmak
  5. Başlangıç sıcaklığını göstermek için displayReading metodunu çağırmak
  6. adjustTemperature metodunu ayarlama değeriyle çağırmak
  7. Başlangıçtaki yapının değişmeden kaldığını göstermek için displayReading metodunu 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
    
}
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