2016-05-09 8 views
0

Eine Sache, die oft in Code-Reviews auftaucht, an denen ich teilnehme, ist, dass "magische Zahlen" inline Code als schlecht bezeichnen.Vermeidung nicht symbolischer Konstanten in Qt

Die Präferenz ist, dass ein Symbol irgendwo zugewiesen wird.

Jetzt, was ich im Moment arbeite, ist in der QT SDK. Der Klassenmember QButtonGroup.checkedId() gibt -1 als magische Zahl zurück, um anzuzeigen, dass in der ausgewählten Gruppe keine Optionsfelder vorhanden sind.

Und wenn ich schreibe etwas wie

if (buttongroup->checkedId() == -1) 
{ 
    //yadda yadda 
} 

es in dem Code-Review wird kommen.

Während sicherlich kann ich ein const static int Symbol definieren, mir zu geben, dass -1 hatte ich viel lieber etwas in dem Qt Namespace verwenden, wenn es eine entsprechende Konstante definiert hat.

Gibt es ein solches Symbol bereits definiert ??

+1

Ich weiß nicht, ob es hilft, aber normalerweise verwende ich "<0" statt "== -1". AFAIK, im Vergleich zu 0 ist schneller. – Apin

+1

Imo, 'enum {INVALID_ID = -1}' ist besser als 'const static int' Lösung. Hat aber denselben Nachteil: Sie müssen die Datei mit der Definition versehen, wo immer Sie sie verwenden. Vergleichen mit Null ist auch eine gute Option. –

+1

Welche Richtlinie hat Ihr Unternehmen/Ihre Organisation für den Umgang mit magischen Zahlen, die von externen Bibliotheken stammen? Beachten Sie, dass viele Klassen in Qt -1 verwenden, um "undefined", "error" usw. zu bezeichnen, also ist QButtonGroup nicht die einzige. – JKSH

Antwort

0

Kein solches Symbol ist vordefiniert; Sie müssten es selbst definieren.

5

Bei Code-Reviews handelt es sich um Ihren Code, nicht um den Code von Drittanbieter-Bibliotheken. Sie können und sollten daher nicht damit umgehen. Qt hat keine benannte Entität, mit der verglichen werden kann, daher müssen Sie den resultierenden Code mit -1 vergleichen. Es gibt jedoch eine helle Seite: -1 ist eine weithin verstandene magische Zahl, daher sollte es kein Missverständnis geben - es wird in vielen verschiedenen Sprachen und Bibliotheken verwendet. Wie schlimm es auch ist, hier ist es und wir müssen damit leben.

+0

Während diese Antwort mehr Details hat, war @JonHarper zuerst, also gebe ich das eine Aufzählung, aber markiert seine Antwort richtig weil er zuerst richtig geantwortet hat. – infixed

+0

@fixed: Du wirst meine Gefühle nicht verletzen und die bessere Antwort akzeptieren. Er gab eine viel bessere Antwort. Ich habe auch abgestimmt. ;-) –

+0

Geschwindigkeit zählt auch :) Ich meine, das hielt mich nicht auf, aber hypothetisch kann Geschwindigkeit auch wertvoll sein – infixed