# Matematiksel (Aritmetik) Operatörler

## Toplama ( `+` )

İki ***değeri*** birbiriyle toplamak veya birleştirmek için kullanılan **`+`** sembolüdür. Bu operatör ile sayısal değerler toplanır. Eğer değerler arasında en az bir tane **`string`** var ise **`string`** olarak birleştirilir. Örnek.

{% code lineNumbers="true" %}

```javascript
alert(19 + 23); // sonuç number: 42
alert(19 + '23'); // sonuç string: '1923'
alert(19 + '23 TR'); // sonuç string: '1923 TR'
alert('19' + '23'); // sonuç string: '1923'
```

{% endcode %}

**`+`** operatörü değişkeni sayıya dönüştürmek için de kullanılır. Sayısal olamayacak verileri dönüştürüp **`NaN`** değeri üretir. Örnek.

{% code lineNumbers="true" %}

```javascript
let sayi1 = '2023';
let sayi2 = '1923';
let fark = +sayi1 + +sayi2; //2023 + 1923
alert(fark); // Number tipinde 3946 değeri.
alert( +('Bindokuzyüzyirmiüç') ); // Number tipinde NaN değeri.
```

{% endcode %}

## Çıkarma ( `-` )

İki ***değeri*** birbirinden çıkarmak için kullanılan **`-`** sembolüdür. Eğer öğeler sayısal olabilecek değer içeriyorsa dönüştürüp işlemi yapar. Eğer öğelerden en az biri sayısal olamayacak değer içeriyorsa **`NaN`** değeri üretir. Örnek.

{% code lineNumbers="true" %}

```javascript
alert(2023 - 1923); // sonuç number: 100
alert(19 - '23'); // sonuç number: -4
alert(19 - '23 TR'); // sonuç number: NaN
```

{% endcode %}

**`String`** tipini negatif olarak **`number`** tipine dönüştürmek için de **`-`** operatörü kullanılabilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let sayi1 = '2023';
let sayi2 = '1923';
let fark = -sayi1 - -sayi2; // -2023 - (-1923)
alert(fark); // Number tipinde -100 değeri.
alert( -('Bindokuzyüzyirmiüç') ); // Number tipinde NaN değeri.
```

{% endcode %}

## Çarpma ( `*` )

İki ***değeri*** çarpmak için kullanılan **`*`** sembolüdür. Eğer öğeler sayısal olabilecek değer içeriyorsa dönüştürüp işlemi yapar. Eğer öğelerden en az biri sayısal olamayacak değer içeriyorsa **`NaN`** değeri üretir. Örnek.

{% code lineNumbers="true" %}

```javascript
alert(12 * 12); // sonuç number: 144
alert(12 * '12'); // sonuç number: 144
alert(12 * '12 TR'); // sonuç number: NaN
```

{% endcode %}

## Bölme ( `/` )

İki ***değeri*** bölmek için kullanılan **`/`** sembolüdür. Eğer öğeler sayısal olabilecek değer içeriyorsa dönüştürüp işlemi yapar. Eğer öğelerden en az biri sayısal olamayacak değer içeriyorsa **`NaN`** değeri üretir. Örnek.

{% code lineNumbers="true" %}

```javascript
alert(100 / 10); // sonuç number: 10
alert(100 / '10'); // sonuç number: 10
alert(100 / '10 TR'); // sonuç number: NaN
```

{% endcode %}

## Üs Alma ( `**` )

İlk ***değeri*** taban ikinci ***değeri*** üs olarak kullanan **`**`** sembolüdür. Eğer öğeler sayısal olabilecek değer içeriyorsa dönüştürüp işlemi yapar. Eğer öğelerden en az biri sayısal olamayacak değer içeriyorsa **`NaN`** değeri üretir. Örnek.

{% code lineNumbers="true" %}

```javascript
alert(10 ** 3); // sonuç number: 1000
alert(10 ** '3'); // sonuç number: 1000
alert(100 ** '3 TR'); // sonuç number: NaN
```

{% endcode %}

## Mod Alma (Kalan) ( `%` )

İlk ***değeri*** bölünen ikinci ***değeri*** bölen olarak kullanan **`%`** sembolüdür. Eğer öğeler sayısal olabilecek değer içeriyorsa dönüştürüp işlemi yapar. Eğer öğelerden en az biri sayısal olamayacak değer içeriyorsa **`NaN`** değeri üretir. Örnek.

{% code lineNumbers="true" %}

```javascript
alert(10 % 3); // sonuç number: 1
alert(10 % '3'); // sonuç number: 1
alert(10 % '3 TR'); // sonuç number: NaN
```

{% endcode %}

## Artırma ( `++` )

Sadece sayısal olabilecek ***değişkenleri*** bir artırmak için kullanılan **`++`** sembolüdür. Sadece değişken isimleriyle kullanılabilir doğrudan değer ile kullanılamaz. Önden artırım ve sonradan artırım olarak iki türü mevcuttur.&#x20;

Sonradan artırım kullanımında **okunduktan sonra artırım yapar** ve bir sonraki okumada değeri artmış olur. Örnek.

{% code lineNumbers="true" %}

```javascript
// Sonradan artırım
let sayi = 9;
alert(sayi++); // Önce sayi:9 çıktısı verdi ardından artırım yaptı.
alert(sayi); // Artık sayı 10 olarak çıktı verir.
```

{% endcode %}

Önden artırım kullanımında **okunmadan hemen önce artırım yapar** ve ilk okumada değeri artmış olur. Örnek.

{% code lineNumbers="true" %}

```javascript
// Önden artırım
let sayi = 9;
alert(++sayi); // Önce artırım yaptı sonra okuma yaptı 10 olarak çıktı verdi.
```

{% endcode %}

**`Number`** tipine dönüştürülebilecek diğer tipleri de dönüştürüp işlemi yapar. Örnek.

{% code lineNumbers="true" %}

```javascript
let sayi1 = '9'; // String
let sayi2 = '19'; // String
let toplam = ++sayi1 + sayi2++; // sayi1: 10, sayi2: 19 Sonuç:29
alert(toplam); // 29 çıktısı verir.
alert(sayi2); // Sonradan artırım sonraki okumada değer artırır: 20
```

{% endcode %}

## Azaltma ( `--` )

Sadece sayısal olabilecek ***değişkenleri*** bir azaltmak için kullanılan **`--`** sembolüdür. Sadece değişken isimleriyle kullanılabilir doğrudan değer ile kullanılamaz. Önden azaltma ve sonradan azaltma olarak iki türü mevcuttur.&#x20;

Sonradan azaltma kullanımında **okunduktan sonra azaltma yapar** ve bir sonraki okumada değeri azaltmış olur. Örnek.

{% code lineNumbers="true" %}

```javascript
// Sonradan azaltma
let sayi = 11;
alert(sayi--); // Önce sayi:11 çıktısı verdi ardından azaltma yaptı.
alert(sayi); // Artık sayı 10 olarak çıktı verir.
```

{% endcode %}

Önden azaltma kullanımında **okunmadan hemen önce azaltma yapar** ve ilk okumada değeri azalmış olur. Örnek.

{% code lineNumbers="true" %}

```javascript
// Önden azaltma
let sayi = 11;
alert(--sayi); // Önce azaltma yaptı sonra 10 olarak çıktı verdi.
```

{% endcode %}

**`Number`** tipine dönüştürülebilecek diğer tipleri de dönüştürüp işlemi yapar. Örnek.

{% code lineNumbers="true" %}

```javascript
let sayi1 = '11'; // String
let sayi2 = '21'; // String
let toplam = --sayi1 + sayi2--; // sayi1: 10, sayi2: 21 Sonuç:31
alert(toplam); // 31 çıktısı verir.
alert(sayi2); // Sonradan azaltma sonraki okumada değer azaltır: 20
```

{% endcode %}

{% hint style="info" %}
Javascript işlem önceliğine göre işlemleri yapar. Javascriptte matematiksel işlemler güvenlidir. Tip hatası olsa bile **`NaN`** değeri üretir.
{% endhint %}
