Menu
Coddy logo textTech

Struct'larda Metot Tanımlama

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

Go'daki metotlar, fonksiyonu bir struct tipiyle ilişkilendiren özel bir receiver (alıcı) argümanına sahip fonksiyonlardır.

Metot sözdizimi

func (receiverName StructType) MethodName() ReturnType {
    // metot gövdesi
}

Metotları olan bir struct tanımlayın

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (r Rectangle) Perimeter() float64 {
    return 2 * (r.Width + r.Height)
}

Parametreli metotlar

func (r Rectangle) Scale(factor float64) float64 {
    return r.Area() * factor
}

Metotları çağırma

rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area())      // Çıktı: 15
fmt.Println(rect.Perimeter()) // Çıktı: 16
fmt.Println(rect.Scale(2))    // Çıktı: 30

Alıcı (r Rectangle), alıcı değişkeni r'yi kullanarak metot içindeki struct alanlarına erişmenizi sağlar. Metotlar, aynı struct üzerindeki diğer metotları çağırabilir.

challenge icon

Görev

Orta

Circle yapısına (struct) üç metot ekleyin:

  • Areamath.Pi * radius * radius değerini döndürür
  • Circumference2 * math.Pi * radius değerini döndürür
  • Describe — bir dize (string) döndürür: "Circle with radius X.XX"

Kopya kağıdı

Go'daki metotlar, fonksiyonu bir struct tipiyle ilişkilendiren özel bir receiver (alıcı) argümanına sahip fonksiyonlardır.

Metot sözdizimi:

func (receiverName StructType) MethodName() ReturnType {
    // metot gövdesi
}

Bir struct ve metotlar içeren örnek:

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (r Rectangle) Perimeter() float64 {
    return 2 * (r.Width + r.Height)
}

Metotlar parametre alabilir:

func (r Rectangle) Scale(factor float64) float64 {
    return r.Area() * factor
}

Metotları çağırma:

rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area())      // Çıktı: 15
fmt.Println(rect.Perimeter()) // Çıktı: 16
fmt.Println(rect.Scale(2))    // Çıktı: 30

Receiver, metot içinde struct'ın alanlarına erişmenizi sağlar. Metotlar, aynı struct üzerindeki diğer metotları çağırabilir.

Kendin dene

package main

import "fmt"

func main() {
    var radius float64
    fmt.Scan(&radius)

    c := Circle{Radius: radius}

    fmt.Printf("Area: %.2f\n", c.Area())
    fmt.Printf("Circumference: %.2f\n", c.Circumference())
    fmt.Printf("Description: %s\n", c.Describe())
}
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