Menu
Coddy logo textTech

İç İçe Geçmiş Struct'lar

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

İç içe geçmiş bir struct, alanlarından biri olarak başka bir adlandırılmış struct içeren bir struct'tır. Bu, daha küçük, yeniden kullanılabilir türleri bir araya getirerek karmaşık, hiyerarşik verileri modellemenize olanak tanır.

type Address struct {
    Street string
    City   string
    ZIP    string
}

type Person struct {
    Name    string
    Age     int
    Address Address  // iç içe struct
}

İç içe geçmiş bir struct içindeki alanlara erişmek için alan adlarını nokta kullanarak birbirine bağlarsınız.

p := Person{
    Name: "Alice",
    Age:  30,
    Address: Address{
        Street: "123 Main St",
        City:   "Boston",
        ZIP:    "02101",
    },
}

fmt.Println(p.Address.City) // Boston

İç içe yerleştirme (nesting), kodun yeniden kullanılabilirliğini teşvik eder. Address türü; alanları yinelemeden Person, Company veya Order gibi birden fazla yapıda (struct) kullanılabilir. Bu yaklaşım, varlıkların diğer varlıkları içerdiği gerçek dünya ilişkilerini yansıtır.

type Company struct {
    Name      string
    Employees int
    Address   Address  // aynı Address türü tekrar kullanıldı
}

Struct'ları birden fazla seviye derinliğinde iç içe yerleştirebilirsiniz, ancak hiyerarşileri sığ tutmak okunabilirliği artırır. İç içe geçmiş struct'lar, Go'da nesne yönelimli veri modelleri oluşturmak için temeldir.

challenge icon

Görev

Kolay

İç içe geçmiş struct'ların (yapıların) gerçek dünya hiyerarşilerini modellemeye nasıl yardımcı olduğunu gösteren bir çalışan yönetim sistemi kuralım. Çalışanların departmanlara ait olduğu ve departmanların konum bilgilerine sahip olduğu bir yapı oluşturacaksınız.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • models.go: Birlikte çalışan üç struct tanımlayın:
    • Building (string) ve Floor (int) alanlarına sahip Location
    • Name (string) ve iç içe geçmiş bir Location alanına sahip Department
    • ID (int), Name (string) ve iç içe geçmiş bir Department alanına sahip Employee
  • main.go: Girdiden çalışan bilgilerini okuyun, düzgün şekilde iç içe geçmiş struct'lara sahip bir Employee oluşturun ve iç içe geçmiş yapı üzerinden alanlara erişerek tam çalışan profilini görüntüleyin.

Aşağıdaki girdiler sağlanacaktır:

  • Satır 1: Çalışan ID'si (tam sayı)
  • Satır 2: Çalışan adı
  • Satır 3: Departman adı
  • Satır 4: Bina adı
  • Satır 5: Kat numarası (tam sayı)

Çıktı formatı:

Employee: [Name] (ID: [ID])
Department: [DepartmentName]
Location: [Building], Floor [Floor]

Örneğin, 101, Alice Chen, Engineering, Tower A ve 5 verildiğinde, çıktınız şöyle olmalıdır:

Employee: Alice Chen (ID: 101)
Department: Engineering
Location: Tower A, Floor 5

Struct hiyerarşisi boyunca zincirleme yapmak için nokta notasyonunu kullanarak iç içe geçmiş alanlara erişin (örneğin, employee.Department.Location.Building).

Kopya kağıdı

Bir iç içe geçmiş struct (nested struct), alanlarından biri olarak başka bir isimlendirilmiş struct'ı içeren bir struct'tır; bu, daha küçük ve yeniden kullanılabilir türleri birleştirerek hiyerarşik verileri modellemenize olanak tanır.

İç İçe Geçmiş Struct'ları Tanımlama

type Address struct {
    Street string
    City   string
    ZIP    string
}

type Person struct {
    Name    string
    Age     int
    Address Address  // iç içe geçmiş struct
}

İç İçe Geçmiş Alanlara Erişme

Struct hiyerarşisi boyunca zincirleme ilerlemek için nokta notasyonunu kullanın:

p := Person{
    Name: "Alice",
    Age:  30,
    Address: Address{
        Street: "123 Main St",
        City:   "Boston",
        ZIP:    "02101",
    },
}

fmt.Println(p.Address.City) // Boston

İç İçe Geçmiş Struct'ları Yeniden Kullanma

Aynı iç içe geçmiş struct türü, birden fazla üst struct genelinde yeniden kullanılabilir:

type Company struct {
    Name      string
    Employees int
    Address   Address  // aynı Address türü yeniden kullanıldı
}

İç içe geçmiş struct'lar kodun yeniden kullanılabilirliğini artırır ve varlıkların diğer varlıkları içerdiği gerçek dünya ilişkilerini yansıtır. Struct'ları birden fazla seviye derinliğinde iç içe geçirebilirsiniz, ancak hiyerarşileri sığ tutmak okunabilirliği artırır.

Kendin dene

package main

import "fmt"

func main() {
	// Çalışan bilgilerini oku
	var id int
	var name string
	var deptName string
	var building string
	var floor int

	fmt.Scanln(&id)
	fmt.Scanln(&name)
	fmt.Scanln(&deptName)
	fmt.Scanln(&building)
	fmt.Scanln(&floor)

	// TODO: Uygun şekilde iç içe geçmiş struct'lar ile bir Employee oluşturun
	// models.go dosyasındaki Location, Department ve Employee struct'larını kullanın
	// Tüm iç içe geçmiş alanları girdi değerleriyle başlatın

	// TODO: Çalışan profilini şu formatı kullanarak yazdırın:
	// Employee: [Name] (ID: [ID])
	// Department: [DepartmentName]
	// Location: [Building], Floor [Floor]
	// İç içe geçmiş alanlara nokta notasyonu kullanarak erişin (örneğin, employee.Department.Location.Building)
}
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