Entwickler-Ecke

Programmiersprachen (Client) - Fragen zur Objektorientierung


Marco D. - Fr 17.08.07 14:50
Titel: Fragen zur Objektorientierung
Ich arbeite an einer String-Klasse in JavaScript. Dazu mal eine Verständnisfrage.
Wenn ich nun ein String-Objekt anlege:

Quelltext
1:
var mystr = new String('blublablu');                    

und dann die Methode DeleteByIndex aufrufe:

Quelltext
1:
mystr.DeleteByIndex(1,2);                    

Erwartet man als OOP-Programmierer dann, dass diese Funktion den bearbeiteten String zurückgibt und/oder den gekapselten internen String abändert?
Muss ich in der Methode also return bla; schreiben oder this.content = bla; ?


UGrohne - Fr 17.08.07 15:02

Eigentlich kannst Du es haben, wie Du willst, hauptsache es ist dokumentiert. Aber in den meisten Systemen (z.B. .NET) wird ein veränderter String zurückgegeben. Damit hast Du auch die beste Flexibilität, weil Du vll. den Ursprungsstring unverändert lassen willst, aber für eine andere Operation etwas geändert haben willst.
Sollte es dann in der aktuellen Instanz geschehen, brauchst Du ja auch nur eine Zuweisung machen, das sind nur ein paar Zeichen mehr.

Daher meine klare Empfehlung: Rückgabe eines veränderten Strings.


Heiko - So 19.08.07 17:07

An dieser Stelle würde ich ehrlicherweise erwarten, dass er den aktuellen String verändert (synonym zum Delphi-Delete). Von daher wäre es ratsam (wegen den verschiedenen Auffassungen), an dieser Stelle einen extra Parameter einzubauen, der zwischen den beiden möglichkeiten wählen lässt. Oder, was ich an vielen solchen Stellen am besten finde: für beide Varianten eine Funktion anlegen, die sich vom Namen her ähneln (so dass man sie leichter findet, wenn man nur eine kennt) und wo der Name genug auskunft gibt ;).

Grüße
Heiko


Christian S. - So 19.08.07 18:42

Die Rückgabe des Strings hat den großen Vorteil, dass Du auch weiter Operationen drauf anwenden kannst:


C#-Quelltext
1:
mystr.CopyByIndex(425).DeleteByIndex(1,2).TranslateToKlingon();