Kısıtlamalar: comparable ve Arayüzler
Birleşim kısıtlamaları ve yerleşik comparable
Kısıtlamalar: comparable ve Arayüzler, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Kısıtlama nedir?
Kısıtlama, bir tür bağımsız değişkeni olarak hangi türlerin kullanılabileceğini sınırlar. Kısıtlama olmadan tür parametresi any olur (boş arayüz — yalnızca atamayı ve == aracılığıyla karşılaştırmayı destekler).
any kısıtlaması
any (interface{} için takma ad), en geniş kısıtlamadır — tüm türler bunu karşılar. Yalnızca tüm türlerin desteklediği işlemleri kullanabilirsiniz: atama ve arayüz parametrelerine geçirme.
func Print[T any](v T) { fmt.Println(v) }comparable kısıtlaması
comparable, tür parametresini == ve != işleçlerini destekleyen türlerle sınırlar. Türü bir eşlemeye anahtar olarak kullanmak veya eşitlik denetimleri yapmak için gereklidir.
func Contains[T comparable](s []T, v T) bool {
for _, item := range s {
if item == v { return true }
}
return false
}Arayüz kısıtlamaları
Belirli yöntemleri zorunlu kılmak için arayüzü kısıtlama olarak kullanın. Tür parametresi, arayüzdeki tüm yöntemlere sahip olmalıdır.
type Stringer interface { String() string }
func Print[T Stringer](v T) {
fmt.Println(v.String())
}Birleşim kısıtlamaları
Bir somut tür kümesiyle sınırlamak için türlerin birleşimini | ile kullanın. Bu, herhangi bir arayüzün parçası olmayan işleçleri (örneğin +) kullanmanızı sağlar.
type Number interface {
int | int64 | float64
}
func Sum[T Number](s []T) T {
var total T
for _, v := range s { total += v }
return total
}Temel türler için ~T
Yalnızca T'yi değil, temel türü T olan tüm türleri de (örneğin type MyInt int olarak tanımlanan özel türleri) dahil etmek için ~T kullanın.
type Integer interface { ~int | ~int64 }
type MyInt int
// MyInt satisfies Integer because its underlying type is intgolang.org/x/exp/constraints
constraints paketi yaygın kısıt arayüzleri sağlar: Ordered (< işlecini destekler), Integer, Float, Signed, Unsigned.
import "golang.org/x/exp/constraints"
func Min[T constraints.Ordered](a, b T) T {
if a < b { return a }
return b
}cmp paketi (Go 1.21)
Go 1.21, standart kütüphaneye cmp.Ordered kısıtını ve cmp.Compare/cmp.Less işlevlerini ekledi; böylece exp/constraints bağımlılığının yerini aldı.
import "cmp"
func Min[T cmp.Ordered](a, b T) T { return min(a, b) }Kısıtları birleştirme
Birden fazla özelliği zorunlu kılmak için bir kısıta birden çok arayüz gömün:
type Printable interface {
comparable
fmt.Stringer
}Kısıt çıkarımı
Derleyici, tür parametrelerini bağımsız değişkenlerden çıkarır. Kısıt fazla genişse (any), çıkarıma yön vermek için açık tür bağımsız değişkenleri gerekebilir.
comparable ne zaman kullanılmalı
Genel işlevin değerler üzerinde == kullanması, değerleri haritalarda anahtar olarak saklaması veya harita/küme öğeleri olarak kullanması gerekiyorsa comparable kullanın. Tüm türler karşılaştırılabilir değildir (dilimler, haritalar ve işlevler karşılaştırılamaz).
Kısa kontrol
~int gibi bir birleşim kısıtında ~ ön eki ne anlama gelir?
Özet: Kısıtlar
Temel noktalar:
- any: en geniş kapsamlıdır; comparable, == işlecini destekler; arayüz, yöntemleri zorunlu kılar
- Birleşim (int|float64), aritmetik işleçleri etkinleştirir
- ~T, temel türü T olan adlandırılmış türleri de dahil eder
- cmp.Ordered (Go 1.21+) ile <, >, <=, >= kısıtları kullanılabilir
Sıkça Sorulan Sorular
“Kısıtlamalar: comparable ve Arayüzler” dersi ücretsiz mi?
Evet — “Kısıtlamalar: comparable ve Arayüzler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Kısıtlamalar: comparable ve Arayüzler” dersinde ne öğreneceğim?
Birleşim kısıtlamaları ve yerleşik comparable Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Kısıtlamalar: comparable ve Arayüzler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Tür Parametresi Söz Dizimi
- Kısıtlamalar: comparable ve Arayüzler
- Genel Veri Yapıları
- Uygulamada Generics: Tuzaklar