Menu
Coddy logo textTech

Boş Arayüz (any)

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

Boş arayüz, sıfır metoda sahip bir arayüzdür. Go'daki her tür en az sıfır metoda sahip olduğundan, her tür boş arayüzü otomatik olarak karşılar. Bu, herhangi bir türdeki değerleri tutabilmesini sağlar.

var anything interface{}

anything = 42
anything = "hello"
anything = true
anything = []int{1, 2, 3}

Go 1.18 ile birlikte, any anahtar sözcüğü interface{} için bir takma ad olarak tanıtıldı. Bunlar tamamen birbirinin yerine kullanılabilir, ancak any okunması daha kolaydır.

var value any = "Go is awesome"

Boş arayüz, türü bilinmeyen veya değişkenlik gösteren değerleri işlemeniz gerektiğinde kullanışlıdır. fmt.Println gibi işlevler, her türden bağımsız değişkeni kabul etmek için bunu kullanır:

func PrintAnything(v any) {
    fmt.Println("Value:", v)
}

func main() {
    PrintAnything(100)
    PrintAnything("text")
    PrintAnything(3.14)
}

Ancak bunun bir dezavantajı vardır. Bir değer boş bir arayüzde depolandığında, değerle ilgili belirli tür bilgilerine erişiminizi kaybedersiniz.

Alttaki türü önce çıkarmadan yöntemleri doğrudan çağıramaz veya alanlara erişemezsiniz. Sonraki derslerde, tür iddialarını ve tür anahtarlarını kullanarak boş bir arabirimden somut türün nasıl alınacağını ele alacağız.

challenge icon

Görev

Kolay

Boş arayüzü kullanarak her türden değeri tutabilen esnek bir depolama kapsayıcısı oluşturalım. Farklı türleri aynı yapı içinde depolamanıza any türünün nasıl olanak sağladığını gösteren basit bir kutu oluşturacaksınız.

Kodunuzu iki dosya arasında düzenleyeceksiniz:

  • box.go: Tek bir Box alanı bulunan ve bu alanın türü Content olan bir any yapısı tanımlayın. Her türden bir değeri kabul eden ve bu değeri içeren bir Box işaretçisi döndüren NewBox kurucu işlevini oluşturun. Kutuda ne depolandığını gösteren bir dize döndüren bir Describe yöntemi ekleyin.
  • main.go: Girdiden farklı değerleri okuyun, bir tamsayı, bir dize ve bir boolean içeren kutular oluşturun, ardından aynı Box türünün tamamen farklı değerleri nasıl tutabildiğini göstermek için her kutunun açıklamasını yazdırın.

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

  • 1. satır: Bir tamsayı değeri
  • 2. satır: Bir dize değeri
  • 3. satır: Bir boolean değeri (true veya false)

Describe yönteminiz şu biçimde bir dize döndürmelidir:

Box contains: [value]

Örneğin 42, hello ve true verildiğinde çıktınız şu şekilde olmalıdır:

Box contains: 42
Box contains: hello
Box contains: true

Buradaki temel fikir, tek bir Box yapınızın bir tamsayı, bir dize veya bir boolean depolayabilmesidir: bunun nedeni any türünün her türden değeri kabul etmesidir. Her kutu farklı bir şey tutar, ancak hepsi aynı Box türündedir.

Kendin dene

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Tam sayı değerini oku
	line1, _ := reader.ReadString('\n')
	intVal, _ := strconv.Atoi(strings.TrimSpace(line1))

	// Dize değerini oku
	line2, _ := reader.ReadString('\n')
	strVal := strings.TrimSpace(line2)

	// Boolean değerini oku
	line3, _ := reader.ReadString('\n')
	boolVal, _ := strconv.ParseBool(strings.TrimSpace(line3))

	// TODO: NewBox kullanarak her değer için kutular oluştur
	// TODO: Describe metodunu kullanarak her kutunun açıklamasını yazdır

	// Derleme hatalarını önlemek için değişkenleri kullan (uygularken bu satırları kaldır)
	_ = intVal
	_ = strVal
	_ = boolVal

	// Örnek çıktı formatı:
	// fmt.Println(box.Describe())
}
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