# Operatörler (Operators)

<table><thead><tr><th width="284">Açıklama</th><th>Operatör</th></tr></thead><tbody><tr><td>Son Ek</td><td><mark style="color:blue;">ifade++</mark>   <mark style="color:purple;">ifade--</mark>   <mark style="color:blue;">()</mark>   <mark style="color:purple;">[]</mark>   <mark style="color:blue;">?[]</mark>   <mark style="color:purple;">.</mark>   <mark style="color:purple;">?.</mark>   <mark style="color:blue;">!</mark></td></tr><tr><td>Ön Ek</td><td><mark style="color:blue;">-ifade</mark>   <mark style="color:purple;">!ifade</mark>   <mark style="color:blue;">~ifade</mark>   <mark style="color:purple;">++ifade</mark>   <mark style="color:blue;">--ifade</mark>  <mark style="color:purple;">await ifade</mark></td></tr><tr><td>Çarpımsal</td><td><mark style="color:blue;">*</mark>   <mark style="color:purple;">/</mark>   <mark style="color:blue;">%</mark>   <mark style="color:purple;">~/</mark></td></tr><tr><td>Toplama Çıkarma İşlemi</td><td><mark style="color:blue;">+</mark>   <mark style="color:purple;">-</mark></td></tr><tr><td>Kaydırma İşlemi</td><td><mark style="color:blue;">&#x3C;&#x3C;</mark>   <mark style="color:purple;">>></mark>   <mark style="color:blue;">>>></mark></td></tr><tr><td>Bit Düzeyinde AND</td><td><mark style="color:blue;">&#x26;</mark></td></tr><tr><td>Bit Düzeyinde XOR</td><td><mark style="color:blue;">^</mark></td></tr><tr><td>Bit Düzeyinde OR</td><td><mark style="color:blue;">|</mark></td></tr><tr><td>İlişkisel ve Tip Test İşlemleri</td><td><mark style="color:blue;">>=</mark>   <mark style="color:purple;">></mark>   <mark style="color:blue;">&#x3C;=</mark>   <mark style="color:purple;">&#x3C;</mark>   <mark style="color:blue;">as</mark>   <mark style="color:purple;">is</mark>   <mark style="color:blue;">is!</mark></td></tr><tr><td>Eşitlik</td><td><mark style="color:blue;">==</mark>   <mark style="color:purple;">!=</mark></td></tr><tr><td>Mantıksal AND</td><td><mark style="color:blue;">&#x26;&#x26;</mark></td></tr><tr><td>Mantıksal OR</td><td><mark style="color:blue;">||</mark></td></tr><tr><td>if null</td><td><mark style="color:blue;">??</mark></td></tr><tr><td>Koşul</td><td><mark style="color:blue;">ifade1</mark>  <mark style="color:purple;">?</mark> <mark style="color:blue;">ifade2</mark> <mark style="color:purple;">:</mark> <mark style="color:blue;">ifade3</mark></td></tr><tr><td>Cascade</td><td><mark style="color:blue;">..</mark>   <mark style="color:purple;">?..</mark></td></tr><tr><td>Atama</td><td><mark style="color:blue;">=</mark>   <mark style="color:purple;">*=</mark>   <mark style="color:blue;">/=</mark>   <mark style="color:purple;">+=</mark>   <mark style="color:blue;">-=</mark>   <mark style="color:purple;">&#x26;=</mark>   <mark style="color:blue;">^=</mark>   vs.</td></tr></tbody></table>

> **Uyarı**
>
> Yukarıdaki tablo, sadece yardımcı bir rehber olarak kullanılmalıdır. Operatör önceliği ve birlikteliği, dilin gramerinde bulunan gerçekliğin bir yaklaşımıdır. Dart'ın operatör ilişkilerinin yetkili davranışını dil spesifikasyonundaki gramerde bulabilirsiniz.

Operatörleri kullandığınızda, ifadeler oluşturursunuz. İşte operatör ifadelerine örnekler:

```dart
a++
a + b
a = b
a == b
c ? a : b
a is T
```

### Operatör Önceliği Örneği

```dart
// Operatör tablosunda her operatör, onu takip eden satırlardaki operatörlerden daha yüksek önceliğe sahiptir.
// Parantezler okunabilirliği artırır.
if ((n % i == 0) && (d % i == 0)) ...

// Okunması zor, ancak eşdeğer.
if (n % i == 0 && d % i == 0) ...
```

### Aritmetik Operatörler

<table><thead><tr><th width="142">Operatör</th><th>Anlamı</th></tr></thead><tbody><tr><td><mark style="color:blue;">+</mark></td><td>Ekleme</td></tr><tr><td><mark style="color:purple;">-</mark></td><td>Çıkarma</td></tr><tr><td><mark style="color:blue;">*</mark></td><td>Çarpma</td></tr><tr><td><mark style="color:purple;">/</mark></td><td>Bölme</td></tr><tr><td><mark style="color:blue;">~/</mark></td><td>Bölme, Tam Sayı Sonucu Döndürür</td></tr><tr><td><mark style="color:purple;">%</mark></td><td>Mod Alma</td></tr></tbody></table>

Örnek:

```dart
assert(2 + 3 == 5);
assert(2 - 3 == -1);
assert(2 * 3 == 6);
assert(5 / 2 == 2.5); // Sonuç bir double
assert(5 ~/ 2 == 2); // Sonuç bir int
assert(5 % 2 == 1); // Kalan

assert('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');
```

Ayrıca, artırma ve azaltma operatörlerini de destekler:

<table><thead><tr><th width="292">Operatör</th><th>Anlamı</th></tr></thead><tbody><tr><td><mark style="color:blue;">++var</mark></td><td><mark style="color:blue;">var = var + 1</mark> (ifade değeri <mark style="color:blue;">var + 1</mark>)</td></tr><tr><td><mark style="color:purple;">var++</mark></td><td><mark style="color:purple;">var = var + 1</mark> (ifade değeri <mark style="color:purple;">var</mark>)</td></tr><tr><td><mark style="color:blue;">--var</mark></td><td><mark style="color:blue;">var = var - 1</mark> (ifade değeri <mark style="color:purple;">var - 1</mark>)</td></tr><tr><td><mark style="color:purple;">var--</mark></td><td><mark style="color:blue;">var = var - 1</mark> (ifade değeri <mark style="color:purple;">var</mark>)</td></tr></tbody></table>

Örnek:

```dart
int a;
int b;

a = 0;
b = ++a; // a artırılır, sonra b değeri atanır.
assert(a == b); // 1 == 1

a = 0;
b = a++; // b değeri atanır, sonra a artırılır.
assert(a != b); // 1 != 0

a = 0;
b = --a; // a azaltılır, sonra b değeri atanır.
assert(a == b); // -1 == -1

a = 0;
b = a--; // b değeri atanır, sonra a azaltılır.
assert(a != b); // -1 != 0
```

### Eşitlik ve İlişkisel Operatörler

<table><thead><tr><th width="170">Operatör</th><th>Anlamı</th></tr></thead><tbody><tr><td><mark style="color:blue;">==</mark></td><td>Eşittir</td></tr><tr><td><mark style="color:purple;">!=</mark></td><td>Eşit değil</td></tr><tr><td><mark style="color:blue;">></mark></td><td>Büyüktür</td></tr><tr><td><mark style="color:purple;">&#x3C;</mark></td><td>Küçüktür</td></tr><tr><td><mark style="color:blue;">>=</mark></td><td>Büyüktür veya eşittir</td></tr><tr><td><mark style="color:purple;">&#x3C;=</mark></td><td>Küçüktür veya eşittir</td></tr></tbody></table>

İki nesnenin x ve y, aynı şeyi temsil edip etmediğini test etmek için == operatörünü kullanın. (İki nesnenin tam olarak aynı nesne olup olmadığını bilmek istemeniz durumunda, sadece `identical()` fonksiyonunu kullanın.) İşte == operatörünün nasıl çalıştığı:

1. x veya y null ise, her ikisi de null ise true döndürür, sadece biri null ise false döndürür.
2. x üzerinde y ile çağrılan == yönteminin sonucunu döndürür.&#x20;

İşte eşitlik ve ilişkisel operatörleri kullanma örnekleri:

```dart
assert(2 == 2);
assert(2 != 3);
assert(3 > 2);
assert(2 < 3);
assert(3 >= 3);
assert(2 <= 3);
```

### Tip Test Operatörleri

as, is ve is! operatörleri, tipleri çalışma zamanında kontrol etmek için kullanışlıdır.

<table><thead><tr><th width="154">Opeartör</th><th>Anlamı</th></tr></thead><tbody><tr><td><mark style="color:blue;">as</mark></td><td>Tip dönüşümü (ayrıca kütüphane öneklerini belirtmek için de kullanılır)</td></tr><tr><td><mark style="color:purple;">is</mark></td><td>Nesnenin belirtilen tipe sahip olup olmadığı doğru ise</td></tr><tr><td><mark style="color:blue;">is!</mark></td><td>Nesnenin belirtilen tipe sahip olmadığı doğru ise</td></tr></tbody></table>

Eğer nesnenin tipinin `T` tipi olduğundan eminseniz, objeyi bu tipe dönüştürmek için as operatörünü kullanın. Örnek:

```dart
(calisan as Kisi).firstName = 'Bayram';
```

Eğer nesnenin tipinin T tipi olup olmadığını bilmiyorsanız, objeyi kullanmadan önce tipi kontrol etmek için is T'yi kullanın.

```dart
if (calisan is Kisi) {
  // Tip kontrolü
  calisan.firstName = 'Bayram';
}
```

> **Not**
>
> Kod eşdeğer değildir. Eğer `calisan` null ise veya `Kisi` değilse, ilk örnek bir istisna fırlatır; ikinci örnek ise hiçbir şey yapmaz.

### Atama Operatörleri

Zaten gördüğünüz gibi, = operatörü ile değer atayabilirsiniz. Atanacak değişken null ise, ??= operatörünü kullanarak sadece atama yapabilirsiniz.

```dart
// Bir değer atayın
a = value;
// b null ise b'ye değer atayın; aksi takdirde b aynı kalır
b ??= value;
```

Zaten gördüğünüz gibi, = operatörü ile değer atayabilirsiniz. Atanacak değişken null ise, ??= operatörünü kullanarak sadece atama yapabilirsiniz.

<br>

<table data-header-hidden><thead><tr><th width="153"></th><th width="151"></th><th width="155"></th><th width="149"></th><th></th></tr></thead><tbody><tr><td>=</td><td>*=</td><td>%=</td><td>>>>=</td><td>^=</td></tr><tr><td>+=</td><td>/=</td><td>&#x3C;&#x3C;=</td><td>&#x26;=</td><td>|=</td></tr><tr><td>-=</td><td>~/=</td><td>>>=</td><td></td><td></td></tr></tbody></table>

İşte bileşik atama operatörlerinin nasıl çalıştığı:

<table data-header-hidden><thead><tr><th width="209"></th><th width="263"></th><th></th></tr></thead><tbody><tr><td>Bir operatör <mark style="color:purple;"><strong>op</strong></mark> için:</td><td><mark style="color:blue;">a</mark> <mark style="color:purple;">op=</mark> <mark style="color:blue;">b</mark></td><td><mark style="color:blue;">a = a</mark> <mark style="color:purple;">op</mark> <mark style="color:blue;">b</mark></td></tr><tr><td>Örneğin:</td><td><mark style="color:blue;">a</mark> <mark style="color:purple;">+= b</mark></td><td><mark style="color:blue;">a = a</mark> <mark style="color:purple;">+</mark> <mark style="color:blue;">b</mark></td></tr></tbody></table>

Aşağıdaki örnek, atama ve bileşik atama operatörlerini kullanır:

```dart
var a = 2; // = kullanarak değer atama
a *= 3; // Atama ve çarpma: a = a * 3
assert(a == 6);
```

### Mantıksal Operatörler

Mantıksal operatörleri kullanarak boolean ifadelerini tersine çevirebilir veya birleştirebilirsiniz.

<table><thead><tr><th width="135">Opeartör</th><th>Anlamı</th></tr></thead><tbody><tr><td><mark style="color:blue;">!ifade</mark></td><td>Takip eden ifadeyi tersine çevirir (<mark style="color:blue;">false</mark>'u <mark style="color:blue;">true</mark>'ya veya tam tersi)</td></tr><tr><td><mark style="color:purple;">||</mark></td><td>Mantıksal <mark style="color:purple;">OR</mark> (VEYA)</td></tr><tr><td><mark style="color:blue;">&#x26;&#x26;</mark></td><td>Mantıksal <mark style="color:blue;">AND</mark> (VE)</td></tr></tbody></table>

İşte mantıksal operatörleri kullanmanın bir örneği:

```dart
if (!tamamlandi && (col == 0 || col == 3)) {
  // ...Bir şey yap...
}
```

### Bitwise (Bit Düzeyi) ve Kaydırma Operatörleri

Dart'ta sayıların bitlerini manipüle edebilirsiniz. Genellikle bu bitwise ve kaydırma operatörlerini tamsayılarla kullanırsınız.

<table><thead><tr><th width="148">Operatör</th><th>Anlamı</th></tr></thead><tbody><tr><td><mark style="color:blue;">&#x26;</mark></td><td>AND</td></tr><tr><td><mark style="color:purple;">|</mark></td><td>OR</td></tr><tr><td><mark style="color:blue;">^</mark></td><td>XOR</td></tr><tr><td><mark style="color:purple;">~ifade</mark></td><td>Bit düzeyinde (0'ları 1 yapar; 1'leri 0 yapar)</td></tr><tr><td><mark style="color:blue;">&#x3C;&#x3C;</mark></td><td>Sola kaydırma</td></tr><tr><td><mark style="color:purple;">>></mark></td><td>Sağa kaydırma</td></tr><tr><td><mark style="color:blue;">>>></mark></td><td>İşaretsiz sağa kaydırma</td></tr></tbody></table>

> **Not**
>
> Büyük veya negatif operandlara sahip bitwise operasyonların davranışı platformlar arasında farklılık gösterebilir.&#x20;

İşte bitwise ve kaydırma operatörlerini kullanmanın bir örneği:

```dart
final deger = 0x22;
final maske = 0x0f;

assert((deger & maske) == 0x02); // VE (AND)
assert((deger & ~maske) == 0x20); // VE DEĞİL (AND NOT)
assert((deger | maske) == 0x2f); // VEYA (OR)
assert((deger ^ maske) == 0x2d); // XOR

assert((deger << 4) == 0x220); // Sola kaydırma
assert((deger >> 4) == 0x02); // Sağa kaydırma

// Web üzerinde farklı davranan bir örnekte sağa kaydırma
// çünkü operand değeri 32 bit olarak maskeleyince değişir:
assert((-deger >> 4) == -0x03);

assert((deger >>> 4) == 0x02); // İşaretsiz sağa kaydırma
assert((-deger >>> 4) > 0); // İşaretsiz sağa kaydırma
```

### Koşullu İfadeler

Dart dilinde, aksi takdirde if-else ifadeleri gerektirebilecek ifadeleri kısa bir şekilde değerlendirmenizi sağlayan iki operatör bulunmaktadır:

* `kosul ? ifade1 : ifade2` Eğer condition doğruysa, ifade1'i değerlendirir (ve değerini döndürür); aksi takdirde, ifade2'yi değerlendirir ve değerini döndürür.
* `ifade1 ?? ifade2` Eğer ifade1 değeri null değilse, değerini döndürür; aksi takdirde, ifade2'yi değerlendirir ve değerini döndürür.

```dart
var gorunurluk = gorunurMu ? 'görünür' : 'gizli';
// Eğer boolean ifade null kontrolü yapıyorsa, ?? operatörünü kullanmayı düşünün.
String playerName(String? isim) => isim ?? 'Misafir';
```

### Cascade Notasyonu

Cascade (.., ?..) notasyonları, aynı nesne üzerinde bir dizi işlem yapmanıza olanak tanır. Örnek olarak:

```dart
var boya = Paint()
  ..color = Colors.black
  ..strokeCap = StrokeCap.round
  ..strokeWidth = 5.0;
```

Yukarıdaki örnek, aşağıdaki kodla eşdeğerdir:

```dart
var boya = Paint();
boya.color = Colors.black;
boya.strokeCap = StrokeCap.round;
boya.strokeWidth = 5.0;
```

Eğer cascade'in çalıştığı nesne null olabilirse, ilk işlem için bir null kontrolü cascade'i kullanın (?..).

```dart
querySelector('#confirm') // Bir nesne al.
  ?..text = 'Onayla' // Üyelerini kullan.
  ..classes.add('önemli')
  ..onClick.listen((e) => window.alert('Onaylandı!'))
  ..scrollIntoView();
```

Cascade kullanarak iç içe cascade'ler oluşturabilirsiniz.

```dart
final adresDefteri = (AddressBookBuilder()
      ..name = 'Bayram'
      ..email = 'info@bayramalacam.com'
      ..phone = (PhoneNumberBuilder()
            ..number = '+90 5xx xxx xxxx'
            ..label = 'cep')
          .build())
    .build();
```

Cascade'inizi bir işlevin gerçek bir nesne döndürdüğünden emin olun. Aksi takdirde, cascade void üzerine kurulamaz.

> **Not**
>
> Cascade notasyonu, kesin olarak "çift nokta" notasyonu olarak adlandırılmaz. Bu, sadece Dart dilinin bir parçasıdır.

### Diğer Operatörler

Diğer operatörleri de başka örneklerde gördünüz:

<table><thead><tr><th width="118">Operatör</th><th width="133">Adı</th><th>Anlamı</th></tr></thead><tbody><tr><td><code>()</code></td><td>Fonksiyon uygulama</td><td>Bir fonksiyon çağrısını temsil eder.</td></tr><tr><td><code>[]</code></td><td>Parantez erişimi</td><td>Overridable <mark style="color:blue;">[]</mark> operatörüne çağrıyı temsil eder; örneğin: <mark style="color:blue;">fooList[1]</mark>, <mark style="color:blue;">fooList</mark>'e int <mark style="color:blue;">1</mark>'i iletilir ve <mark style="color:blue;">1</mark>. indeksteki elemana erişir.</td></tr><tr><td><code>?[]</code></td><td>Koşullu parantez erişimi</td><td><mark style="color:blue;">[]</mark>, ancak en sol operand null olabilir; örneğin: <mark style="color:blue;">fooList?[1]</mark>, <mark style="color:blue;">fooList</mark> null değilse <mark style="color:blue;">1</mark>. indeksteki elemana erişir; aksi takdirde ifade null olarak değerlendirilir.</td></tr><tr><td><code>.</code></td><td>Üye erişimi</td><td>Bir ifadenin özelliğine atıfta bulunur; örneğin: <mark style="color:blue;">foo.bar</mark>, <mark style="color:blue;">foo</mark> ifadesinden bar özelliğini seçer.</td></tr><tr><td><code>?.</code></td><td>Koşullu üye erişimi</td><td>En sol operand null olabilir; örneğin: <mark style="color:blue;">foo?.bar</mark>, <mark style="color:blue;">foo</mark> null değilse <mark style="color:blue;">foo</mark>'nun <mark style="color:blue;">bar</mark> özelliğini seçer; aksi takdirde <mark style="color:blue;">foo?.bar</mark> ifadesinin değeri null olur.</td></tr><tr><td><code>!</code></td><td>Null olmayan güvence operatörü</td><td>Bir ifadeyi altında yatan non-nullable türüne dönüştürür; dönüşüm başarısız olursa çalışma zamanında bir istisna fırlatır; örneğin: <mark style="color:blue;">foo!.bar</mark>, <mark style="color:blue;">foo</mark>'nun null olmadığını ve <mark style="color:blue;">bar</mark> özelliğini seçer, ancak <mark style="color:blue;">foo</mark> null ise çalışma zamanında bir istisna fırlatılır.</td></tr></tbody></table>


---

# 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.bayramalacam.com/sozdizimi-temelleri-syntax-basics/operatorler-operators.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.
