# Sınıflar

## Sınıf Oluşturma

Sınıflar diğer birçok dildeki gibi `class` terimi ile oluşturulur.

```dart
class insan {
  String isim;
  int yas;
  double kilo;
}

main() {
  insan kisi1 = new insan();
}
```

Yukarıda bir `insan` sınıfı oluşturduk. Bu sınıf **isim**, **yas** ve **kilo** gibi özellikleri vardır. Tıpkı bir insanda bulunan özellikler gibi.

Hemen aşağısında, **kisi1** adından **insan** sınıfında bir nesne ürettik. Artık **kisi1** nesnesi bir insan oldu 😉

Peki `kisi1`'in böyle özellikleri var ama bu özelliklerin değerleri yok mu? Tabi ki olacak.

```dart
class insan {
  String isim = "Kaan";
  int yas = 23;
  double kilo = 78.2;
}

main() {
  insan kisi1 = new insan();
}
```

Artık `kisi1` tamamen insan oldu diyebiliriz. `print(kisi1.isim);` yazarak `kisi1`'in isim değişkenini yazdırabiliriz. Ama olaya biraz dikkat ettiğimizde değerlerin `kisi1`'e ait değil de insan sınıfında ait olduğunu görebiliriz. Yani `insan` sınıfı için oluşturulmuş nesnelerin varsayılan değerini girmiş olduk. Çözümümüz Constructors (Yapıcılar);

## Constructors (Yapıcılar)

Yapıcılar bir sınıf nesnesi üretirken değerlerin tanımlanmasında kullanılır. Örneğimiz:

```dart
class insan {
  String isim;
  int yas;
  double kilo;

  insan(String isimGiris, int yasGiris, double kiloGiris) {
    isim = isimGiris;
    yas = yasGiris;
    kilo = kiloGiris;
  }
}

main() {
  insan kisi1 = new insan("Kaan", 23, 78.2);
  print(kisi1.isim);
}
```

Yapıcılar sınıfların içerisine fonksiyon olarak tanımlanır. Bir fonksiyonun yapıcı fonksiyon olması için sınıf ile aynı isme sahip olması gerekir. Yani `insan` sınıfının yapıcısı `insan()` fonksiyonu olmalıdır. Yapıcı fonksiyonlardaki mantık, dışarıdan alınan değerleri sınıf içerisindeki değişkenlere yerleştirmektir. Yapıcı fonksiyondaki parametrelerin isimleri ile sınıf değişkenlerinin isimlerinin aynı olmadığına dikkat çekmek isterim. Bu işlemi `this` işaretçisi ile de yapabiliriz.&#x20;

## This işaretçisi nedir?

**This** işaretçisi, sınıfa özel tanımlı değişkenleri kullanabilmeyi sağlayan işaretçidir. Yapıcımızı bir de `this` ile oluşturalım.

```dart
insan(String isim, int yas, double kilo) {
  this.isim = isim;
  this.yas = yas;
  this.kilo = kilo;
}
```

Yukarıdaki `this` şu işlemi yapıyor. **this = bu**. `isim` parametresinden gelen değer, `this.isim` ile bu sınıfın `isim` değişkenine atansın.

## This ile Yapıcı oluştururken Kolay Yöntem

```dart
insan(this.isim, this.yas, this.kilo) {}
```

Yukarıdaki yapıcıyı oluştururken parametreleri `this` işaretçisi ile yazdık. Böylece atama işlemine gerek kalmadan parametreler üzerinden atanmasını sağladık.

## Sınıf Nesnesi Oluştururken Belirli ve Varsayılan Yapıcı Parametresi Girme

{% content-ref url="/pages/-MESX07n0DQnAFq9Ga2f" %}
[Fonksiyonlar](/boeluem-2-islem-yapma/fonksiyonlar.md)
{% endcontent-ref %}

Fonksiyonlar konusunda gördüğümüz gibi parametrelere değer yollarken hangi değişkene yollayacağımızı seçebiliriz.

```dart
class insan {
  String isim;
  int yas;
  double kilo;

  insan({String isim = "Kaan", int yas = 23, double kilo = 78.2}) {
    this.isim = isim;
    this.yas = yas;
    this.kilo = kilo;
  }
}

main() {
  insan kisi1 = new insan(isim: "Erkay", kilo:78.2);
}
```

`main` fonksiyonuna baktığımızda,

`kisi1` adında insan nesnesi oluştururken yapıcı fonksiyona sadece `isim` ve `kilo` değerlerini yolladık. `yas` değişkeninin değeri yapıcı fonksiyonda varsayılan değer aldı.

## İsimlendirilmiş Yapıcılar

Eğer sınıfımıza birden fazla yapıcı eklemek istiyorsak isimlendirilmiş yapıcıları kullanırız. Örnek:

```dart
class insan {
  String isim;
  int yas;
  double kilo;
  insan(this.isim, this.yas, this.kilo);

  insan.bos() {
    this.isim = "Boş";
    this.yas = 0;
    this.kilo = 0;
  }
}

main() {
  insan kisi1 = new insan.bos();
}
```

`insan` sınıfımız hem `insan` adlı yapıcı fonksiyona sahip, hem de `insan.bos` adında isimlendirilmiş yapıcı fonksiyona sahip. `insan.bos` yapıcı fonksiyonumuz `insan` sınıfından üretilen nesnede kullanıldığında değişkenlere boş bilgiler giriyor.

`main` fonksiyonumuzda nesne üretimini gözlemlediğimizde, nesnenin `insan.bos()` yapıcı fonksiyonu ile üretildiğini görüyoruz.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dart.kaanksc.com/boeluem-3-nesne-tabanli-programlama/siniflar.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
