Tiplemenin Temelleri: Sayılardan Karmaşık Yapılara

Kerem Aydın·8 Temmuz 2026·⏱5 dk

Veri tipi, bir değişkenin hangi değerleri saklayabileceğini ve üzerinde hangi işlemlere izin verildiğini belirleyen bilgi sınıflandırmasıdır. Basitçe ifade etmek gerekirse: tip, bilgisayarın "42" ifadesinin toplanabilen bir sayı mı yoksa sadece görüntülenebilen bir metin olan "42" mi olduğunu anlamasını sağlar. Doğru tip seçimi bellekten tasarruf sağlar, kodun yürütülme hızını artırır ve mantıksal hataları önler.

Bu makalede ilkel ve karmaşık veri tiplerini inceleyeceğiz, popüler dillerden (Python, JavaScript, SQL) örnekler vereceğiz ve neden parayı kayan noktalı tiplerde saklamanız gerektiğini açıklayacağız.

Kısa cevap: Temel veri tipleri ilkel (sayılar, dizeler, boolean değerler) ve karmaşık (diziler, nesneler) olarak ikiye ayrılır. Seçim göreve bağlıdır: faturalar için Decimal, bayraklar için Boolean ve listeler için Array kullanın.

İlkel Veri Tipleri

İlkeller, programlamanın "atomları"dır. Tek bir değer saklarlar ve dahili bir yapıları yoktur.

1. Sayısal Tipler (Numbers)

Bilgisayarlar tamsayıları ve ondalıklı sayıları ayırt eder, çünkü bunlar bellekte farklı şekillerde saklanır.

  • Tamsayılar (Integer, int): Adet sayma, kullanıcı ID'leri, indeksler için kullanılır. Ondalık kısmı yoktur.
    • Örnekler: 1, -50, 2026.
  • Kayan Noktalı Sayılar (Float, double): Küçük bir hata payının kabul edilebilir olduğu bilimsel hesaplamalar için kullanılır.
    • Örnekler: 3.14, 0.001, 2.5e10.
  • Ondalık Sayılar (Decimal): Finans için kritik öneme sahiptir. Yuvarlama hataları olmadan kesin değeri saklar.

Para için asla Float kullanmayın! Binary aritmetiğin özellikleri nedeniyle float formatında 0.1 + 0.2 işlemi 0.30000000000000004 sonucunu verebilir. Para birimleri için her zaman Decimal tipini kullanın veya tutarı en küçük birimlerde (kopek/sent) Integer olarak saklayın.

2. Dizeler (Strings)

Metni temsil eden karakter dizisidir. Modern sistemlerde genellikle UTF-8 ile kodlanır, bu da emojileri ve Kiril alfabesini destekler.

  • Kullanım amacı: İsimler, adresler, açıklamalar, JSON yapıları.
  • Özellikler: Dizeler değiştirilemez (çoğu dilde). Büyük dizelerin birleştirilmesi (concatenation) bellek açısından maliyetli olabilir.
  • Örnekler: "Hello World", "[email protected]", "2026-05-07".

3. Mantıksal Tip (Boolean)

Sadece iki değere sahip en basit tip: true (doğru) ve false (yanlış).

  • Kullanım amacı: Durum bayrakları, karşılaştırma sonuçları, kod içindeki koşullar.
  • Örnekler: is_active = true, has_paid = false.

Sadece iki durum varsa, durumları dize olarak ("active", "inactive") saklamaktan kaçının. Boolean tipi daha az yer kaplar (genellikle 1 bit veya byte) ve işlemci tarafından daha hızlı işlenir.

4. Özel Değerler

  • Null / None / Nil: "Değer yok" anlamına gelir. Bu sıfır veya boş dize değil, tam anlamıyla boşluktur.
  • Undefined (JS'de): Değişken tanımlanmıştır ancak henüz ona bir değer atanmamıştır.

Karmaşık (Bileşik) Veri Tipleri

Bu tipler, birden fazla değeri tek bir yapıda gruplamaya olanak tanır.

Diziler ve Listeler (Arrays / Lists)

Elemanlara indeks ile erişilen sıralı bir koleksiyondur. Genellikle bir dizinin tüm elemanları aynı tipe sahiptir.

  • Örnek (Python): fruits = ["apple", "banana", "cherry"]
  • Örnek (SQL): PostgreSQL'de ARRAY tipi.

Nesneler ve Sözlükler (Objects / Dicts / Maps)

"Anahtar-değer" çiftlerinden oluşan bir kümedir. Verilere numara yerine alan adı ile erişmeye olanak tanır.

  • Örnek (JSON):
    {
      "id": 101,
      "name": "Alex",
      "role": "admin"
    }
    ```
*   Python'da bu `dict`, JavaScript'te `Object`, Java'da ise `HashMap`'tir.

### Numaralandırmalar (Enum)

Bir değişkeni kesinlikle belirlenmiş bir değer kümesiyle sınırlayan tiptir.

*   *Örnek:* Sipariş durumu sadece `NEW`, `PROCESSING`, `SHIPPED`, `DELIVERED` olabilir.
*   **Neden gereklidir:** Kod veya veritabanı seviyesinde yazım hatalarından ve geçersiz verilerden korur.

## Tarih ve Saat (Date & Time)

Teknik olarak tarih genellikle bir sayı olarak saklanmasına rağmen (timestamp — 1 Ocak 1970'ten beri geçen saniyeler), mantıksal olarak ayrı bir tiptir.

*   **Date:** Sadece tarih (yıl-ay-gün).
*   **Time:** Sadece saat (saat-dakika-saniye).
*   **DateTime / Timestamp:** Tarih ve saat birlikte.

Saat dilimi sorunu Veritabanında saati her zaman UTC formatında saklayın. Yerel kullanıcı saatine (örneğin MSK veya EST) dönüştürmeyi yalnızca istemci tarafında (tarayıcıda veya uygulamada) gerçekleştirin. Aksi takdirde yaz/kış saati uygulamasına geçişte veya sunucu değişikliğinde veriler bozulur.

Farklı Ortamlarda Tiplerin Karşılaştırılması

Belirli tip adlarının seçimi programlama diline veya VTYS'ye bağlıdır.

KategoriPythonJavaScriptSQL (PostgreSQL/MySQL)C# / Java
TamsayıintNumber (veya BigInt)INT, BIGINTint, long
Ondalık sayıfloatNumberFLOAT, DOUBLEfloat, double
Kesin sayıDecimal(kütüphaneler)DECIMAL, NUMERICBigDecimal
MetinstrStringVARCHAR, TEXTString
MantıksalboolBooleanBOOLEANboolean
Tarih/SaatdatetimeDateTIMESTAMP, DATEDateTime
YoklukNonenull / undefinedNULLnull

Doğru Tip Nasıl Seçilir?

  1. Bellek tasarrufu: Bir alan 1 ile 100 arasında değerler alıyorsa, BIGINT (8 byte) kullanmanın anlamı yoktur, TINYINT (1 byte) yeterlidir. Yüksek yüklü sistemlerde bu, gigabaytlarca disk ve RAM tasarrufu sağlar.
  2. Arama hızı: Veritabanlarında sayısal indeksler dizesel olanlardan daha hızlı çalışır. Bir ürün ID'niz varsa, bunu "123" gibi bir dize olarak değil, sayı olarak saklayın.
  3. Veri bütünlüğü: Katı tipler kullanın. Bir alan e-posta içermeliyse, bunu uygulama seviyesinde doğrulamak daha iyidir ancak dize olarak saklayın. Durum 3 seçenekle sınırlıysa Enum kullanın.

Yeni Başlayanların Sık Yaptığı Hatalar

  1. Sayılar yerine dizelerin toplanması. JavaScript'te "5" + 5 işlemi 10 değil, "55" (birleştirme) sonucunu verir. Tipleri açıkça dönüştürmek gerekir: Number("5") + 5.
  2. Null'u görmezden gelmek. null üzerinde bir method çağırmaya çalışmak (örneğin null.length) programın çökmesine neden olur. Kullanmadan önce her zaman değerin varlığını kontrol edin.
  3. Tarihlerin dize olarak saklanması. Tarihi "07.05.2026" olarak kaydederseniz, kayıtları zamana göre kolayca sıralayamaz veya "son hafta" içindeki kayıtları bulamazsınız. Yerel Date veya Timestamp tiplerini kullanın.

SSS

Statik ve dinamik tipleme arasındaki fark nedir? Statik olarak tiplendirilmiş dillerde (C++, Java, Go) değişkenin tipi tanımlama sırasında belirtilir ve değiştirilemez. Dinamik dillerde (Python, JS) tip değere bağlıdır ve bir değişken bugün sayı, yarın dize saklayabilir.

Veritabanlarında tipleme nedir? SQL'de tablo oluştururken her sütunun tipini belirtmek zorundasınız. Bu, "Yaş" sütununa isim, "Fiyat" sütununa tarih yazılmamasını garanti eder.

Neden her şeyi dize olarak saklayamazsınız? Dizeler daha fazla yer kaplar, indekslenmeleri daha zordur ve ön dönüşüm yapılmadan matematiksel işlemler veya zamana göre sıralama yapılamaz, bu da işlemciyi yükler.