Seite 1 von 1

Unterschiede der API von set() und list(), warum?

Verfasst: Donnerstag 15. Mai 2008, 09:31
von jens
Ich experimentiere gerade ein wenig mit set() rum... Dabei Frage ich mich gerade, warum die API anders ist als die von list() ?

z.B. ein neues Objekt anhängen, geht bei einer liste mit .append() bei einem set aber mit .add(), warum?

Verfasst: Donnerstag 15. Mai 2008, 09:37
von CM
Vielleicht weil etwas an eine geordnete Struktur anhängen etwas Anderes ist als etwas zu einer ungeordneten Struktur hinzufügen? Ich fände die Erklärung jedenfalls plausibel.

Gruß,
Christian

Re: Unterschiede der API von set() und list(), warum?

Verfasst: Donnerstag 15. Mai 2008, 09:52
von Leonidas
jens hat geschrieben:Dabei Frage ich mich gerade, warum die API anders ist als die von list() ?
Weil Mengen und Listen nicht das gleiche sind. Ein Append besagt, dass etwas am Ende angehängt wird. Dies wäre bei einem Set eine falsche Sicherheit, denn wenn man etwas isn Set hinzufügt kann es sein, dass bei ``list(dein_set)`` es am Ende angezeigt wird. Kann aber auch nicht, da werden keine Sicherheiten gegeben. ``insert`` passt ebenso nicht, da man bei Sets nicht definieren kann, wo etwas eingefügt wird.

Verfasst: Donnerstag 15. Mai 2008, 09:56
von jens
Hm. Ja ok, das leuchtet mir ein ;)

Verfasst: Donnerstag 15. Mai 2008, 19:16
von sma
Ich würde sagen, dass ist historisch gewachsen.

Ich fände add() für eine Liste ebenfalls angemessen. Die erste Collection-Bibliothek war meines Wissens die von Smalltalk (um 1980 herum) und dort hatte man sich bemüht, so viel Polymorphismus wie möglich zu benutzen, um die Anzahl der Methodennamen, die man sich merken muss, so klein wie möglich zu halten. Wer ein späteres Beispiel möchte, schaue sich die Collection-Klassen von Java an, da heißt es auch add() für List und Set.

Stefan

Verfasst: Donnerstag 15. Mai 2008, 20:25
von mitsuhiko
sma hat geschrieben:Wer ein späteres Beispiel möchte, schaue sich die Collection-Klassen von Java an, da heißt es auch add() für List und Set.
In Mono auch. Find ich aber beides nicht so toll, append sagt eindeutiger was es tut.