Standart ve kullanıcı tanımlı türler arasında sözdizimsel bir ayrım yapmanın anlamı nedir?


13

Burada özellikle C ++ ve Bjarne Stroustrup'un adlandırma kurallarına atıfta bulunsam da , prensip olarak, insanların burada ve orada diğer diller için biraz benzer kurallar kullandığını gördüm.

Dolayısıyla, temel fikir, kod okunurken standart türleri kullanıcı tanımlı tiplerden ayırt edebilmelidir . Örneğin, Bjarne Stroustrup,

türler için ilk büyük harf (örn. Kare ve Grafik)

ki, dikkate alarak

C ++ dili ve standart kütüphane büyük harfler kullanmaz

yukarıda belirtilen hedefe ulaşılmasını sağlar.

Ama neden böyle yapmamız gerekiyor? Standart ve kullanıcı tanımlı türleri ayırt etmenin amacı ne olabilir?

Bu konuda herhangi bir Bjarne Stroustrup'un muhakemesini bulamadım ve ayrıca kendim taban tabana zıt bir şekilde düşünüyorum. : Biliyorum, biliyorum, "Stroustrup'a kim itiraz edeceğim?" Ancak, dinleme, aşırı yüklenme gibi bir grup C ++ dil özelliği, kullanıcı tanımlı türlere standart türlerle benzer düzeyde sözdizimsel destek sağlama amacına hizmet eder. Ve sonra tüm bunlar farklı bir adlandırma disiplini ile şaşkına dönüyor ...

Not: Bir kelimenin bir sınıfı adlandırmak için yeterli olmadığını ve büyük harfle başlayan alt çizgi ile ayrılmış bir kelimenin çok yabancı göründüğünden bahsetmiyorum bile.


6
Sonunda, genellikle kaşlarını çatmış olan Macarca Gösterimi de (örneğin, bir isim / kullanım hakkında bilgi gömme) diyebilirsiniz. Dolayısıyla: güzel soru.
stijn

2
@stijn: Evet, ama neden kaşlarını çattığını biliyor musun ? Gün içinde, herkes programlarını yazmak için bir metin düzenleyicisi kullandığında, tanımlayıcıya bakarak türü bilmek yararlı oldu. Ancak bugün, herhangi bir modern IDE'deki tanımlayıcının üzerine gelebilirsiniz ve size türü söyleyecektir.
Robert Harvey

4
@RobertHarvey Macar gösteriminin güçlü IDE'leri olmayan topluluklarda da kaçınılması ya da çoğunlukla düz metin editörleri kullanılması dışında.

1
@RobertHarvey Hayır, ikisinin de farkındayım ("Macarca uygulamalar" ve "Macarca sistemler") ve tecrübelerime göre, örneğin Python ve Rust'da da yaygın değildir.

3
@RobertHarvey Macarca gösterimin sadece C, C ++ ve VB'de olduğunu mu söylüyorsunuz? Ne olursa olsun, bunun neden kaşlarını çatmak için verdiğiniz nedeni sorgulamaktı (sadece türü söyleyen IDE'lere sahip olduğumuz için gereksizdir), çünkü bu sebep bu gibi kimlikleri olmayan diller için geçerli değildir ve, gerekçenizle, Macarca'dan faydalanmalısınız. Python'un dinamik olarak yazılması fark etmez, aslında mantığı geliştirmelidir çünkü tipik olarak programcı kodu yazarken türleri bilir, ancak otomatik olarak çıkartılamaz.

Yanıtlar:


5

Böyle bir amaç kesinlikle yoktur. C ++ 'ın hedeflerinden biri UDT'leri ve ilkelleri birbirinin yerine kullanmaktı ve tamamen başarılı olmadılarsa, bu da ayırt etmek zorunda olmadığınız bir alan.

İsimlendirme söz konusu olduğunda, Stroustrup fındıktır ve bu bilimsel olarak kanıtlanmış bir gerçektir.


2
RAII'nizi göreceğim ve size bir SFINAE yapacağım.
Robert Harvey

5
Standart tipleri UDT'lerden ayırmanın ne kadar yararlı olabileceğini görebiliyordum. Gerçekten iyi bir nedeniniz olmadığı sürece standart bir kitaplıktaki kodu değiştirmemelisiniz , bu nedenle küçük harfin görülmesi koda bakmanız gerekmediğini gösterir, çünkü standart kitaplıktadır.
Robert Harvey

4
@delnan: Evet. Bu, "Birçok insan" adına otoriteye yapılan bir çağrıdan başka bir şey değildir. "Birçok insan" buraya gelip mantıklarını tartışmak isterse, bunu yapmakta özgürdürler ve o zamana kadar ekleyecekleri bir şeyleri yoktur. FTR, UDT'ler için de büyük harf kullanıyorum ... ama aynı zamanda onları takma adıma gerek duyduğumda ilkeller için de.
DeadMG

2
@RobertHarvey: Görünürde Standart türleri tanıyamayacağınızı varsayar. Ya da çevrenizde fareyle üzerine gelip "std ::" yi görerek. Veya Tanıma Git'i veya başka bir yöntemi kullanarak. Temel olarak, geçerli değil.
DeadMG

1
Her zaman amacın isim alanlarının ortaya çıkmasından önce standart tiplerden ayırt etmek olduğunu düşündüm. Günümüzde, bu sadece eski düşünmenin bir kalıntısı (bir süre önce en iyi olmayı bırakan "en iyi uygulama"). FWIW, kişisel projelerimde, snake_casesınıflarım ve ad alanlarım için küçük harfler kullanıyorum ve bunun neden olduğu herhangi bir sorun veya karışıklık olmadı.
utnapistim

3

Adlandırma kuralları, kodun insanı (programcı ve sürdürücü) anlamasını desteklemekle ilgilidir.

UDT'ler, değişkenler, başlatma, ifadeler ve ifadelerin bildirimi üzerinde standart türlerde olduğundan farklı çalışacak şekilde belirtilebilir. Sorun bulmak için, bakıcının kodun bazı bölümlerinin korkak şeyler yapabileceğine dair bir ipucu alması yararlıdır (örneğin, bazı işlevlerde kullanılan kullanıcı tanımlı bir integral türünün uygulanması, ekleme işleminin nasıl yapılacağı konusunda bir kusura sahip olabilir).

Bu tür ipuçları sağlamanın birçok yolu vardır (yorumlar, tasarım özellikleri, vb.). Adlandırma kurallarının avantajı, kodda mevcut olmalarıdır, oysa yorumlar atlanabilir, güncelliğini yitirebilir vb.


2

Türler için büyük harfli kelimeler kullanmamın bir nedeni de değişkenleri türlerden ayırmaktır. Bu, büyük / küçük harflerin yanı sıra aynı adla bir değişkenin bildirilmesine izin verir:

Foo foo;
Graph graph;

Bu, her bağlamda yalnızca bir örneğinin kullanıldığı sınıflar, örneğin yapılandırma ayarları için yararlı olabilir.


IMHO bu başlıktaki soruya cevap vermiyor. Belki de "bu bakımdan standart tiplerin küçük harflerle adlandırılması sadece cstdlib ile geriye dönük uyumluluk içindi" diye ekliyor.
Vorac
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.