Sınıflar (Classes)
Dart, sınıflar ve mixin tabanlı kalıtım kullanılarak nesne tabanlı bir dil olarak tasarlanmıştır. Her nesne, bir sınıf örneğidir ve Null
dışındaki tüm sınıflar Object
sınıfından türemiştir. Mixin tabanlı kalıtım, her sınıfın (Object
sınıfı hariç) tam olarak bir üst sınıfa sahip olduğu anlamına gelir; ancak sınıfın içeriği birden fazla sınıf hiyerarşisinde yeniden kullanılabilir. Extension metodları, bir sınıfa fonksiyonellik eklemenin bir yoludur ve sınıfı değiştirmeden veya alt sınıf oluşturmadan bu işlevselliği sağlar. Sınıf modifikatörleri, kütüphanelerin bir sınıfı alt tür olarak nasıl kullanabileceğini kontrol etmenizi sağlar.
Sınıf Üyelerini Kullanma
Nesneler, fonksiyonlar ve verilerden oluşan üyelere sahiptir (sırasıyla metotlar ve örnek değişkenler). Bir metodu çağırdığınızda, bunu bir nesne üzerinde çağırırsınız: metot, bu nesnenin fonksiyonlarına ve verilerine erişime sahiptir.
Bir örnek değişkeni veya metodu belirtmek için bir nokta (.
) kullanılır:
Nesnenin en sol operandı null olduğunda bir istisna oluşmaması için .
yerine ?.
kullanılır:
Yapıcıları (Constructors) Kullanma
Bir nesne oluşturmak için bir yapıcı kullanabilirsiniz. Yapıcı isimleri SinifAdi
veya SinifAdi.tanimlayici
olabilir. Örneğin, aşağıdaki kod, Nokta()
ve Nokta.fromJson()
yapıcılarını kullanarak Nokta nesneleri oluşturur:
Aynı etkiye sahip olan aşağıdaki kod, yapıcı adından önce opsiyonel new
anahtar kelimesini kullanır:
Bazı sınıflar, sabit yapıcılar sağlar. Sabit bir yapıcı kullanarak derleme zamanında bir sabit oluşturmak için, const
anahtar kelimesini yapıcı adından önce ekleyin:
İki adet aynı sabit yapıcı oluşturmak, tek bir, standart örneği sonuçlandırır:
Bir sabit bağlam içinde, bir yapıcı veya literalin const
önündeki tüm kullanımları atlayabilirsiniz. Örneğin, bu kodu inceleyin, bir const haritası oluşturan:
Tüm const
anahtarını ilk kullanım haricinde atlayabilirsiniz:
Bir sabit yapıcı, sabit bir bağlam dışında ve const
olmadan çağrıldığında, sabit olmayan bir nesne oluşturur:
Bir Nesnenin Türünü Almak (Object's Type)
Bir nesnenin çalışma zamanındaki türünü almak için, Object
özelliği olan runtimeType
kullanabilirsiniz, bu da bir Type
nesnesi döndürür.
Uyarı
Bir nesnenin türünü test etmek için runtimeType yerine bir tür test operatörü kullanın. Üretim ortamlarında, test nesnesi Type, test nesne.runtimeType == Type'den daha kararlıdır.
Buraya kadar, sınıfları nasıl kullanacağınızı gördünüz. Bu bölümün geri kalanı, sınıfları nasıl uygulayacağınızı gösterir.
Örnek Değişkenler (Instance Variables)
İşte örnek değişkenlerin nasıl bildirileceği:
Nullable bir türle bildirilen başlatılmamış bir örnek değişkeninin değeri null
'dır. Başlatılmamış, nullable olmayan örnek değişkenleri, örneğin oluşturulduğunda, yapıcı ve onun başlatıcı listesi çalışmadan önce değerini almalıdır.
Tüm örnek değişkenleri, gizli bir get metodu oluşturur. Nullable olmayan örnek değişkenleri ve başlatıcı listesi olmayan late final
örnek değişkenleri, aynı zamanda gizli bir set metodu oluşturur. Ayrıntılar için getters ve setters'a bakın.
Bir non-late (late olmayan) örnek değişkenini bildirirken, değeri oluşturulan örnek oluşturulduğu anda, yani kurucu ve başlatıcı listesi çalışmadan önce belirlenir. Bu nedenle, bir non-late örnek değişkeninin başlatma ifadesi (=
'den sonraki) this
'e erişemez.
Örnek değişkenleri final
olabilir, bu durumda bir kereye mahsus olarak ayarlanmalıdır. Final
, non-late
örnek değişkenlerini tanımlama sırasında, bir yapılandırıcı (constructor) parametresiyle veya bir yapılandırıcının başlatıcı (constructor initializer) listesi kullanarak başlatın:
Bir yapılandırıcı gövdesi başladıktan sonra bir final
örnek değişkeninin değerini atamak gerekiyorsa, aşağıdaki yöntemlerden birini kullanabilirsiniz:
Fabrika yapıcı kullanın.
Late final kullanın, ancak dikkatli olun: başlatıcı eklemeyen late final, API'ye bir setter ekler.
Örtük Arabirimler (Implicit Interfaces)
Her sınıf, sınıfın tüm örnek üyelerini ve uyguladığı arabirimlerin tüm örnek üyelerini içeren örtük bir arabirim tanımlar. Eğer A sınıfının B sınıfının uygulamasını devralmadan sadece B'nin API'sini destekleyen bir A sınıfı oluşturmak istiyorsanız, A sınıfının B arabirimini uygulaması gerekir.
Bir sınıf, bu arabirimleri bir implements ifadesinde belirterek bir veya daha fazla arabirimi uygular ve ardından arabirimlerin gerektirdiği API'leri sağlar. Örneğin:
Birden fazla arabirimi uyguladığınızı belirtmenin bir örneği:
Sınıf Değişkenleri ve Metotları (Class Variables and Methods)
Sınıf çapında değişkenler ve metodlar uygulamak için static
anahtar kelimesini kullanın.
Statik Değişkenler (Static Variables)
Statik değişkenler (sınıf değişkenleri), sınıf genelinde durumu ve sabitleri depolamak için kullanışlıdır:
Statik değişkenler, kullanıldıkları zaman başlatılır.
Statik Metotlar (Static Methods)
Statik metotlar (sınıf metotları), bir instance üzerinde çalışmaz ve bu nedenle this
'e erişemez. Ancak, statik değişkenlere erişebilirler. Aşağıdaki örnek gösterildiği gibi, statik metotları bir sınıf üzerinde doğrudan çağırabilirsiniz:
Not
Ortak veya geniş bir kullanımı olan yardımcı program ve işlevsellik için statik metotlar yerine, statik metotlar yerine üst düzey fonksiyonları kullanmayı düşünün.
Statik metotları derleme zamanı sabitleri olarak kullanabilirsiniz. Örneğin, bir statik metodu bir sabit yapıcıya bir parametre olarak geçirebilirsiniz.
Last updated