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:
var p = Nokta(2, 2);
// Y'nin değerini al.
assert(p.y == 2);
// p üzerinde mesafeHesapla() metodunu çağır.
double mesafe = p.mesafeHesapla(Nokta(4, 4));Nesnenin en sol operandı null olduğunda bir istisna oluşmaması için . yerine ?. kullanılır:
// Eğer p null değilse, bir değişkeni onun y değerine eşitle.
var a = p?.y;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:
var p1 = Nokta(2, 2);
var p2 = Nokta.fromJson({'x': 1, 'y': 2});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