Türkçenin dört farklı "i" harfi vardır: noktalı küçük i, noktalı büyük İ, noktasız küçük ı ve noktasız büyük I — İngilizcedeki tek çift i/I'nin aksine. Bu yüzden Türkçe yerel ayarı (locale) açık bir sistemde "I".toLowerCase() çoğu programlama dilinde beklenen "i" değil, noktasız "ı" döndürür; tersine "i".toUpperCase() da "I" değil "İ" verir. Bu, "Türkçe I sorunu" olarak bilinen ve dünya çapında sayısız gerçek üretim hatasına yol açmış, iyi belgelenmiş bir yerelleştirme tuzağıdır.
Ana stiller
- camelCase — ilk kelime küçük harfle, sonraki her kelime büyük harfle başlar, ayırıcı yok:
userName. JavaScript, Java, C#'ta değişkenler ve fonksiyonlar için standart. - PascalCase — aynısı, ama ilk kelime de büyük harfle başlar:
UserName. Neredeyse her yerde sınıflar ve bileşenler için kullanılır. - snake_case — kelimeler alt çizgiyle ayrılır, hepsi küçük harf:
user_name. Python'da ve veritabanı sütun adlarında standart. - kebab-case — kelimeler tire ile ayrılır:
user-name. URL'ler, CSS sınıfları ve HTML öznitelikleri için standart, çünkü alt çizgi URL'lerde daha az yaygındır.
Bu neden sadece estetik değil
Türkçe I sorunu genelde şöyle ortaya çıkar: bir geliştirici "ID".toLowerCase() çağırır ve Türkçe yerel ayarı etkinken beklediği "id" yerine "ıd" sonucunu alır — çünkü büyük "I" Türkçede noktasız küçük "ı"ya döner. Bu tür sabit (case-insensitive) karşılaştırmalar, dosya uzantısı kontrolleri ve anahtar kelime eşleştirmelerinde sessizce başarısız olabilir; çözüm genellikle yerelden bağımsız (invariant/ordinal) karşılaştırma kullanmaktır, yerel ayarlı karşılaştırma değil.
Dönüştürme ne için gerekli
- Bir JSON API'sinden gelen bir alanı (genellikle camelCase) bir veritabanı sütun adına (genellikle snake_case) eşlemek.
- Kodu farklı bir kuralı olan bir dilden diğerine taşırken değişkenleri yeniden adlandırmak.
- Bir başlık metninden URL'ye uygun bir slug veya CSS sınıfı oluşturmak.
Kısaltmalarla belirsizlik
userID veya XMLParser gibi bir tanımlayıcı, dönüştürücüyü bir seçimle karşı karşıya bırakır: kısaltmayı tek bir "kelime" olarak mı kabul etmeli, yoksa tek tek harflere mi bölmeli? Farklı araçlar bunu farklı şekilde çözer — bu araç ardışık büyük harflerden oluşan bir diziyi ayrı bir kelime olarak tanır (XMLParser → XML + Parser), ama isim doğrudan production koduna girecekse sonucu elle kontrol etmekte fayda var.