Tiplemenin Temelleri: Sayılardan Karmaşık Yapılara
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.
- Örnekler:
- 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.
- Örnekler:
- 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
ARRAYtipi.
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.
| Kategori | Python | JavaScript | SQL (PostgreSQL/MySQL) | C# / Java |
|---|---|---|---|---|
| Tamsayı | int | Number (veya BigInt) | INT, BIGINT | int, long |
| Ondalık sayı | float | Number | FLOAT, DOUBLE | float, double |
| Kesin sayı | Decimal | (kütüphaneler) | DECIMAL, NUMERIC | BigDecimal |
| Metin | str | String | VARCHAR, TEXT | String |
| Mantıksal | bool | Boolean | BOOLEAN | boolean |
| Tarih/Saat | datetime | Date | TIMESTAMP, DATE | DateTime |
| Yokluk | None | null / undefined | NULL | null |
Doğru Tip Nasıl Seçilir?
- 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. - 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. - 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
Enumkullanın.
Yeni Başlayanların Sık Yaptığı Hatalar
- Sayılar yerine dizelerin toplanması.
JavaScript'te
"5" + 5işlemi10değil,"55"(birleştirme) sonucunu verir. Tipleri açıkça dönüştürmek gerekir:Number("5") + 5. - Null'u görmezden gelmek.
nullüzerinde bir method çağırmaya çalışmak (örneğinnull.length) programın çökmesine neden olur. Kullanmadan önce her zaman değerin varlığını kontrol edin. - 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. YerelDateveyaTimestamptiplerini 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.