<

Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x

Differences in Creating Copy of a Structure Using CFSet, Duplicate, and Structcopy in ColdFusion

Published on
10,481 Points
4,481 Views
Last Modified:
Most ColdFusion developers get confused between the CFSet, Duplicate, and Structcopy methods of copying a Structure, especially which one to use when. This Article will explain the differences in the approaches with examples; therefore, after reading, you should get a clear understanding of what each does and which one is best in a given scenario.

Using CFSet

Creating a copy of a Structure using CFSet will result in a new variable having a reference to the original Structure; therefore, changes will affect the original Structure.

Example:
<cfset structtest = structnew()>
<cfset structtest.txt = "Testing">
<cfset structtest.nestedstruc = structnew()>
<cfset structtest.nestedstruc[1] = "sri">
<cfset structtest.nestedstruc[2] = "Kanth">
<cfset Variables.st1 = structtest>

<cfdump var="#structtest#" label="original structtest Structure">

<cfdump var="#st1#" label="st1 struct - using Cfset">

<cfset st1.txt = "Testing1">
<cfset st1.nestedstruc[2] = "Kanth M">
<h3> After assigning Values </h3>
<cfdump var="#structtest#" label="original Session Structure">

<cfdump var="#st1#" label="st1 struct - using Cfset">

Open in new window

Using CFSet
In the above code, we have a Structure structtest with a simple variable txt and nested Structure nestedstruc.
Since st1 references structtest, we can see that values updated for txt and nestedstruc of st1 are also reflected in the original Structure structtest.

Using Duplicate

Creating a copy of a Structure using Duplicate will result in a new variable containing no reference to the original Structure but rather a snapshot of its current contents.

Example:
<cfset structtest = structnew()>
<cfset structtest.txt = "Testing">
<cfset structtest.nestedstruc = structnew()>
<cfset structtest.nestedstruc[1] = "sri">
<cfset structtest.nestedstruc[2] = "Kanth">
<cfset Variables.st1 = duplicate(structtest)>

<cfdump var="#structtest#" label="original structtest Structure">

<cfdump var="#st1#" label="st1 struct - using Duplicate">

<cfset st1.txt = "Testing1">
<cfset st1.nestedstruc[2] = "Kanth M">
<h3> After assigning Values </h3>
<cfdump var="#structtest#" label="original Session Structure">

<cfdump var="#st1#" label="st1 struct - using Duplicate">

Open in new window

Using Duplicate
In the above sample, we can see that the values updated for txt and nestedstruc of st1 are not reflected in the original Structure structtest.

Using Strcutcopy

Strcutcopy is where most people get confused.
We can say Structcopy is between CFSet and Duplicate.
When we use Structcopy, a new structure will be created; however, references to nested structures, objects, and query variables will be maintained from the original Structure.

Example:
<cfset structtest = structnew()>
<cfset structtest.txt = "Testing">
<cfset structtest.nestedstruc = structnew()>
<cfset structtest.nestedstruc[1] = "sri">
<cfset structtest.nestedstruc[2] = "Kanth">
<cfset Variables.st1 = structcopy(structtest)>

<cfdump var="#structtest#" label="original structtest Structure">

<cfdump var="#st1#" label="st1 struct - using structcopy">

<cfset st1.txt = "Testing1">
<cfset st1.nestedstruc[2] = "Kanth M">
<h3> After assigning Values </h3>
<cfdump var="#structtest#" label="original Session Structure">

<cfdump var="#st1#" label="st1 struct - using structcopy">

Open in new window

Using Structcopy
In the above example, we can see that the change for txt is not reflected in the original Structure, but the "2" key change of the nested nestedstruc Structure is reflected in the structtest Structure .

Conclusion

Try to use the best one while copying a Structure which will be more effective for your scenario:
Cfset – Create a reference to the original Structure.
Duplicate – Create a new Structure with no reference to the original Structure.
Structcopy – Create a new Structure with references to the complex variables contained in the original Structure like nested structures, objects, and query variables.
0
Comment
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
0 Comments

Featured Post

Survive A High-Traffic Event with Percona

Your application or website rely on your database to deliver information about products and services to your customers. You can’t afford to have your database lose performance, lose availability or become unresponsive – even for just a few minutes.

Join & Write a Comment

This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…

Keep in touch with Experts Exchange

Tech news and trends delivered to your inbox every month