Re: wie expandiere ich hashvalues in einem string
robert kuzelj <[email protected]> Thu, 24 Feb 2005 21:05:27 +0100
| Newsgroups | gmane.comp.lang.ruby.german |
|---|---|
| Message-ID | <[email protected]> |
hi david,
> Ob dieses Beispiel aber einen wesentlichen Unterschied wirklich zeigt,
> oder eher einen Fall des allgemeinen Prizips, Variablen seien lauter
> Referenzhaelter? Ich wuerde sagen: Params sind eindeutig
> Lokalvariablen, die von anderen Vars nur dadurch zu unterscheiden
> sind, dass sie ihren Werte durch arglist-Syntax bekommen.
natuerlich hast du recht dass sich eine lokale variable nicht von
einem param unterscheidet was die prinzipiellen moeglichkeiten der
host-sprache selbst angeht (zumindest die, die ich benutze machen da
keinen unterschied).
aber mir geht es nicht um die auswirkung der sprache sondern
es geht mir um den systemischen aspekt _meines_ software system.
UND da macht es sehrwohl einen unterscheid ob ich eine lokale variable
oder einen parameter manipuliere.
> Uebrigens soll es dem Autor der Methode ganz klar sein, welche Vars
> als Params geboren sind, und welche nicht. Das '_' kann dabei nicht
der unterstrich hilft eben genau dabei. jederzeit zu wissen was ein
param ist und was nicht. natuerlich ist das nur ein hilfsmittel und
es gibt massig wege dieses hilfsmittel in sein gegenteil zu verkehren.
aber das macht den ansatz nicht invalide.
> helfen -- denn wenn man nicht weiss, welche die Paramnamen sind, kann
> man das '_' im richtigen Platz ueberhaupt nicht tippen :-)
eine gute java-idee (intellij) kann da schon wunder wirken.
es muss schon gruende geben warum dies ein gebraeuchliches idiom
in java ist:
void doit(MyType _mt)
{
MyType mt = (MyType) _mt.clone();
mt.ichMachMitDirWasIchWill();
}
oder wenn ich das original doch aendern will
MyType doit(MyType _mt)
{
MyType mt = (MyType) _mt.clone();
mt.ichMachMitDirWasIchWill();
return mt;
}
MyType mt = new MyType();
mt = doit(mt);
oder wenn ichs etwas objekt orientierter haben will sogar
mit doit als methode von MyType. dann siehts halt so aus.
MyType doit()
{
MyType mt = (MyType) this.clone();
mt.ichMachMitDirWasIchWill();
return mt;
}
MyType mt = new MyType();
mt = mt.doit();
wer eher defensiv programmieren will/muss. kommt um sowas nicht
herum. das gilt fuer java, python, ruby usw. solange ich meine
methode nicht so deklarieren kann
void doit(*const* MyType _mt)
wie das unter c++ moeglich ist, finde ich ein unterstrich einen
zahlenswerten preis fuer einen aufmerksamkeitshinweis.
ok. und nu lassen wir die diskussion. unser team hat mit diesem
kleinen trick, der (ich weiss) sich ganz leicht aushebeln laesst,
gute erfahrung gemacht. also werd ich ihn auch in ruby nutzen.
ciao robertj