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.
Görev
KolayBu 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:
- Üç alana sahip bir
Bookstruct'ı tanımlamak:Title(string),Author(string) vePages(int) - Değer alıcısına sahip, kitap bilgilerini şu biçimde yazdıran
displayInfoadlı bir metot oluşturmak:"Title: [title], Author: [author], Pages: [pages]" - Değer alıcısına sahip, şu biçimde bir dize döndüren
getDescriptionadlı bir metot oluşturmak:"[title] by [author]" - Girdi satırlarını doğru şekilde okumak için
bufio.Scannerkullanmak:- Bir tarayıcı oluştur:
scanner := bufio.NewScanner(os.Stdin) - Her girdi satırı için:
scanner.Scan()çağrısının ardındanscanner.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
- Bir tarayıcı oluştur:
- Bir
Bookörneği oluşturmak için girdileri ayrıştırmak - Kitap bilgilerini yazdırmak için
displayInfometodunu çağırmak getDescriptionmetodunu ç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
}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ışlarKendi başına pratik yap: Online Go derleyicisi