camelCase, snake_case, kebab-case: geliştiriciler için hızlı başvuru rehberi

Kısa özet şu: Türler ve sınıflar hemen her dilde PascalCase yazılır. Değişkenler ve fonksiyonlar JavaScript, Java, C#, Kotlin ve Swift'te camelCase, Python, Ruby ve Rust'ta ise snake_case yazılır. Sabitler çoğu dilde SCREAMING_SNAKE_CASE yazılır; Go, Swift, C# ve Google stilindeki C++ bunun istisnalarıdır. Bir URL'de, CSS dosyasında ya da paket adında yer alan her şey genellikle küçük harfli kebab-case, ortam değişkenleri ise alt çizgili büyük harflerdir.
Örüntü bu. Kod incelemelerinde tartışma çıkan yer ayrıntılardır; bu yüzden bu başvuru rehberi her dilin resmî ya da en yaygın kullanılan stil kılavuzunun gerçekte ne dediğine bağlı kalır ve her dil için kaynağı belirtir.
camelCase, snake_case, kebab-case: beş stil ve öbür adları
- camelCase (
orderTotal): ilk sözcük küçük harfle, sonraki her sözcük büyük harfle başlar. lowerCamelCase da denir; PEP 8 buna mixedCase der. - PascalCase (
OrderTotal): her sözcük büyük harfle başlar. UpperCamelCase, CapWords (PEP 8) ya da StudlyCaps (PHP'nin PSR-1'i) olarak da geçer. - snake_case (
order_total): küçük harfli sözcükler alt çizgiyle birleştirilir. - SCREAMING_SNAKE_CASE (
ORDER_TOTAL): büyük harfli sözcükler alt çizgiyle birleştirilir. Google'ın JavaScript kılavuzu buna CONSTANT_CASE, Java kılavuzu UPPER_SNAKE_CASE der. - kebab-case (
order-total): küçük harfli sözcükler tireyle birleştirilir. Çoğu dil bunu tanımlayıcılarda kullanamaz, çünkü tire bir eksi işaretidir.
Bir adı bir stilden ötekine çevirmek için büyük/küçük harf dönüştürücümüze yapıştırın. Boşluklardan, alt çizgilerden, tirelerden ve mevcut büyük harflerden böler; bu yüzden order_total, order-total ve OrderTotal birbirine sorunsuz dönüşür. Yine de her seferinde tek bir ad çevirin: kutudaki her şeyi tek bir tanımlayıcı olarak ele alır.
Hızlı başvuru: dillere göre adlandırma kuralları
| Dil | Değişkenler ve fonksiyonlar | Sınıflar ve türler | Sabitler | Kaynak |
|---|---|---|---|---|
| JavaScript, TypeScript | camelCase | PascalCase | Hiç değişmeyen, modül düzeyindeki değerler için CONSTANT_CASE | Google JavaScript ve TypeScript stil kılavuzları |
| Java | camelCase | PascalCase | Derinlemesine değiştirilemez static final alanlar için UPPER_SNAKE_CASE | Google Java Style Guide |
| Kotlin | camelCase | PascalCase | const ile derinlemesine değiştirilemez üst düzey ya da nesne değerleri için SCREAMING_SNAKE_CASE | Kotlin coding conventions |
| C# | Yerel değişkenler ve parametreler için camelCase, özel alanlar için _camelCase, metotlar ve herkese açık üyeler için PascalCase | PascalCase; arayüzlerde I öneki (IWorkerQueue) | PascalCase | Microsoft .NET belgeleri |
| Swift | camelCase | PascalCase | camelCase | Swift API Design Guidelines |
| Go | Dışa aktarılmıyorsa camelCase, aktarılıyorsa PascalCase | Aynı kural | Yine MixedCaps (MaxPacketSize) | Effective Go, Google Go Style |
| Python | snake_case | PascalCase (CapWords) | UPPER_SNAKE_CASE | PEP 8 |
| Ruby | snake_case | PascalCase | SCREAMING_SNAKE_CASE | Ruby Style Guide |
| Rust | snake_case | PascalCase (UpperCamelCase) | SCREAMING_SNAKE_CASE | Rust API Guidelines (RFC 430) |
| PHP | Metotlar camelCase; özellikler size bırakılmıştır | PascalCase (StudlyCaps) | Sınıf sabitleri için UPPER_SNAKE_CASE | PSR-1 |
| C++ | Değişkenler snake_case, fonksiyonlar PascalCase | PascalCase | kDaysInAWeek | Google C++ Style Guide (birkaç kılavuzdan biri) |
Birkaç satıra dipnot düşmek gerekiyor. Go'da ilk harf hiç de bir stil tercihi değildir: görünürlük kuralıdır. Area paketinden dışa aktarılır, area aktarılmaz ve bunu derleyici zorunlu kılar. C++'ın dil çapında bir geleneği yok; standart kütüphanenin kendisi snake_case kullanır (std::unordered_map, push_back). Bu yüzden Google satırını kural olarak değil, iyi belgelenmiş bir seçenek olarak görün.
Rust stil konusunda alışılmadık derecede katıdır. Derleyici daha en baştan uyarır: fn GetUser() ya da struct user_account yazarsanız rustc, siz bir linter çalıştırmadan önce get_user ve UserAccount önerir.
Dosya, modül ve paket adları
- Java: Herkese açık üst düzey bir sınıf, büyük harfleri de dahil tam olarak kendi adını taşıyan bir dosyada bulunmak zorundadır.
OrderService,OrderService.javadosyasına girer; javac başka her şeyi reddeder. - Kotlin: Tek bir sınıf barındıran dosya o sınıfın adını alır. Diğer dosyalar
ProcessDeclarations.ktgibi açıklayıcı bir UpperCamelCase ad alır. - Python: Modüller kısa, tamamı küçük harfli adlar alır; okunabilirliğe yardımcı oluyorsa alt çizgi kullanılabilir. Paketler de kısa ve küçük harfli olmalıdır; PEP 8 onlarda alt çizgiyi önermez.
- Ruby: snake_case dosyalar, içlerindeki sınıfın adını taşır; yani
HelloWorld,hello_world.rbdosyasında bulunur. - Go: Paket adları alt çizgisiz, mixedCaps'siz, küçük harfli tek sözcüklerdir:
encoding_base64ya daencodingBase64değil,base64. - JavaScript ve TypeScript: Tek bir kural yok. Google'ın JavaScript kılavuzu alt çizgili ya da tireli, tamamı küçük harfli dosya adları ister; TypeScript kılavuzu ise snake_case kullanır. Airbnb'nin kılavuzu bir dosya adının varsayılan dışa aktarımıyla (default export) eşleşmesi gerektiğini söyler; yani
CheckBoxsınıfıCheckBox.jsdosyasında bulunur. Proje başına birini seçin ve yazıya geçirin. - npm paketleri: Yeni paket adları hiçbir şekilde büyük harf içeremez.
Kaynak kodun ötesinde: ortam değişkenleri, CSS, HTML, URL'ler, JSON ve SQL
| Nerede | Kural | Örnek | Neden |
|---|---|---|---|
| Ortam değişkenleri | SCREAMING_SNAKE_CASE | DATABASE_URL | PATH ve HOME gibi sistem değişkenleriyle uyumludur. Adlar Linux ve macOS'ta büyük/küçük harfe duyarlıdır, Windows'ta değildir. |
| CSS özellikleri | kebab-case | background-color | Dil tarafından belirlenmiştir. |
| CSS özel özellikleri (custom properties) | İki tireden sonra kebab-case | --brand-color | Büyük/küçük harfe duyarlıdır; yani --Brand-Color başka bir özellik olurdu. |
| CSS sınıf adları | kebab-case, çoğunlukla BEM ile | card__title--large | Çevresindeki özellikler gibi okunur. |
| JavaScript'ten CSS | camelCase | el.style.backgroundColor | style nesnesi özellik adlarını camelCase olarak sunar. |
| HTML data öznitelikleri | kebab-case | data-index-number | JavaScript'te dataset.indexNumber olarak okunur. |
| URL yolları | Küçük harfli kebab-case | /blog/developer-case-styles | Google alt çizgi yerine tire önerir ve /APPLE ile /apple adreslerini farklı URL'ler sayar. |
| JSON anahtarları | Standart yok | userId ya da user_id | Ana tüketiciye uyun, dönüşümü sınırda yapın. |
| SQL tabloları ve sütunları | Küçük harfli snake_case | order_items | Her büyük veritabanında tırnak işareti olmadan çalışır. |
Ortam değişkenleriyle ilgili bir tuhaflık: POSIX, standart yardımcı programların büyük harfli adlar kullandığını ve küçük harf içeren adları uygulamalara ayırdığını söyler; yani küçük harfli bir ad standart bir adla asla çakışmaz. Yine de büyük harf yerleşik alışkanlıktır. Bu yüzden biz onu korur, çakışmaları önlemek için ise ayırt edici bir önek (MYAPP_TIMEOUT) eklerdik.
CSS ve SQL satırlarının her birinin ayrı bir yazısı var: sınıf adları için CSS adlandırma ve BEM, veritabanlarının sizi neden küçük harfe yönlendirdiği için SQL adlandırma kuralları yazısına bakın.
Kısaltmalar: stil kılavuzlarının ayrıştığı yer
Bütün kılavuzlar userName konusunda hemfikirdir. userID konusunda ise ayrılırlar. Google'ın JavaScript ve Java kılavuzları kısaltmaları sıradan sözcükler gibi küçük harfle yazar (xmlHttpRequest, customerId). Go her kısaltmayı tek tip tutar (ServeHTTP, appID). Microsoft'un .NET yönergeleri iki harfli bir kısaltmada iki harfi de büyük yazar (IOStream), daha uzunlarda yalnızca ilk harfi (HtmlTag). Rust bunları sözcük sayar (Uuid); PEP 8 ise HTTPServerError biçimini HttpServerError biçimine tercih eder. Seçenekleri camelCase ile PascalCase yazımızda yan yana karşılaştırıyoruz.
Emin olmadığınızda nasıl seçersiniz
- Platformun sizin yerinize karar verip vermediğine bakın. CSS özellik adları, Java dosya adları, Go'nun dışa aktarılan adları ve React bileşen adları (büyük harfle başlamak zorundadır) bir stil tercihi değildir.
- Dilin resmî kılavuzunu izleyin. Yeni kod, yanında durduğu standart kütüphaneye benzemelidir.
- Mevcut projeye uyun. PEP 8 bunu açıkça söyler: bir proje içindeki tutarlılık, stil kılavuzuyla tutarlılıktan daha önemlidir.
- Hatırlama işini bir linter'a bırakın. ESLint'in
camelcasekuralı, Python için Ruff'ınNkuralları ve rustc'nin yerleşik uyarıları, hataları bir inceleyici yakalamak zorunda kalmadan önce yakalar. - Dönüşümü sınırda bir kez yapın. snake_case JSON, camelCase JavaScript ile buluştuğunda iki stilin de kod tabanına yayılmasına izin vermek yerine anahtarları tek bir serileştirme katmanında yeniden adlandırın.


