state.h

Proggen.org - Lernprojekt: Duplikatefinder
Antworten
Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

state.h

Beitrag von Bebu » Mi Aug 11, 2010 8:17 pm

Wer sich das Filesearch-Modul schon ein bisschen genauer angesehen hat, ist dort auf einen Header namens state.h gestoßen. Er steht absichtlich nur in Namespace Dedupe und war dafür gedacht, alle Rückgabekonstanten für Funktionen usw. zentral zu sammeln und zu dokumentieren. Spricht aus euerer Sicht etwas dagegen? Wenn nicht, sollten wir diesen Header aus dem Filesearch Modul herauslösen und z. B. einen weiteren Ordner für Dateien erstellen, der von allen Modulen benutzt werden kann und auch soll. Mir fällt nur kein passender Name dafür ein. Was haltet ihr davon?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: state.h

Beitrag von Xin » So Aug 15, 2010 10:16 am

Hi, den Thread habe ich gerade erst gesehen.
Bebu hat geschrieben:Wer sich das Filesearch-Modul schon ein bisschen genauer angesehen hat, ist dort auf einen Header namens state.h gestoßen. Er steht absichtlich nur in Namespace Dedupe und war dafür gedacht, alle Rückgabekonstanten für Funktionen usw. zentral zu sammeln und zu dokumentieren. Spricht aus euerer Sicht etwas dagegen? Wenn nicht, sollten wir diesen Header aus dem Filesearch Modul herauslösen und z. B. einen weiteren Ordner für Dateien erstellen, der von allen Modulen benutzt werden kann und auch soll. Mir fällt nur kein passender Name dafür ein. Was haltet ihr davon?
Grundsätzlich ist die Idee in Ordnung, dennoch tendiere ich eher dazu, einer solchen enum einen eigenen Header zu geben.
Der Nachteil ist, dass man mehr Dateien offen halten muss, der Vorteil, dass man sich sicher sein kann, dass es definitiv eine Datei gibt und man seine Datenstruktur nicht in einer Auswahl von Dateien suchen muss.

Was mir mehr zu denken gibt, ist dass State eine ganze Reihe von unterschiedlichen Typen in einem enum zu versammeln scheint. Was machst Du, wenn Dein interner Statuscode für den Thread statt 'is_running' mal 'file_ok' meldet? Eine Enum, die nur IsRunning, IsSleeping und IsReseted annehmen kann, kann nur diese Werte liefern. Es macht hier also auch keinen Sinn, sich darüber Gedanken zu machen, was passiert, falls file_ok kommen könnte. File_Ok wird einfach nicht kommen. Um das sicher zu stellen, braucht man Datentypen, die das unterscheiden.
State ist aber in der aktuellen Fassung kein Datentyp, sondern eine Sammlung von Magic-Numbers.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: state.h

Beitrag von Bebu » So Aug 15, 2010 11:01 am

Xin hat geschrieben: Was mir mehr zu denken gibt, ist dass State eine ganze Reihe von unterschiedlichen Typen in einem enum zu versammeln scheint. Was machst Du, wenn Dein interner Statuscode für den Thread statt 'is_running' mal 'file_ok' meldet? Eine Enum, die nur IsRunning, IsSleeping und IsReseted annehmen kann, kann nur diese Werte liefern. Es macht hier also auch keinen Sinn, sich darüber Gedanken zu machen, was passiert, falls file_ok kommen könnte. File_Ok wird einfach nicht kommen. Um das sicher zu stellen, braucht man Datentypen, die das unterscheiden.
State ist aber in der aktuellen Fassung kein Datentyp, sondern eine Sammlung von Magic-Numbers.
Darüber habe ich mir bisher nicht so viele Gedanken gemacht. Ich würde es halt einfach als Benutzer der Klasse ziemlich lästig finden, wenn Konstanten die in einem Klasseninterface liegen, aus drei verschiedenen Namensräumen kommen.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: state.h

Beitrag von fat-lobyte » So Aug 15, 2010 11:21 am

Bebu hat geschrieben:Darüber habe ich mir bisher nicht so viele Gedanken gemacht. Ich würde es halt einfach als Benutzer der Klasse ziemlich lästig finden, wenn Konstanten die in einem Klasseninterface liegen, aus drei verschiedenen Namensräumen kommen.
Ich muss sagen, ich sehe das wie Xin. Was hat sleep mit could_not_use_file zu tun??
Vielleicht ist das auch ein bisschen einstellungssache. Siehst du das Arbeiten mit namespaces als Bürde an? Ist es dir nur lästig immer den Namespaceamen davorzuschreiben? Ich sehe das beispielsweise nicht so. Ich will wissen wo die komischen Variablen und Konstanten herkommen die ich da verwende. Wenn da nichts davorsteht hab ich keine Ahnung wo das deklariert ist und wo ich die Doku dazu suchen soll.

Eine kleinigkeit:
Die Member deines Enums sind klein geschrieben: z.B.: could_not_use_file
Eigentlich sind das stinknormale integer konstanten, ich persönlich verwende dafür Großbuchstaben, unser Codestil schreibt was anderes vor: http://www.proggen.org/doku.php?id=proj ... mbolenamen
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: state.h

Beitrag von cloidnerux » So Aug 15, 2010 12:03 pm

Wieso nicht etwas OOP und die Rückgabewerte in eine Klasse Wrappen, die dann einmal einen Text und einmal vlt nur ein Integer als Staus hat, und dann überall abgelesen wird.
Könnte man dann eine Basisklasse "Result" anlegen, die vorschreibt das es die Memeber "Message" und "Value" hat und man dann nur noch ableitet, sodass z.B innerhalb des Filesearch-Moduls ein Spezialisiertes FileSearchResult gibt, das bei Fehlern einfach als Basisklasse weitergeleitet wird?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: state.h

Beitrag von Xin » So Aug 15, 2010 12:34 pm

cloidnerux hat geschrieben:Wieso nicht etwas OOP und die Rückgabewerte in eine Klasse Wrappen, die dann einmal einen Text und einmal vlt nur ein Integer als Staus hat, und dann überall abgelesen wird.
Könnte man dann eine Basisklasse "Result" anlegen, die vorschreibt das es die Memeber "Message" und "Value" hat und man dann nur noch ableitet, sodass z.B innerhalb des Filesearch-Moduls ein Spezialisiertes FileSearchResult gibt, das bei Fehlern einfach als Basisklasse weitergeleitet wird?
Der String wird vermutlich eher selten verwendet.


Ansonsten wäre das ein Objekt... Enums mit Objekte mache ich recht häufig wie folgt:

Code: Alles auswählen

.h 

class Primitiv
{
  private:
    unsigned int Exponent;
    unsigned int Mantisse;

    Primitiv( unsigned int exponent, unsigned int mantisse ) : ... {}

  public:
    static Primitiv const Char, Short, Int, Long, Float, Double;
};

.cpp:
Primitiv const Char( 0, 8 );
Primitiv const Short( 0, 16 );
Primitiv const Int( 0, 32 );
Primitiv const Long( 0, 64 );
Primitiv const Int( 8, 23 );
Primitiv const Long( 10, 53 );
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: state.h

Beitrag von Bebu » So Aug 15, 2010 6:21 pm

So ich habe gerade eine neue Version von state.h hochgeladen. Sagt mir mal, was ihr davon haltet. Wenn es so gefällt, ändere ich es in meinen Klassen ab, damit das ganze wieder kompiliert.

PS: Offtopic--> Soll ich jetzt die Klasse File auf Filesearch umbenennen oder nicht?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: state.h

Beitrag von fat-lobyte » So Aug 15, 2010 9:02 pm

Bebu hat geschrieben:So ich habe gerade eine neue Version von state.h hochgeladen. Sagt mir mal, was ihr davon haltet. Wenn es so gefällt, ändere ich es in meinen Klassen ab, damit das ganze wieder kompiliert.
Ähm, ich glaube solche änderungen hätten dazugehört. Man hat immer die möglichkeit einen ganzen commit rückgängig zu machen wenns sein muss.
Bebu hat geschrieben:PS: Offtopic--> Soll ich jetzt die Klasse File auf Filesearch umbenennen oder nicht?
Das musst du entscheiden. Repräsentiert die Klasse "eine Datei" oder "eine Dateisuche"? Hast du die antwort auf diese Frage, hast du auch die Antwort auf deine ;-)
Haters gonna hate, potatoes gonna potate.

Antworten