Page 3 of 4 First 1234 Last
  1. #31
    [BAT] Hydra's Avatar
    Registered
    21/07/02
    Posts
    2,772
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/59
    Quote Originally Posted by MilM View Post
    This quote is hidden because you are ignoring this member. Show
    Het probleem van miscommunicatie zit hem in het feit dat objecten by reference worden doorgegeven en de argumenten zelf by value.

    Aangezien de argumenten by value doorgegeven worden, is java strikt gezien inderdaad by value.
    Maar het is meer dna normaal dat men in een objecttaal vanuit het standpunt van een object gaat gaan kijken.

    Pass by value is instinctief volgens mij een slechte benaming voor talen als java.

    Er zijn 4 mogelijke combinaties (argumenten by reference/value; objecten by reference/value) en het zou dan ook veel beter zijn om beiden in de benaming te betrekken dan enkel hoe de argumenten doorgegeven worden.

    --> het lijkt me toch duidelijk dat met pass-by-* enkel het doorgeven (pass) van een variable als argument in een methode wordt bedoeld?

    Bijvoorbeeld in het geval van java 'by referencevalue' (referentiewaarde) of 'by value - reference' (waarde van de referentie).

    Want voor veel meer situaties, zeker voor beginnelingen, is het van belang hoe het object wordt doorgegeven (by reference) en niet het argument zelf (by value).
    In je uitleg zet je meermaals dat een object doorgegeven wordt. Dit is onmogelijk in java, en mag je als dusdanig ook nooit schrijven. Het verwart lezers (zoals ik) die proberen te begrijpen wat je bedoelt.

    Er is in de academische wereld (en daarbuiten ook) een conventie die bepaalt wat "pass-by-reference" en "pass-by-value" precies inhouden. Als je je gewoon aan die conventie houdt kan er onmogelijk verwarring zijn. Het probleem zit em in het feit dat mensen vlug hun eigen definitie van pass-by-reference verzinnen, die niet gelijkloopt met de academische definitie.
    Last edited by [BAT] Hydra; 01-12-2007 at 18:56.
    Starcraft 2 profiles: T Hydra, InstantPizza | P FrozenFire
    no votes  

  2. #32

    Registered
    20/09/04
    Location
    Kortrijk / Gent
    Posts
    7,177
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    3/43
    Ik zeg nergens dat een object wordt doorgegeven.
    Ik zeg dat een referentie wordt doorgegeven.

    De manier waarop dat wordt doorgegeven kan verschillend zijn (door een kopie of niet)

    'pass by value' verwart ook veel lezers.
    De waarde van wat ? Het object of van de referentie ?

    Daarom dat ik een dubbele benaming ook beter vind.

    "Een object wordt doorgegeven door een kopie (waarde) van de referentie van het object".
    Er is niets mis met deze zin imo
    no votes  

  3. #33
    forloRn_'s Avatar
    Registered
    23/11/03
    Location
    Landeurp
    Posts
    1,791
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    10/17
    'k Zie [BAT]Hydra zijn of haar punt wel ondertussen. 't Is nu eenmaal zo dat een reference in Java iets anders is dan een reference in C++. Dereferencing (expliciet met * op een pointer of impliciet met een reference) kan nu eenmaal niet in Java.

    'k Vind dat het de discussie hier niet waard is. In elk boek over Java leer je dat primitives doorgegeven worden by value, en objecten by reference, en ik denk dat de meesten onder ons wel weten wat daar precies mee bedoeld wordt.
    no votes  

  4. #34
    [BAT] Hydra's Avatar
    Registered
    21/07/02
    Posts
    2,772
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/59
    Quote Originally Posted by MilM View Post
    This quote is hidden because you are ignoring this member. Show
    "Een object wordt doorgegeven door een kopie (waarde) van de referentie van het object".
    Er is niets mis met deze zin imo
    Objecten worden niet doorgegeven in java, hier is een verbeterde versie van je zin:

    "Een referentie naar een object wordt doorgegeven door een kopie (waarde) van de referentie van het object".
    Starcraft 2 profiles: T Hydra, InstantPizza | P FrozenFire
    no votes  

  5. #35
    [BAT] Hydra's Avatar
    Registered
    21/07/02
    Posts
    2,772
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/59
    Quote Originally Posted by forloRn_ View Post
    This quote is hidden because you are ignoring this member. Show
    'k Zie [BAT]Hydra zijn of haar punt wel ondertussen. 't Is nu eenmaal zo dat een reference in Java iets anders is dan een reference in C++. Dereferencing (expliciet met * op een pointer of impliciet met een reference) kan nu eenmaal niet in Java.

    'k Vind dat het de discussie hier niet waard is. In elk boek over Java leer je dat primitives doorgegeven worden by value, en objecten by reference, en ik denk dat de meesten onder ons wel weten wat daar precies mee bedoeld wordt.
    Het is niet enkel mijn punt, het is het punt van iedereen die er wat meer over weet! Iemand die schrijft in zijn boek dat in java objecten by reference worden doorgegeven zal er zelf niet veel van weten...
    Iemand die schrijft in zijn boek dat in java enkel objecten gemanipuleerd kunnen worden door referenties naar deze objecten te gebruiken, zal er al veel meer van af weten...
    Starcraft 2 profiles: T Hydra, InstantPizza | P FrozenFire
    no votes  

  6. #36

    Registered
    20/09/04
    Location
    Kortrijk / Gent
    Posts
    7,177
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    3/43
    Ik geef toe dat mijn zin een slecht voorbeeld was om mijn punt duidelijk te maken.
    Maar ik blijf bij mijn punt.

    Er zijn ruim gezien 4 situaties en 'by value' is geen ideale benaming voor java.
    Aangezien niet de waarde zelf, maar de waarde van een referentie naar een object wordt doorgegeven.

    Ik heb trouwens nergens gezegd dat u of eniac niet correct waren (integendeel zelfs).
    no votes  

  7. #37
    [BAT] Hydra's Avatar
    Registered
    21/07/02
    Posts
    2,772
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/59
    De benamingen scheppen inderdaad verwarring.

    Maar als iedereen eerst de moeite zou doen om wat te lezen ivm "pass-by-reference" en "pass-by-value" alvorens er beweringen over te doen, zou er heel wat minder verwarring bestaan .
    Starcraft 2 profiles: T Hydra, InstantPizza | P FrozenFire
    no votes  

  8. #38

    Registered
    20/09/04
    Location
    Kortrijk / Gent
    Posts
    7,177
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    3/43
    Die verwarring zal moeilijk weg te krijgen zijn.
    De reden ligt in het taalgebruik.

    Een voorbeeld:
    Je kunt een steamaccount doorgeven door enkel het passwoord en het emailadres door te geven.
    Dan zeg je ook in de gewone taal "ik heb mijn steamaccount doorgegeven", terwijl je in het echt een emailadres en passwoord hebt doorgegeven (waarmee iemand toegang krijgt tot een steamaccount).

    Ik geef dat voorbeeld aan omdat je daarstraks zei dat er geen object wordt doorgegeven, maar een referentie.
    Dat klopt ook, maar met de bedoeling natuurlijk om in die andere methode aan het object te kunnen.
    Het is dus maar te zien wat je verstaat onder 'doorgeven'.

    Ik heb een steamaccount doorgegeven door het passwoord en email door te sturen. (die zin van mij)
    Ik heb een passwoord en email doorgegeven door een kopie te versturen. (uw verbeterde versie)

    Beiden zijn volgens de gewone taal niet fout.
    In Java geldt er 'by value', maar wil dat zeggen dat het volgens ons taalgebruik fout is om te zeggen dat objecten doorgegeven worden door een referentie ?
    Het is maar te zien vanuit welk standpunt.

    Die conventie is er inderdaad en java zelf is dus 'by value'. Het is ook mijn bedoeling niet om daarover te discussieren.

    Ik ga nu wel ver met deze post . Maar ik weet niet of je weet waar ik naartoe wil ?
    Ik heb het over ons taalgebruik en niet over de conventie voor alle duidelijkheid.
    Zie dit dus als een nieuwe discussie over de natuurlijke reden achter die verwarring (en zeker niet als een post om het 'by value' te ontkrachten).

    EDIT: ik bedoel dus maar of je kunt stellen dat het fout is om te zeggen dat 'objecten worden doorgegeven door een referentie (by reference)' in onze gewone taal ?
    Last edited by MilM; 01-12-2007 at 19:56.
    no votes  

  9. #39

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Quote Originally Posted by MilM View Post
    This quote is hidden because you are ignoring this member. Show
    Het probleem van miscommunicatie zit hem in het feit dat objecten by reference worden doorgegeven en de argumenten zelf by value.

    Aangezien de argumenten by value doorgegeven worden, is java strikt gezien inderdaad by value.
    Maar het is meer dna normaal dat men in een objecttaal vanuit het standpunt van een object gaat gaan kijken
    Ik ken niet veel talen (asm is eignelijk enige) waar bij het argument zelf by-reference wordt meegegeven. In C, C++, C# wordt het argument ook by value meegegeven .

    Toch spreekt men daar altijd over pass-by-reference, tenzij men het echt over de pointer-variabele (of reference-variabele) zelf heeft en men zelfs niet kijkt naar wat het juist wijst (dan gaat men in C/C++ zelfs vaak gewoon met void* werken), wat een zware minderheid van de gevallen is.

    Ik gaf hydra dan ook geen ongelijk, ik vind gewoon dat java-mensen in dit geval echt zeer tegendraads doen tegen de standaard gebruikte termen. Als men over de objecten spreekt (en dat is praktisch altijd zo) is java pass-by-reference.
    Last edited by killgore; 02-12-2007 at 16:18.
    no votes  

  10. #40
    [BAT] Hydra's Avatar
    Registered
    21/07/02
    Posts
    2,772
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/59
    Quote Originally Posted by killgore View Post
    This quote is hidden because you are ignoring this member. Show
    Als men over de objecten spreekt (en dat is praktisch altijd zo) is java pass-by-reference.
    Het is helemaal niet zo dat de java mensen tegendraads zijn. De mensen die jouw definitie gebruiken weten er niets van maar denken dat ze er iets over weten. Je gaat nergens in een hoog aangeschreven boek jouw definitie van "call-by-reference" terugvinden. Er is maar 1 juiste definitie, en iedereen die erover wenst te praten zou deze moeten gebruiken...

    Hier is een voorbeeld in c# waar er opnieuw de juiste definitie van call-by-value en call-by-reference worden gebruikt

    by value:

    Code:
    private void CallMe(int i)
    {
        i = 100;  //i is assigned a value of 100
    }
    
    public void TestCall()
    {
       int i = 10;
       CallMe(i);
       MessageBox.Show(i.ToString());  // The changed value is not reflected and the
                                //MessageBox shows 10 and not 100.
    }
    by reference:

    Code:
    private void CallMe(ref int i)
    {
        i = 100;  //i is assigned a value of 100
    }
    
    public void TestCall()
    {
       int i = 10;
       CallMe(ref i);
       MessageBox.Show(i.ToString());  // The changed value is reflected and the
                                //MessageBox now shows 100.
    }
    bron: http://forums.microsoft.com/MSDN/Sho...40086&SiteID=1

    In dit voorbeeld wordt een int by value en by reference doorgegeven. Zoals je kan zien voorziet c# expliciet een manier om variabelen by reference door te geven. Hiervoor maak je gebruik van het ref keyword. Op dezelfde manier zou je een referentie ook by value en by reference kunnen doorgeven. (C# werkt ook met referenties naar objecten)

    Het ref keyword illustreert mooi het verschil tussen pass-by-reference (gebruik maken van ref keyword, de parameter binnen de methode is een alias voor de parameter buiten de methode) en geen pass by-reference (referenties doorgeven zoals dit in java gedaan wordt)

    Je moet het uit je hoofd zetten dat het volgende juist is: Als men over de objecten spreekt (en dat is praktisch altijd zo) is java pass-by-reference.

    Het is VOLLEDIG fout! Je gaat niemand met wat meer kennis van zaken vinden die zoiets gaat bevestigen...
    Last edited by [BAT] Hydra; 02-12-2007 at 15:44.
    Starcraft 2 profiles: T Hydra, InstantPizza | P FrozenFire
    no votes  

  11. #41
    [BAT] Hydra's Avatar
    Registered
    21/07/02
    Posts
    2,772
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/59
    Quote Originally Posted by killgore View Post
    This quote is hidden because you are ignoring this member. Show
    In C, C++, C# wordt het argument ook by reference meegegeven .
    In C: nooit, altijd pass-by-value (lees bvb dit: http://www.comp.nus.edu.sg/~esim/faq/node12.html )
    In C++: niet altijd (zie een paar posts terug)
    In C#: niet altijd (zie vorige post)
    Starcraft 2 profiles: T Hydra, InstantPizza | P FrozenFire
    no votes  

  12. #42

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Quote Originally Posted by [BAT] Hydra View Post
    This quote is hidden because you are ignoring this member. Show
    In C: nooit, altijd pass-by-value (lees bvb dit: http://www.comp.nus.edu.sg/~esim/faq/node12.html )
    In C++: niet altijd (zie een paar posts terug)
    In C#: niet altijd (zie vorige post)
    dat was nu meest ongelukkige typo van post. Moest by value zijn
    no votes  

  13. #43
    [BAT] Hydra's Avatar
    Registered
    21/07/02
    Posts
    2,772
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/59
    Quote Originally Posted by killgore View Post
    This quote is hidden because you are ignoring this member. Show
    Ik ken niet veel talen (asm is eignelijk enige) waar bij het argument zelf by-reference wordt meegegeven. In C, C++, C# wordt het argument ook by value meegegeven .
    Niet noodzakelijk hoor. In C# en C++ kan je kiezen of je parameters by reference of by value doorgeeft. Het is wel zo dat indien je niets aangeeft, de parameters by value doorgegeven worden.

    Hier zie je hoe parameters in c# by value en by reference kunnen meegegeven worden: http://www.yoda.arachsys.com/csharp/parameters.html

    In java kan je niet kiezen. Zeggen dat java parameters by reference doorgeeft is onzin.
    Starcraft 2 profiles: T Hydra, InstantPizza | P FrozenFire
    no votes  

  14. #44

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Quote Originally Posted by [BAT] Hydra View Post
    This quote is hidden because you are ignoring this member. Show
    In java kan je niet kiezen. Zeggen dat java parameters by reference doorgeeft is onzin.
    ik heb nergens gezegd dat je de argumenten zelf by reference doorgeeft

    vergeet niet dat originele discussie sloeg op:
    Mnee. Pass-by-reference bestaat niet in Java, het is strikt pass-by-value.
    Dan kan je een object van een aanroepende functie NOOIT wijzigen.
    Last edited by killgore; 02-12-2007 at 17:33.
    no votes  

  15. #45
    [BAT] Hydra's Avatar
    Registered
    21/07/02
    Posts
    2,772
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/59
    Mnee. Pass-by-reference bestaat niet in Java, het is strikt pass-by-value.
    betekent niet dat

    Dan kan je een object van een aanroepende functie NOOIT wijzigen.

    ik neem aan dat je hiermee dit bedoelt: Dan kan je binnen een methode aan een object waarvan de referentie doorgegeven is als parameter geen wijzigingen toebrengen die ook buiten de methode voelbaar zijn.
    Als je dat wel denkt heb je mijn posts alsook wat (strikte) "pass-by-value" inhoudt niet begrepen.
    Last edited by [BAT] Hydra; 02-12-2007 at 18:23.
    Starcraft 2 profiles: T Hydra, InstantPizza | P FrozenFire
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in