Menu
Coddy logo textTech

Structlarda Metot Tanımlama

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 6 / 68.

Go'da bir metot, belirli bir türe ait olan bir işlevdir. Tek başına duran normal işlevlerin aksine, metotlar struct'lara bağlanır ve özel veri türleriniz için davranış tanımlamanıza olanak tanır.

Bir metot tanımlamak için, func anahtar kelimesi ile metot adı arasına bir alıcı (receiver) yerleştirirsiniz. Alıcı, metodun hangi türe ait olduğunu belirtir.

type Person struct {
    Name string
    Age  int
}

func (p Person) greet() {
    fmt.Printf("Hello, my name is %s\n", p.Name)
}

Bu örnekte, (p Person) alıcıdır (receiver), bu da greet fonksiyonunu Person tipinin bir metodu yapar. p değişkeni, metodun üzerinde çağrıldığı Person örneğini temsil eder; bu, diğer dillerdeki this anahtar kelimesine benzer.

Ardından yöntemi herhangi bir Person örneği üzerinde nokta gösterimini kullanarak çağırabilir ve struct’larınıza verileriyle ilgili eylemleri gerçekleştirme yeteneği kazandırabilirsiniz.

challenge icon

Görev

Kolay

Bu meydan okumada, basit bir kitap yönetim sistemi oluşturarak struct'lar üzerinde metot tanımlama pratiği yapacaksın. Bir Book struct'ı oluşturacak ve kitabın bilgilerini görüntülemesini sağlayan metotlar tanımlayacaksın.

Önemli Not: Kitap başlıkları ve yazar adları boşluk içerebileceğinden, girdinin tüm satırlarını okumak için bufio.Scanner kullanman gerekecek. fmt.Scanln işlevi ilk boşlukta okumayı durdurur; bu da birden fazla kelimeden oluşan başlıkların ve yazar adlarının okunamamasına neden olur. bufio.NewScanner(os.Stdin) kullan ve tam satırları okumak için scanner.Scan() çağrısının ardından scanner.Text() çağrısını yap.

Üç girdi alacaksın:

  • Kitap başlığını temsil eden bir dize (ör. "The Go Programming Language")
  • Yazar adını temsil eden bir dize (ör. "Alan Donovan")
  • Sayfa sayısını temsil eden bir dize (ör. "380")

Görevin:

  1. Üç alana sahip bir Book struct'ı tanımlamak: Title (string), Author (string) ve Pages (int)
  2. Değer alıcısına sahip, kitap bilgilerini şu biçimde yazdıran displayInfo adlı bir metot oluşturmak: "Title: [title], Author: [author], Pages: [pages]"
  3. Değer alıcısına sahip, şu biçimde bir dize döndüren getDescription adlı bir metot oluşturmak: "[title] by [author]"
  4. Girdi satırlarını doğru şekilde okumak için bufio.Scanner kullanmak:
    • Bir tarayıcı oluştur: scanner := bufio.NewScanner(os.Stdin)
    • Her girdi satırı için: scanner.Scan() çağrısının ardından scanner.Text() çağrısını yap
    • Bu, boşluk içeren başlıkların ve yazar adlarının doğru şekilde okunmasını sağlar
  5. Bir Book örneği oluşturmak için girdileri ayrıştırmak
  6. Kitap bilgilerini yazdırmak için displayInfo metodunu çağırmak
  7. getDescription metodunu çağırmak ve döndürülen açıklamayı yazdırmak

Metotlar, struct alanlarına erişmek ve ilgili işlemleri gerçekleştirmek için alıcı değişkenini kullanmalıdır. Değer alıcılarına sahip metotların struct örneğinin bir kopyasıyla çalıştığını unutma.

Kendin dene

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)

// TODO: Book yapınızı (struct) burada tanımlayın

// TODO: displayInfo metodunuzu burada tanımlayın

// TODO: getDescription metodunuzu burada tanımlayın

func main() {
    // Giriş satırlarını okumak için tarayıcı (scanner) oluşturun
    scanner := bufio.NewScanner(os.Stdin)
    
    // Başlığı oku
    scanner.Scan()
    title := scanner.Text()
    
    // Yazarı oku
    scanner.Scan()
    author := scanner.Text()
    
    // Sayfa sayısını oku
    scanner.Scan()
    pagesStr := scanner.Text()
    
    // Sayfa sayısı dizesini tam sayıya dönüştür
    pages, _ := strconv.Atoi(pagesStr)
    
    // TODO: Bir Book örneği oluşturun ve 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