Frage zum Programmierstil
-
Ich habe in letzter Zeit öfters folgendes gemacht, da man so leicht mehrere Methoden hintereinander auf ein Objekt anwenden kann ohne viel Code:
class Klasse { public: Klasse& MethodeA (int); Klasse& MethodeB (); Klasse& MethodeC (int,int); } ... Klasse& k = *new Klasse; k.MethodeA(1).MethodeB().MethodeC(2,3);Was haltet ihr davon? Habe mir das beim ostream-operator << abgeguckt.
-
find ich persönlich nich so gut!
wenn du die ganzen ergebnisse dann noch zurückzuführen weißt!sollten das allerdings funktionen ähnlich des << sein, dann ist es imo schon in ordnung!
-
Hi,
Neku schrieb:
Was haltet ihr davon? Habe mir das beim ostream-operator << abgeguckt.
nicht viel, ist mir zu unübersichtlich. Im Unterschied zum << Op hast du hier nicht so ne eindeutige optische Trennung.
MfG
GPC
-
Anders formatiert sieht das sehr gut aus:
k.MethodeA(1) .MethodeB() .MethodeC(2,3);Ich verwende diese Technik auch in meinen Programmen. Beispielsweise habe ich eine Datenbankbibliothek, wo ich die Hostvariablen genau so setzen kann:
tntdb::Statement stmt = conn.prepare( "select col1, col2" " from uhu" " where int_col = :a" " and string_col = :b" " and double_col = :c"); stmt.set("a", 5) .set("b", "irgendein Wert") .set("c", 6.7);Der Anwender hat trotzdem die Wahl, ob er das so nutzen möchte oder nicht. Alternativ kann man dann auch schreiben:
stmt.set("a", 5); stmt.set("b", "irgendein Wert"); stmt.set("c", 6.7);Da kann jeder selbst auswählen, was lesbarer ist.
Tommi
-
tntnet schrieb:
Anders formatiert sieht das sehr gut aus:
k.MethodeA(1) .MethodeB() .MethodeC(2,3);Ich verwende diese Technik auch in meinen Programmen. Beispielsweise habe ich eine Datenbankbibliothek, wo ich die Hostvariablen genau so setzen kann:
tntdb::Statement stmt = conn.prepare( "select col1, col2" " from uhu" " where int_col = :a" " and string_col = :b" " and double_col = :c"); stmt.set("a", 5) .set("b", "irgendein Wert") .set("c", 6.7);Der Anwender hat trotzdem die Wahl, ob er das so nutzen möchte oder nicht. Alternativ kann man dann auch schreiben:
stmt.set("a", 5); stmt.set("b", "irgendein Wert"); stmt.set("c", 6.7);Da kann jeder selbst auswählen, was lesbarer ist.
Tommi
Hmm sieht ganz nach SQLite 3x aus

-
tntnet schrieb:
Anders formatiert sieht das sehr gut aus:
k.MethodeA(1) .MethodeB() .MethodeC(2,3);Sehr gute Idee!
Ich muss mir auch noch überlegen ob ich das dann durchgängig für alle Funktionen mache, denn es wäre sicher chaotisch, wenn es mit manchen Methoden möglich wäre und mit anderen wieder nicht. Dann müsste ich aber auch bei Funktionen mit Rückgabewert immer einen zusätzlichen Parameter hinzufügen. Oder aber ich nenne Funktionen, die wieder das Objekt selbst zurückgeben, anders.
-
Also für Methoden, die etwas an *this verändern, kann ich mir diese Notation noch vorstellen (z.B. die Stream-Operatoren oder evil's set(..)-Beispiel). Aber im Allgemeinen dürfte das eher verwirrend als hilfreich sein.
(obwohl - gelegentlich habe ich mich schon geärgert, daß C++ kein WITH hat)
-
CStoll (off) schrieb:
(obwohl - gelegentlich habe ich mich schon geärgert, daß C++ kein WITH hat)
Nicht unbedingt zum Nachmachen empfohlen ... aber:
struct Foo { int a, b, c, d; }; int main(void) { Foo my_long_var_name; { Foo& _ = my_long_var_name; _.a = 1; _.b = 2; _.c = 3; _.d = 4; } // ... }
-
evilissimo schrieb:
...
Hmm sieht ganz nach SQLite 3x aus

Tntdb ist eine datenbankunabhängige Schnittstelle. Momentan habe ich Treiber für Postgresql, SQLite 3 und Mysql. Zu finden unter http://www.tntnet.org/tntdb.hms.
Gruß
Tommi