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 fonksiyondur. Tek başına duran normal fonksiyonların aksine, metotlar struct'lara bağlıdı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, herhangi bir Person örneği üzerinde nokta notasyonunu kullanarak metodu çağırabilir ve struct'larınıza verileriyle ilgili eylemler gerçekleştirme yeteneği kazandırabilirsiniz.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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ız. Bir Book struct'ı oluşturacak ve kitabın bilgilerini görüntülemesini sağlayan metotlar tanımlayacaksınız.

Önemli Not: Kitap başlıkları ve yazar isimleri boşluk içerebileceğinden, tüm girdi satırlarını okumak için bufio.Scanner kullanmanız gerekecektir. fmt.Scanln fonksiyonu ilk boşlukta okumayı durdurur, bu da birden fazla kelimeden oluşan başlıkları ve yazar isimlerini böler. Tam satırları okumak için bufio.NewScanner(os.Stdin) kullanın ve scanner.Scan() ardından scanner.Text() fonksiyonlarını çağırın.

Üç girdi alacaksınız:

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

Göreviniz şunları yapmaktır:

  1. Üç alana sahip bir Book struct'ı tanımlayın: Title (string), Author (string) ve Pages (int)
  2. Kitap bilgilerini "Title: [title], Author: [author], Pages: [pages]" formatında yazdıran, değer alıcılı (value receiver) displayInfo adlı bir metot oluşturun
  3. "[title] by [author]" formatında bir dize döndüren, değer alıcılı (value receiver) getDescription adlı bir metot oluşturun
  4. Girdi satırlarını düzgün bir şekilde okumak için bufio.Scanner kullanın:
    • Bir scanner oluşturun: scanner := bufio.NewScanner(os.Stdin)
    • Her girdi satırı için: scanner.Scan() ve ardından scanner.Text() çağırın
    • Bu, boşluk içeren başlıkların ve yazar isimlerinin doğru okunmasını sağlar
  5. Girdileri ayrıştırarak bir Book örneği oluşturun
  6. Kitap bilgilerini yazdırmak için displayInfo metodunu çağırın
  7. getDescription metodunu çağırın ve döndürülen açıklamayı yazdırın

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

Kopya kağıdı

Go'daki metotlar, belirli bir türe ait olan fonksiyonlardır. func anahtar kelimesi ile metot adı arasında bir alıcı (receiver) ile tanımlanırlar:

type Person struct {
    Name string
    Age  int
}

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

(p Person) alıcısı, greet fonksiyonunu Person türünün bir metodu yapar. p değişkeni, metodun üzerinde çağrıldığı örneği temsil eder.

Metotlar, struct örnekleri üzerinde nokta notasyonu kullanılarak çağrılır ve struct'ların kendi verileriyle ilgili eylemler gerçekleştirmesine olanak tanır.

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