Qtコーディングスタイル

QtによるQtコーディングスタイル

こんにちはharazhiteli!



Qtで長年の経験を持つ専門家は、次のように考えました。 Habr-急に物事に!」 しかし、長年の経験を持つ専門家でさえ、簡単なことに関するそのような記事を読む必要があることがあります。これは重要だからです。 コードは、プログラミングの最も重要なコンポーネントの1つです。 そして、私たちの仕事はそれをきれいに保つことです。 この記事は、理想を目指して努力するすべてのQtプログラマーを対象としています。



もちろん、Qt Project- Qt Coding Styleに関する記事もあります。 ここにしか価値のない資料があります...





仮定番号1。 アライメント



Qtでは、4つのスペースのインデントを使用するのが一般的です。 しかし、正確には4、正確にはギャップです。 スペースに\ tまたは別のスペースを使用することはひどく悪い考えられ、厳しく罰せられます。



仮定番号2。 変数宣言



コードの読みやすさと一般的なスタイルを決定する最も重要な仮定の1つ。 変数を宣言するための規則は、次のリストにまとめられています。





//  int a, b; char *c, *d; //  int height; int width; char *nameOfThis; char *nameOfThat;
      
      





 //  short Cntr; char ITEM_DELIM = '\t'; //  short counter; char itemDelimiter = '\t';
      
      







仮定番号3。 スペース



スペースは、ソースコードをフォーマットする上で非常に重要な要素です。 コードの可読性において非常に大きな役割を果たします。





 //  if (foo){ } //  if (foo) { }
      
      





 char *x; const QString &myString; const char * const y = "hello"; MyClass *obj = new MyClass(this); bool ok; obj.report(1, &ok);
      
      





 //  char* blockOfMemory = (char* ) malloc(data.size()); QTextStrem newOne(..); newOne<<"Hello"<<","<<" "<<"world"; //  char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size())); QTextStrem newOne(..); newOne<< "Hello" << "," << " " << "world";
      
      







仮定番号4。 ブラケット



括弧はまったく別の問題です。 彼らは、スペースのように、コードの外観と可読性において最大の役割を果たします





 static void foo(int g) { qDebug("foo: %i", g); } class Moo { public: Moo(); Moo(int a, int b); public slots: int getResult(); protected slots: void processNumbers(); private: int mineA; int mineB; int mineResult; };
      
      





 //  if (address.isEmpty()) { return false; } for (int i = 0; i < 10; ++i) { qDebug("%i", i); } //  if (address.isEmpty()) return false; for (int i = 0; i < 10; ++i) qDebug("%i", i);
      
      





 //  while (a); if (expression) else // do something //  while (a) {} if (expression) { } else { // do something }
      
      







 //  if (codec) { // do something } //  if (codec) { // do something }
      
      





 //  if (address.isEmpty()) return false; else { qDebug("%s", qPrintable(address)); ++it; } //  if (address.isEmpty()) { return false; } else { qDebug("%s", qPrintable(address)); ++it; } //  if (a) if (b) ... else ... //  if (a) { if (b) ... else ... }
      
      





 //  if (address.isEmpty() || !isValid() || !codec) return false; //  if (address.isEmpty() || !isValid() || !codec) { return false; }
      
      







仮定番号5。 かっこ



括弧を使用して式をグループ化します。

 //  if (a && b || c) if (a + b & c) //  if ((a && b) || c) if ((a + b) & c)
      
      







仮定番号6。 複数選択条件スイッチ



もちろん、これらの条件は、コーディングガイドラインの開発者と作成者が多くの議論を行う理由です。さまざまなオプションがあります。 ただし、Qtは次のオプションのみを提供します。







 switch (myEnum) { case Value1: doSomething(); break; case Value2: case Value3: doSomethingElse(); // fall through default: defaultHandling(); break; }
      
      







仮定番号7。 改行



多くの場合、次のことが起こります。大きなモニターを持つ開発者Vasyaがいます。 彼は冷静にコードを書いています。 次に、開発者のPetyaがこのコードをラップトップで開き、はっきりと確認します。コード全体を読むには、多くのスクロールが必要です。 これは読みやすさの欠陥の1つです。 Qtは救いのために何を提供していますか?





 //  if (longExpression + otherLongExpression + otherOtherLongExpression) { } QMessageBox::information(d->someObjectWithLongName, tr("A long title for mesage"), tr("A very very very very very very long body", QMessageBox::Ok, QMessageBox::Cancel); //  if (longExpression + otherLongExpression + otherOtherLongExpression) { } QMessageBox::information(d->someObjectWithLongName, tr("A long title for mesage"), tr("A very very very very very very long body", QMessageBox::Ok, QMessageBox::Cancel);
      
      





UPD:コードの最後のセクションが誤って表示されます-すべての行が同じレベルにある必要があります



仮定番号8。 継承と「仮想」キーワード



この仮定では、すべてが非常に単純です。主なことは、.hファイル内の再定義されたメソッドの名前の前に「仮想」を記述しないことです。

 //  class MyWidget : public QWidget { ... protected: virtual void keyPressEvent(QKeyEvent *); //  class MyWidget : public QWidget { ... protected: void keyPressEvent(QKeyEvent *);
      
      







仮定番号9。 一般的な例外



この仮定は、規則を破ることに何の問題もありませんが、それはあなたのコードをくする場合のみです。 これは、すべてのルールに例外があり、ルールがそれらに違反するように設計されているという事実の良い例です。



残念ながら、Qt Coding Guidelinesがコードをくする例を見つけることができませんでした。



完了



Qtでコードを記述するスタイルについての私の記事の終わりではないかと思います。 Qtに貢献するためだけに引用されていることを思い出してください。プロジェクトの開発に貢献する場合、これらの仮定を何らかの方法で使用する必要がありますが、忘れないでください-ルールを破ることができます:)。



私にとって、Qt Coding Styleはコードを書くのに最適なスタイルです。 清潔で、快適で、快適だと思います。 その使用中ずっと、コードの可読性に問題はありませんでした。 お勧めしますか? もちろんです! さらに、Qtプラットフォームのすべての新規参入者に昇進すべきなのはまさに彼だと思います。



ご清聴ありがとうございました。



All Articles