camelCase ile PascalCase arasındaki fark nedir?

camelCase ile PascalCase arasındaki tek fark ilk harftir. camelCase küçük harfle başlar ve sonraki her sözcüğün ilk harfini büyütür (userName, parseResponse). PascalCase ise ilki de dahil her sözcüğü büyük harfle başlatır (UserName, ResponseParser). Gelenek olarak PascalCase türleri (sınıflar, arayüzler, enum'lar, React bileşenleri), camelCase ise değerleri ve eylemleri (değişkenler, fonksiyonlar, metotlar, özellikler) belirtir.
Bu tek büyük harf göründüğünden fazla bilgi taşır. Aşağıda: neyin işareti olduğu, kuralın yalnızca nezaket gereği kalmayıp dayatıldığı diller ve kimsenin üzerinde anlaşamadığı kısım, yani kısaltmalar.
camelCase ile PascalCase bir bakışta
| camelCase | PascalCase | |
|---|---|---|
| İlk harf | küçük harf | büyük harf |
| Diğer adları | lowerCamelCase, mixedCase (PEP 8), camelCasing (Microsoft) | UpperCamelCase, CapWords (PEP 8), StudlyCaps (PHP'nin PSR-1'i), PascalCasing (Microsoft) |
| Genellikle adlandırdığı şeyler | değişkenler, fonksiyonlar, metotlar, özellikler, parametreler | sınıflar, arayüzler, tür takma adları, enum'lar, bileşenler |
| Örnekler | orderCount, sendInvoice() | OrderService, InvoiceStatus |
Stil kılavuzlarını okurken terimlere dikkat edin. Birçok kişi iki stil için de “camel case” der; PEP 8 ise CamelCase'i, PascalCase için kullandığı CapWords teriminin başka bir adı olarak bile listeler. Bir kılavuzun neyi kastettiği belli değilse örneklerine bakın.
İlk harf neden önemli: türler ve değerler
Bu gelenek, hiçbir şeye bakmadan kod okumanızı sağlar. const invoice = new Invoice(order) satırında Invoice'un oluşturduğunuz şey, invoice'un ise elinize geçen şey olduğunu bir bakışta anlarsınız. TypeScript imzaları da aynı şekilde çalışır: function total(order: Order): Money içinde küçük harfli ad değerdir, büyük harfle başlayan adlar türlerdir.
Ayrıca tek bir sözcüğün hem bir türü hem bir değeri çakışma olmadan adlandırmasını sağlar; bu sürekli olur: user: User, config: Config, request: Request. Büyük/küçük harfe duyarlı bir dilde bunlar farklı tanımlayıcılardır ve büyük harf, okura hangisinin hangisi olduğunu söyler.
Dilin bunu zorunlu kıldığı yerler
JavaScript, Java, C# ve Python'da sınıf adının büyük/küçük harf durumu yalnızca bir gelenektir. class invoice yazmanızı hiçbir şey engellemez. JavaScript'te bu geleneği ESLint'in new-cap kuralıyla bir denetime dönüştürebilirsiniz: kural varsayılan olarak new invoice() ifadesini işaretler; ayrıca Invoice() gibi büyük harfle başlayan bir fonksiyonu new olmadan çağırmayı da işaretler, ki bu genellikle bir hatadır. Birkaç dil ve çerçeve ise bir adım daha ileri gidip kuralı doğrudan yerleştirir.
Go: ilk harf görünürlük kuralıdır
Go'da public ya da private anahtar sözcükleri yoktur. Paket düzeyindeki bir ad, struct alanı ya da metot, ilk harfi büyükse dışa aktarılır, küçükse paketine özeldir. PascalCase ile camelCase arasındaki seçim, bunu belirlemenin yoludur.
package shapes
import "math"
// Circle is exported, so other packages can use it.
type Circle struct {
Radius float64 // exported field
label string // unexported field
}
// Area is exported.
func Area(c Circle) float64 { return math.Pi * square(c.Radius) }
// square is unexported: only code inside package shapes can call it.
func square(x float64) float64 { return x * x }c := shapes.Circle{Radius: 2}
fmt.Println(shapes.Area(c)) // fine
fmt.Println(shapes.square(2)) // compile error: square is not exportedEffective Go'nun, dışa aktarılmayan owner alanının getter'ına GetOwner değil Owner denmesi gerektiğini söylemesinin nedeni de budur. Büyük harf, bunun herkese açık giriş yolu olduğunu zaten söyler.
React: bileşenler büyük harfle başlamalıdır
React'in belgeleri bu konuda açık sözlü: bileşen adları büyük harfle başlamalıdır, yoksa çalışmaz. JSX, <section> gibi küçük harfli bir etiketi HTML öğesi, <OrderSummary /> gibi büyük harfli bir etiketi ise sizin bileşeniniz olarak ele alır.
Ruby: sınıf adları sabittir
Ruby'de büyük harfle başlayan her ad bir sabittir ve sınıf adları sabit olmak zorundadır. class Invoice çalışır; class invoice ise bir sözdizimi hatasıdır (“class/module name must be CONSTANT”).
Hangisi nerede kullanılır: dil dil
- JavaScript ve TypeScript: değişkenler, fonksiyonlar, metotlar ve özellikler için camelCase; sınıflar, arayüzler, tür takma adları, enum'lar ve bileşenler için PascalCase.
- Java ve Kotlin: aynı ayrım; ayrıca gerçek sabitler için alt çizgili büyük harfler (
MAX_RETRIES). - C#: PascalCase, diğer dillere göre çok daha yaygındır. Metotlar, özellikler, olaylar, herkese açık alanlar, ad alanları ve hatta sabitler PascalCase yazılır; camelCase parametreler ve yerel değişkenler içindir, özel alanlarda ise
_camelCasekullanılır. Tipik bir imza şöyle görünür:public decimal CalculateTotal(decimal taxRate). - Swift: türler ve protokoller için PascalCase, geri kalan her şey için camelCase.
- Go: istediğiniz görünürlüğe hangisi uyuyorsa o.
- Python: yalnızca sınıflar için PascalCase. Fonksiyonlar ve değişkenler snake_case yazılır; PEP 8, camelCase'e yalnızca eski kodda zaten yaygın olan stil olduğu yerlerde izin verir.
- PHP (PSR-1): sınıflar PascalCase, metotlar camelCase.
Sabitler, dosyalar ve geri kalanı için geliştirici büyük/küçük harf stilleri özet sayfamıza bakın.
Zor kısım: kısaltmalar ve baş harf kısaltmaları
userId mi, userID mi? HttpClient mı, HTTPClient mı? Başlıca stil kılavuzları farklı yanıtlar veriyor:
| Kılavuz | Kural | Örnekler |
|---|---|---|
| Google (JavaScript, TypeScript, Java) | Kısaltmalar sıradan sözcük gibi ele alınır | xmlHttpRequest, customerId, loadHttpUrl |
| Microsoft .NET | İki harfli kısaltmalar iki büyük harfi korur; daha uzunlarda yalnızca ilk harf büyük yazılır | IOStream, ioStream, HtmlTag |
| Go | Her kısaltma tek tip yazılır (hep büyük ya da hep küçük) | ServeHTTP, appID, xmlHTTPRequest |
| Swift | Normalde büyük harfle yazılan kısaltmalar ya tamamen büyük ya tamamen küçük yazılır | utf8Bytes, userSMTPServer |
| Rust | Kısaltmalar tek sözcük sayılır | Uuid, Stdin |
| Python (PEP 8) | CapWords içinde kısaltmanın tamamı büyük yazılır | HTTPServerError |
| Airbnb JavaScript | Ya tamamen büyük ya tamamen küçük | SMSContainer, httpRequests |
Bizim görüşümüz: dilinizin kılavuzunda bir kural varsa ona uyun, çünkü standart kütüphane ve iş arkadaşlarınız bunu bekler. Yoksa kısaltmaları sözcük gibi ele alın (HttpClient, userId). İki kısaltma yan yana geldiğinde sözcük sınırları görünür kalır (XMLHTTPRequest ile XmlHttpRequest'i karşılaştırın) ve adlar, büyük/küçük harf stilleri arasındaki otomatik dönüşümden sağ çıkar. Tarayıcının kendi XMLHttpRequest adı bile iki yaklaşımı tek bir adda karıştırıyor.
Daha fazla bilgi için Microsoft'un büyük harf kullanım kuralları, eksiksiz bir kural setinin tek sayfada yazılmasının iyi bir örneğidir.
camelCase ile PascalCase arasında dönüştürme
Basit bir ad için dönüşüm tek karakterdir: ilk harfin büyük/küçüklüğünü değiştirin.
const toPascal = (s) => s.charAt(0).toUpperCase() + s.slice(1);
const toCamel = (s) => s.charAt(0).toLowerCase() + s.slice(1);
toPascal("orderTotal"); // "OrderTotal"
toCamel("OrderTotal"); // "orderTotal"
toCamel("HTMLParser"); // "hTMLParser" (acronyms need a smarter split)Araçların adları önce sözcüklere bölmesinin nedeni son satırdır. ConvertCaseHQ'nun büyük/küçük harf dönüştürücüsünün bazı zorlu girdilerde ürettiği sonuçlar şöyle:
| Girdi | camelCase | PascalCase |
|---|---|---|
user id | userId | UserId |
XMLHttpRequest | xmlHttpRequest | XmlHttpRequest |
getUserID | getUserId | GetUserId |
IOError | ioError | IoError |
iPhone | iPhone | IPhone |
Dönüştürücü adları mevcut büyük harflerden bölüyor ve kısaltmaları sözcük gibi yazıyor; bu da Google'ın kuralıyla örtüşüyor. Projeniz Go'nun, .NET'in ya da PEP 8'in kısaltma kurallarını izliyorsa bu adları sonradan elle düzeltin (Go'da getUserId, getUserID olur). Marka adları öbür tuzak: hiçbir algoritma IPhone'un yanlış göründüğünü bilemez.
Kolayca düşülen iki hata
Birincisi, bir örneği büyük harfle yazmaktır: const Cart = new ShoppingCart(), Cart'ı ikinci bir sınıf gibi gösterir ve sonraki okur tanımını aramaya koyulur. İkincisi, JavaScript'te PascalCase bir yardımcı fonksiyondur, örneğin function FormatPrice(). Bir yapıcı ya da React bileşeni değilse okurlar bunun new ya da JSX gerektirdiğini varsayar ve bunu ikisi olmadan çağırdığınızda new-cap uyarı verir.
Pratik bir kural
Bir türse ya da new ile oluşturduğunuz bir şeyse PascalCase kullanın. Bir değer ya da eylemse camelCase kullanın. Kısaltmalara dilinizin kılavuzu karar versin, geri kalanını bir linter hatırlasın. Sabitler ve özel alanlar dahil JavaScript'e özgü ayrıntılar için JavaScript adlandırma rehberimize bakın.


