Menu
CoddyTech

İç İç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 struct, alanlarından biri olarak adlandırılmış başka bir struct içeren bir struct'tır. Bu, daha küçük ve yeniden kullanılabilir türleri bir araya getirerek karmaşık, hiyerarşik verileri modellemeni sağlar.

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ı noktalarla zincirlersin.

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, kodun yeniden kullanılmasını sağlar. Address türü, alanları yinelemeden Person, Company veya Order gibi birden fazla yapıda kullanılabilir. Bu yaklaşım, varlıkların başka varlıkları içerdiği gerçek dünyadaki ilişkileri yansıtır.

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

Yapıları birden çok düzeyde iç içe yerleştirebilirsin; ancak hiyerarşileri sığ tutmak okunabilirliği artırır. İç içe yapılar, Go'da nesne yönelimli veri modelleri oluşturmanın temelini oluşturur.

challenge icon

Görev

Kolay

İç içe struct'ların gerçek dünyadaki hiyerarşileri modellemeye nasıl yardımcı olduğunu gösteren bir çalışan yönetim sistemi oluşturalım. Çalışanların departmanlara bağlı olduğu ve departmanların konum bilgilerine sahip olduğu bir yapı oluşturacaksın.

Kodunu iki dosyaya ayıracaksın:

  • models.go: Birlikte çalışan üç struct tanımla:
    • Location; Building (string) ve Floor (int) alanlarına sahip
    • Department; Name (string) ve iç içe bir Location alanına sahip
    • Employee; ID (int), Name (string) ve iç içe bir Department alanına sahip
  • main.go: Girdiden çalışan bilgilerini oku, iç içe struct'ları doğru şekilde kullanarak bir Employee oluştur ve iç içe yapı üzerinden alanlara erişerek çalışanın profilini eksiksiz biçimde görüntüle.

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

  • Satır 1: Çalışan kimliği (tam sayı)
  • Satır 2: Çalışanın adı
  • Satır 3: Departman adı
  • Satır 4: Binanın adı
  • Satır 5: Kat numarası (tam sayı)

Çıktı biçimi:

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

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

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

Struct hiyerarşisinde ilerlemek için iç içe alanlara nokta gösterimini kullanarak eriş (ör. employee.Department.Location.Building).

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

Kendi başına pratik yap: Online Go derleyicisi