Biggle's Blog

Web- und Software Development

by Mario Binder

Tuple Eigenschaften lesbar gestalten?

Die Verwendung von Tuple ist eine schnelle Lösung, wenn man beispielweise mehr als ein Parameter oder Rückgabewert benötigt. Ein Anwendungsfall wäre für mich, eine (semantische) Fehlermeldung anstelle von Exceptions. Also ein boolean und ein string als Rückgabewert “Tuple<bool, string>()”. Im string steht dann halt ein Grund drin, warum das Ganze schief gelaufen ist. So weit, so gut.

Das Resultat dabei ist leider nicht lesbar, denn ich bekomme den boolean im Property Item1 und den string in Item2 geliefert.

image

Aber okay, das mag so lange gut gehen, wenn man denn so etwas wie Konventionen für dieses “Pattern”definiert. Das Problem dabei ist hier, dass man sich hier schnell in tiefe Gewässer bewegt. Denn das kann auch ausarten, wenn man denn so etwas hier versucht: “Tuple<bool, string, Exception, bool, bool, decimal>()

image

Hier verliert man ganz schnell den Überblick.

Da hilft auch keine Dokumentation.

Hier käme mir die”glorreiche” Idee, die Tuple Properties lesbarer zu gestalten. Also baue ich mir eine Klasse, die von Tuple ableitet, in etwa so:

image

Nun stehen einem auch die Eigenschaften zur Verfügung.

image

Aber warum sollte ich dann von Tuple ableiten?

Macht kein Sinn. Bringt mir keinen Mehrwert. Ich kann das Ganze auch ohne.

image

Also warum dann Tuples einsetzen?

Was sagst du dazu? Wann setzt ihr Tuples ein? Wann machen Tuples Sinn? Mir fällt einfach kein Anwendungsfall ein.

Halt, vielleicht aber doch, möglicherweise für so etwas hier?

image

Nee, oder ;)

Nichts desto trotz, wer Tuples einsetzt, hat sicher auch seine Gründe dafür. Die mich natürlich brennend interessieren! Also nicht scheuen, 3-5 Minuten Zeit in die Hand nehmen und rein damit als Kommentar.

In diesem Sinne, viel Spaß beim entwickeln : )

  • Karill Endusa

    Tuples sind nett, wenn man “zu wenig Zeit” hat, um sich eine entsprechende Klasse zu bauen. Außerdem kann man bei einem Tuple sicher schneller den Typ eines Parameters (oder doch eher einer Eigenschaft?!) ändern, als es mit einer eigenen Klasse der Fall wäre. Über Kurz oder Lang sollte man sie dann jedoch gegen eigenständige Klassen austauschen, z.B. sobald das endgültige Gerüst steht, man sich also sicher sein kann, dass die Typen der Eigenschaften “fix” sind.

    Warum, bzw. aus welcher Überlegung, Tuples entstanden sind (und dann auch noch gleich so viele verschiedene (Parameterzahl)), das mag mir mal einer erklären. Die Lesbarkeit wird dadurch nicht besser (eben durch die nicht vorhandene Namensgebung) und zur Not könnte sich doch ein Anfänger (aller wahrscheinlichkeit nach) ein nicht unähnliches Konstrukt “basteln”.

    so far

  • Max Malook

    Tuple implementiert für dich automatisch IStructuralEquatable, IStructuralComparable und IComparable. Wenn du diese Eigenschaften braucht, dann macht die Ableitung schon Sinn.

    Sonst sind Tuples für Prototypen ganz gut, aber mehr auch nicht.

  • Alex

    Alernative sind ja die dynamics über die Du glaube auch schon geschrieben hast. Da hat man zwar benannte Properties dafür aber wiederrum halt kein IntelliSense. Die eierlegende Wollmilchsau wie in F# fehlt wohl leider tatsächlich -,-