You do realise that if everything by value.. you could never build complex systems?
A a = new A(); B n = new B(a); Suddenly 'b'... has a Copy of 'a'... what the? The concept of a singleton disappears, as there are copies flying around all over the place... You said: Ask yourself the question: in most cases do you assign an object to another variable to mutate it? No, not the case most times. And more often than not, I want to mutate the original, i.e. the reference, not a whole new copy, as I want the changes to be reflected across an entire system. Mark On Sat, Feb 14, 2009 at 5:37 PM, Judah McAuley <[email protected]>wrote: > > But array1 = ArrayConcat(array1,array2) would work just fine. It takes > a copy of array1, a copy of array2, concatenates the two, then assigns > the result to array1. Easy. > > I cannot stand passing by reference for mutable objects. It may be > useful in a small handful of cases but it exposes a fundamentally > fubared paradigm in my opinion. If I want to modify variable X, then I > expect to be modifying variable X, not variable Y. And if X happens to > be a reference to Y and I forget that then I end up with unintended > consequences. > > I understand Mark's point about granular control. Yes, I can > explicitly duplicate it. And yes, most languages tend to pass by > reference. But just because that's the way it is traditionally done > doesn't mean it is the right way to do it. Ask yourself the question: > in most cases do you assign an object to another variable to mutate > it? If so, then passing by value as the default makes sense. Passing > by reference does not. > > Judah > > On Fri, Feb 13, 2009 at 5:45 PM, Henry <[email protected]> wrote: > > > > Just earlier today I wanted to write a function to combine two array > > into one array. So I was thinking, maybe I should write an > > > > void ArrayConcat(array1, array2) // that appends items in array2 to > > the end of array1 > > > > Then after the code ready, I couldn't figure out how come it didn't > > work... then PASS BY VALUE hits me in the head! ouch. > > > > It'd be nice if ArrayList.addAll() works on CF's array all time time, > > but it does not. I guess that's why no body calls the underlying java > > method... > > > > > > Henry Ho > > > > > > On Feb 13, 4:43 pm, Mark Mandel <[email protected]> wrote: > >> Because you have no granular control over it. > >> > >> Currently, the only way to force arrays to pass by reference, you have > to > >> create a Java List implementation, like Vector, or ArrayList. > >> > >> In (almost?) every other programming language, everything is passed by > >> reference, unless you specify it otherwise. > >> > >> That way, if you want a new copy of an array you can say: > >> > >> newarray = myarray.clone(); > >> > >> and be explicit with your needs. > >> > >> Pass by value of arrays in CF drives me nuts, but it was an old, old, > old > >> decision, and it's not going to change. > >> > >> Mark > >> > >> On Sat, Feb 14, 2009 at 11:02 AM, Judah McAuley < > [email protected]>wrote: > >> > >> > >> > >> > >> > >> > I'm curious about your reasoning behind that feeling. Passing objects > >> > by value makes perfect sense to me. If I want a reference to myarray > >> > than why don't I just call myarray? If I say thisotherarray = myarray > >> > then I'm copying myarray over because I'm presumably doing to do > >> > something else with it. If I want to do something with myarray then I > >> > should act upon myarray, not upon a reference to it. > >> > >> > Judah > >> > >> > On Fri, Feb 13, 2009 at 2:05 PM, Peter Bell <[email protected]> > >> > wrote: > >> > >> > > I think passing arrays by value in ColdFusion only truly makes sense > >> > > to someone who's off their meds, but because it is the way things > >> > > work, it will continue to be the way things work to avoid breaking > >> > > legacy code. > >> > >> > > Best Wishes, > >> > > Peter > >> > >> > > On Feb 13, 2009, at 4:58 PM, Dan Wilson wrote: > >> > >> > >> Frankly Henry, the contents of the array matter. Coldfusion makes > a > >> > >> copy of all simple types and passes a reference of all complex > types. > >> > >> > >> If you have an array of objects or structs, coldfusion will make a > new > >> > >> array with a reference to the objects inside. Changing any of those > >> > >> objects will be reflected in both arrays. However, simple types are > >> > >> not passed by reference, so changing one of those would only be > >> > >> reflected inside the source array that was mutated. > >> > >> > >> Make sense? > >> > >> > >> Dan > >> > >> > >> On 2/13/09, Henry <[email protected]> wrote: > >> > >> > >>> Anyone knows what's the reason behind passing array by value, not > by > >> > >>> reference, in CF? > >> > >> > >>> I totally forgot about it today and it cost me valuable time... > >> > >> > >>> Henry Ho > >> > >> > >> -- > >> > >> "Come to the edge, he said. They said: We are afraid. Come to the > >> > >> edge, he said. They came. He pushed them and they flew." > >> > >> > >> Guillaume Apollinaire quotes > >> > >> -- > >> E: [email protected] > >> W:www.compoundtheory.com > > > > > > > > > -- E: [email protected] W: www.compoundtheory.com --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "CFCDev" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/cfcdev?hl=en -~----------~----~----~----~------~----~------~--~---
