Diskussion:Referenz (Programmierung)

aus Wikipedia, der freien Enzyklopädie

Abschnitt: Eigenschaften

Vielleicht wäre es sinnvoll den Artikel noch um einen Abschnitt "Eigenschaften" zu erweitern, der Vor- und Nachteile, sowie Anwendungsmöglichkeiten (Parameter-Übergabe "Call by Reference", komplexe Rückgabewerte (von Subroutinen in Perl); komplexe Datentypen (in Perl)) aufzeigt analog zu dem umfangreicheren Artikel "Zeiger (Informatik)".

Ein Beispiel in Perl wäre ebenfalls wünschenswert:

Referenzieren                ... und Dereferenzieren

- von Skalaren               - von Skalaren
  my $scalarRef = \$scalar;    my $scalar = ${$scalarRef};
- von Arrays                 - von Arrays
  my $arrayRef  = \@array;     my @array  = @{$arrayRef};
- von Hashes                 - von Hashes
  my $hashRef   = \%hash;      my %hash   = %{$hashRef};
- von Subroutinen            - von Subroutinen
  my $subrtRef  = \&subrt;     my &subrt  = &{$subrtRef};

(Der vorstehende Beitrag stammt von 134.176.72.134 – 14:29, 16. Jan. 2007 (MEZ) – und wurde nachträglich signiert.)

Verständlichkeit

Also ich fänd's wirklich nett die ersten Sätze allgemeinverständlicher zu formulieren. "Referenz" ist ja schon ein Informatik-Begriff der mal Nichtinformatikern in die Wege kommt: "Eine Referenz repräsentiert einen Verweis auf ein Objekt. Wie der Zeiger stellt eine Referenz damit einen Aliasnamen für eine Entität dar, d. h. eine Variable, die die Speicheradresse einer anderen Variablen enthält."
(Der vorstehende Beitrag stammt von Saule – 16:15, 31. Jul. 2008 (MESZ) – und wurde nachträglich signiert.)

Tja, das ist schon ziemlich abstrakt formuliert, aber zumindest korrekt. Mir fällt da jetzt erstmal nicht ein, wie man das noch weiter vereinfachen könnte, ohne dass es falsch wird. --j ?! 17:19, 31. Jul. 2008 (CEST)

Im zweiten Satz steht "wie der Zeiger", das kompliziert unnötig für den Nichtinformatiker... Eine Referenz stellt damit einen Aliasnamen (Umschreibung? mit einfachen Worten) für eine Entität (Umschreibung? mit einfachen Worten) dar. Es handelt sich um eine Variable die die Speicheradresse (Umschreibung bsw. mit Inhalt?) für eine andere Variable enthält. So vielleicht?
Wenn ich das jetzt richtig verstanden habe: Eine Referenz ist eine Variable die den Inhalt einer anderen Variable enthalten kann.
Was ist dann der Unterschied zu einem Zeiger? Vermutlich ein feststehender Wert der den Inhalt einer anderen Variablen enthalten kann.
(Der vorstehende Beitrag stammt von Saule – 13:55, 14. Aug. 2008 (MESZ) – und wurde nachträglich signiert.)

verborgen

Wie ist das „Im Gegensatz zu expliziten Zeigern ist die Adresse selbst nicht mehr änderbar und verborgen“ zu verstehen? in C++ kann ich doch mit &var jederzeit die Adresse abfragen? inwiefern ist sie also verborgen? --141.53.216.143 12:40, 6. Mär. 2013 (CET)

Beispiel:
int i=123; int& ref=i;  cout << "Adresse von i:" << &i << ", Adresse von ref:" << &ref << '\n';
Da wird nicht die Adresse von 'ref' ausgegeben, sondern eben von 'i', da 'ref' keine eigene Adresse hat. 'ref' ist nur ein "Aliasname" für 'i'.
--RokerHRO (Diskussion) 22:57, 6. Mär. 2013 (CET)

Starke und schwache Referenzen

Die beiden Begriffe starke und schwache Referenz könnten vielleicht hier – im Artikel – noch etwas besser beschrieben werden (z.B. was denn genau das Unterscheidungsmerkmal oder -kriterium ist). Zu letzterem, also die schwache Referenz, gibt es in der englischen Wikipedia übrigens einen ganzen Artikel (siehe en:weak reference) sowie auch einen Miniartikel zum Gegenteil (siehe en:strong reference). Und da ich zur Zeit keinen Grund sehe, daß dafür extra ein (oder gar zwei) ganze(r) Artikel hier (in der deutschsprachigen Wikipedia) angelegt werden, die Lemmas jedoch auch gefragt sind,[1] habe ich dazu nun lediglich zwei Weiterleitungen hier her angelegt.
--Konrad – 14:11, 11. Jul. 2011 (CEST)

Beispiel in C++

Ich finde das arg unglücklich. In C++ sind Referenzen einfach nur Aliasnamen auf bestehende Objekte. Andere Erklärungsversuche führen dagegen regelmäßig zu Verwirrungen und daher würd ich sie lieber unterlassen. --RokerHRO 18:03, 7. Nov. 2011 (CET)

Gleichsetzung Referenzen -> Call by Reference ist fatal

Im Artikel liest sich das so, als sei die Übergabe von Referenzen dasselbe wie Call by Reference. Insgesamt habe ich den Eindruck, dass hier Referenzsemantik und CbR heillos durcheinanergeworfen werden. Das ist aber nicht korrekt. So sind z.B. Java und Smalltalk beides Sprachen, die zwar i.A. Referenzsemantik verwenden, aber beide kennen kein Call by reference sondern ausschließlich Call by value. Kaktus 02:07, 22. Jan. 2012 (CET)

Java macht "Call by value", richtig. Allerdings ist der Value, der bei Objekten übergeben wird, eben eine Referenz auf das Objekt, so dass die aufgerufene Funktion das übergebene Objekt nach Belieben ändern kann (zumal es in Java auch kein const gibt). --RokerHRO 21:01, 23. Jan. 2012 (CET)

Nicht ganz

1. Sie können das Objekt selbst nicht ändern, sondern nur dessen Zustand. Anders ausgedrückt: Ein Ersetzen des Objekts, dass sich auch außerhalb der Methode auswirken würde, ist nicht möglich. Genau das ist der wesentliche Unterschied zu CbR. 2. Die Änderung des Zustandes kann nicht "nach Belieben" rfolgen, sondern lediglich über die von dem Objekt bereitgestellte Schnittstelle. Kaktus (Diskussion)