Qt Coding Style/tr
Jump to navigation
Jump to search
Bu doküman, Qt geliştirirken kullandığımız alt-seviye kodlama konvensiyonlarına genel bir bakıştır. Daha üst-seviye konvensiyonlar için Kodlama Konvensiyonları sayfasına bakabilirsiniz.
Bu sayfadaki bilgiler, Qt kaynak kodları, tartışma forumları, e-posta grupları ve geliştiricilerin desteği ile oluşturulmuştur.
Girinti
- Girinti için tab değil 4 adet boşluk karakteri kullanın
Değişken tanımlama
- Her değişkeni ayrı birer satırda tanımlayın
- Kısa veya anlamsız kısaltmalardan kaçının (örn; "a", "rbarr", "nughdeget")
- Tek karakterli değişken isimleri sadece, değişkenin kullanım amacının belirli olduğu, sayaçlar ve geçici değişkenler için uygundur
- Bir değişkene ihtiyaç duymadığınız sürece onu tanımlamayın
// Hatalı
int a, b;
char *c, *d;
// Doğru
int height;
int width;
char *nameOfThis;
char *nameOfThat;
- Değişkenler ve fonksiyonlar küçük harf ile başlar. Değişkenin adındaki her bir ardışık kelime büyük harf ile başlar
- Kısaltmalardan kaçının
// Hatalı
short Cntr;
char ITEM_DELIM = ' ';
// Doğru
short counter;
char itemDelimiter = ' ';
- Sınıf isimleri daima büyük harf ile başlar. Public sınıflar ´Q´ ile başlayıp büyük harf ile devam eder (örn; QRgb). Public fonksiyonlar çoğunlukla 'q' ile başlar (örn; qRgb).
- Akronimler camel-case olarak kullanılır (örn; Doğru kullanım: QXmlStreamReader. Hatalı kullanım: QXMLStreamReader).
Boşluk
- Uygun olduğu takdirde boş satırları deyimleri gruplamak için kullanın
- Her zaman sadece bir boş satır kullanın
- Süslü parantezden önce ve anahtar kelimeden sonra her zaman tek boşluk karakteri kullanın:
// Hatalı
if(foo){
}
// Doğru
if (foo) {
}
- Göstericiler ve referanslar için, tür adı ve '*' veya '&' karakterleri arasında tek boşluk karakteri kullanın
- Değişken adı ve '*' veya '&' karakterleri arasında boşluk bırakmayın:
char *x;
const QString &myString;
const char * const y = "hello";
- İkili işleçlerin her iki tarafında da boşluk karakteri kullanın
- cast işlecinden sonra boşluk bırakmayın
- C-tipi cast işleçlerinden mümkün olduğunca kaçının
// Hatalı
char* blockOfMemory = (char* ) malloc(data.size());
// Doğru
char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size()));
- Birden çok deyimi tek bir satıra yazmayın
- Akış kontrol deyiminin gövdesi için yeni bir satır kullanın:
// Hatalı
if (foo) bar();
// Doğru
if (foo)
bar();
Süslü parantezler
- Parantezleri ilintilendirin: Aç-parantez deyimin başlangıcı ile aynı satırda bulunur. Eğer kapa-parantezi başka bir anahtar kelime takip ediyorsa, o da aynı satırda bulunur:
// Hatalı
if (codec)
{
}
else
{
}
// Doğru
if (codec) {
} else {
}
- İstisna: Fonksiyon gerçeklemeleri ve sınıf tanımlamaları için aç-parantez yeni bir satırda kullanılır:
static void foo(int g)
{
qDebug("foo: %i", g);
}
class Moo
{
};
- Şartlı deyimin gövdesi birden fazla satırdan oluştuğu takdirde süslü parantez kullanın:
// Hatalı
if (address.isEmpty()) {
return false;
}
for (int i = 0; i < 10; +''i) {
qDebug("%i", i);
}
// Doğru
if (address.isEmpty())
return false;
for (int i = 0; i < 10;i)
qDebug("%i", i);
- İstisna 1: Koşullu deyim birden çok satırdan oluşuyor ise süslü parantez kullanın:
// Doğru
if (address.isEmpty() || !isValid()
|| !codec) {
return false;
}
- İstisna 2: Parantez simetrisi: Eğer if-then-else bloklarından herhangi biri birden çok satırdan oluşuyor ise her ikisinde de süslü parantez kullanın:
// Hatalı
if (address.isEmpty())
qDebug("empty!");
else {
qDebug("%s", qPrintable(address));
it;
}
// Doğru
if (address.isEmpty()) {
qDebug("empty!");
} else {
qDebug("%s", qPrintable(address));
it;
}
// Hatalı
if (a)
…
else
if (b)
…
// Doğru
if (a) {
…
} else {
if (b)
…
}
- Şartlı koşulun gövdesi boş ise süslü parantez kullanın
// Hatalı
while (a);
// Doğru
while (a) {}
Parantezler
- İfadeleri gruplandırmak için parantez kullanın:
// Hatalı
if (a && b || c)
// Doğru
if ((a && b) || c)
// Hatalı
a + b & c
// Doğru
(a + b) & c
Switch deyimi
- case etiketleri switch ile aynı sutünda bulunur
- Her case etiketi break veya return deyimi ile sonlandırılmalıdır. Eğer sonlandırılmıyorsa da, hemen ardından farklı bir case etiketi gelmediği müddetçe, bir yorum satırı kullanılarak bunun kasıtlı olarak sonlandırılmadığı belirtilmelidir.
switch (myEnum) {
case Value1:
doSomething();
break;
case Value2:
case Value3:
doSomethingElse();
// fall through
default:
defaultHandling();
break;
}
Atlama deyimleri (break, continue, return ve goto)
- Atlama deyimlerinin ardından 'else' kullanmayın:
// Hatalı
if (thisOrThat)
return;
else
somethingElse();
// Doğru
if (thisOrThat)
return;
somethingElse();
- İstisna: Eğer kod doğası gereği simetrik ise, 'else' kullanımı simetriyi sağlamak için kullanılabilir
Satır sonları
- Satırları 100 karakterden kısa tutunuz; mümkünse metni diğer satırlara sığdırınız
- Yorum/apidoc satırları 80 sütundan daha az olmalıdır
- Virgül karakteri sığdırılan satırın sonuna koyulurken işleçler ise yeni satırların başına koyulur. Bu kuralın sebebi; kod yazdığınız editörün çok dar olması halinde satır sonundaki işlecin gözden kaçma olasılığıdır.
// Hatalı
if (longExpression +
otherLongExpression +
otherOtherLongExpression) {
}
// Doğru
if (longExpression
+ otherLongExpression
+ otherOtherLongExpression) {
}
Genel istisna
- Eğer bir kuralı harfiyen uygulamak kodunuzu çirkinleştiriyor ise o kuralı delmekte serbestsiniz