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
-~----------~----~----~----~------~----~------~--~---

Reply via email to