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.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayBu 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:
- Üç alana sahip bir
Bookstruct'ı tanımlayın:Title(string),Author(string) vePages(int) - Kitap bilgilerini
"Title: [title], Author: [author], Pages: [pages]"formatında yazdıran, değer alıcılı (value receiver)displayInfoadlı bir metot oluşturun "[title] by [author]"formatında bir dize döndüren, değer alıcılı (value receiver)getDescriptionadlı bir metot oluşturun- Girdi satırlarını düzgün bir şekilde okumak için
bufio.Scannerkullanın:- Bir scanner oluşturun:
scanner := bufio.NewScanner(os.Stdin) - Her girdi satırı için:
scanner.Scan()ve ardındanscanner.Text()çağırın - Bu, boşluk içeren başlıkların ve yazar isimlerinin doğru okunmasını sağlar
- Bir scanner oluşturun:
- Girdileri ayrıştırarak bir
Bookörneği oluşturun - Kitap bilgilerini yazdırmak için
displayInfometodunu çağırın getDescriptionmetodunu ç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
}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ışlar