Qt Coding Style/tr

From Qt Wiki
Jump to navigation Jump to search

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

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