Fluent Interfaces - Punkte am Anfang oder Ende der Zeile?

Wenn man mehrzeilige Fluent Interfaces, Trainwrecks o.ä. schreibt, stellt sich mir immer die Frage, ob die Punkte an das Ende oder den Anfang der Zeile gehören, also…

String s = new StringBuilder().
   append("foo: ").
   append(foo).
   append(", bar: ").
   append(bar).
   toString();

… oder …

String s = new StringBuilder()
   .append("foo: ")
   .append(foo)
   .append(", bar: ")
   .append(bar)
   .toString();

Da ich Argumente für und gegen beide Schreibweisen gefunden habe, und außerdem wieder mal Lust auf einen Flamewar habe, bitte ich um ein qualifiziertes Meinungsbild :stuck_out_tongue:

Wenn ich das dort so sehe würde ich mir für “Punkte am anfang” entscheiden.

Meiner Meinung nach sieht man so schneller/besser, dass es Methodenaufrufe auf einem Objekt sind (das dann vorher irgendwo steht).

Bei der anderen Variante denke ich könnte es schneller passieren, dass man nicht auf die Punkte direkt achtet (man liest ja auch von links nach rechts bei uns) und sieht “ah append() könnte ne Methode irgendwo in der Klasse sein, da ja nichts davor ist”

Ich hoffe es ist klar geworden was ich meine^^

MfG
Clayn

  1. moeglichkeit. punkte am anfang der neuen Zeile.

ich finds schoener zu lesen.

(sorry kein guter flamer)

wo gibt es denn Variante 1 und welche Argumente dafür?
Variante 2 scheint doch so uneinholbar verbreitet, dass wenn überhaupt beide auf dem Tisch, dann doch die kleine Variante gleich pushen :wink:

ähnliche ‚chainings‘ übrigens, mit wechselhaften Stand:

String chaining

        + "       a.contest_title, "
        + "  from contest a "
        + "  where a.language_code = b.language_code "
        + "    and b.bob = c.bob "
        + "    and a.x = ? "
        + "  order by a.bob, "
        + "           c.language";

gleiche Lage?


condition chaining

    || (condition3 && condition4)
    || !(condition5 && condition6)) {
    doSomethingAboutIt();
}

Alternative scheint denkbar, jedenfalls im Link


sowie

call chaining

obj.method1( test,
             test2,
             test3 );

array chaining

String[] bar = new String[]
    {
        "bar",
        "car",
    };

hier Komma hinten üblich, aber nicht so kritisch, wobei es auch Methodenaufrufe sein können…
ein Komma ist auch ein wenig anderes als Verbindung durch Punkt, Plus oder Oder

frech geklaut aus
2.8.7.*Line Wrapping

edit:
Ineinanderschachtelung

    {
        return doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(doSomethingAboutIt(""))))))))))))))));
    }
``` gäbe es auch noch, im Link nur wenig Thema, 
mein Eclipse interessiert sich dazu nicht zum Zeilenumbruch..
wenn dann sicher auch ohne Vorzeichen in der nächsten Zeile

Natürlich den Punkt davor. Anders könnte es eine Methode von der Klasse oder auch ein statischer import sein. Macht es nur unleserlicher.


Und um dem gewünschten Flamewar zu unterstützen: alle die den Punkt dahinter machen sind kommunistische gottlose Heiden!

(Da aber wohl viel mehr den Punkt davor setzen, hat es mehr Wirkung wenn ich diese Gruppe verbal angreife)

alle die den Punkt davor setzen sind noch viel größere kommunistische gottlose Heiden!

um mich nicht selber zu beleidigen, setze ich in Zukunft meine Punkte alternierend…

Wobei auch das in anderen Sprachen üblich ist, z.B. Haskell:


module Shapes   
( Point(..)  
, Shape(..)  
, surface  
, nudge  
, baseCircle  
, baseRect  
) where  

oder


data Person = Person { firstName :: String  
                     , lastName :: String  
                     , age :: Int  
                     , height :: Float  
                     , phoneNumber :: String  
                     , flavor :: String  
                     } deriving (Show)   

(aus Making Our Own Types and Typeclasses - Learn You a Haskell for Great Good! )

Ich denke, das wird gemacht, um die einzelnen Zeilen leichter umordnen zu können. Wobei das in Java ziemlich ungewöhnlich wäre, und das die IDEs bestimmt nicht besonders mögen…

Wie jeder vernünftige Mensch schreibe ich die Punkte ans ENDE
. Das sollte eigentlich klar sein
. Warum sollte man das anders machen
? Das ergibt doch gar keinen Sinn
! Warum auch immer ich bisher der einzige bin, der das richtige gewählt hat
… Die “Argumente” würden ich aber auch mal interessieren

(Mal im Ernst, ich schreib’ die wirklich ans Ende…!?)

Die müssen (starkes Wort) an den Anfang, dadurch wird eine logische Einheit gebildet. Es ist auch nicht im Sinne von Fluent, überhaupt Zeilenumbrüche einzufügen. Man muss sehen (schon wieder), es ist eine Methode, keine Variable oder ähnliches.

[quote=Marco13]Wie jeder vernünftige Mensch schreibe ich die Punkte ans ENDE[/quote][quote=Marco13;123916]Die “Argumente” würden ich aber auch mal interessieren[/quote]in kurz?
Satzzeichen gehören immer ans Ende (und zwar ohne Leerzeichen davor).

Wir reden hier aber nicht von Satzzeichen.

bye
TT

Echte Argumente gibt es wahrscheinlich weniger, folgende 2 Erklärungsversuche fallen mir ein:

  1. Ein Beispiel ohne Chaining:
StringBuilder sb = new StringBuilder();

sb.append("Hallo");
sb.append("Welt");

Mit dem Punkt am Anfang, finde ich sieht es dem ohne Chaining ähnlicher.

StringBuilder sb = new StringBuilder();

sb.append("Hallo")
  .append("Welt");
  1. Komplexe SQL-Queries schreibe ich gerne so:

[SQL]
SELECT
*
FROM foo
WHERE 1=1
AND id>100
AND bar LIKE ‘%hallo%’
OR value BETWEEN 2 AND 10000
[/SQL]

Dadurch kann man jede Zeile in der WHERE-Bedingung auskommentieren ohne das Query syntaktisch kaputt zu machen. Wäre das AND am Ende der Zeile kann man die letzte Zeile nicht auskommentieren.

Das AND entspricht bei mir dem Punkt in Java. Auch wenn man die Begründung nicht auf Java portieren kann, da Java am Ende immer einen Semikolon erwartet, mache ich es in Java auch so.

Solange hier kein Killerargument für Punkt am Ende kommt, bleibe ich auch dabei.

@Marco13 Ich glaube, der Punkt entspricht in dem Fall nicht dem grammatikalischen Punkt, sondern eher dem Ergänzungsstrich wie in “Verkehrslenkung und -überwachung”.

Ich mach das, was rauskommt, wenn ich in Eclipse Strg-Shift F drücke. Mal kurz schauen … an den Anfang!

Und bevor jetzt ein unterforderter Forumnutzer anfängt, mir den Formatter von Eclipse erklären zu wollen: Weiß ich alles. Mir ist das mit den Punkten schlicht schnurz egal und dabei bleibe ich!
Jeder, der mich mit Argumenten unterdrückt, ist ein Faschist.
:crowd:

Ein Punkt gibt die Abhängigkeit zu einem anderen Objekt an, entsprechend ist es wichtig ihn auch dorthin zu schreiben wo er hin gehört und zwar an die Methode oder das Attribut das von etwas abhängig ist. Dass das Objekt Methoden oder Attribute besitzt sollte jedem klar sein, entsprechend macht es keinen Sinn den Punkt an das Objekt selber zu schreiben, er ist nunmal zu einer Methode oder einem Attribut zugehörig.

Kommas sind eine andere Sache, sie beziehen sich nicht auf die Methoden, Variablen oder Objekte, sondern trennen den Code in einzelne Parameter auf.
Hier ist es egal ob sie hinten oder vorne in der nächsten Zeile stehen, da es sich aber um eine Art Satzzeichen handelt dass man eher am Ende eines Satzes erwartet (genauso wie man das beim Punktkomma ‘;’ auch schon übernommen hat) liegt hier die Antwort wohl eher an dem was die meisten gewöhnt sind und erwarten.
genauso wie wen man bei alen wörtern die dopelbuchstaben wegläst oder ales klein schreibt - verstehen tuts jeder, aber es ist ungewohnt und schmerzt zu lesen.

Ich bin ein Objekt, ich brauche nix weiter. Ich bin ein Methodenaufruf, ich sollte nicht alleine dastehen. Ist doch ganz einfach.

Gewählt hab ich demnach: Natürlich an den Anfang! Hat leider Nullkommanix gebracht.