Skip to content

Commit 6f0f0e0

Browse files
committed
05 - js - VALOR Y REFERENCIA
1 parent 6f81bc1 commit 6f0f0e0

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
/*
2+
_____________________________________
3+
https://github.com/kenysdev
4+
2024 - JavaScript
5+
_______________________________________
6+
#05 VALOR Y REFERENCIA
7+
---------------------------------------
8+
* EJERCICIO:
9+
* - Muestra ejemplos de asignación de variables "por valor" y "por referencia", según
10+
* su tipo de dato.
11+
* - Muestra ejemplos de funciones con variables que se les pasan "por valor" y
12+
* "por referencia", y cómo se comportan en cada caso en el momento de ser modificadas.
13+
* (Entender estos conceptos es algo esencial en la gran mayoría de lenguajes)
14+
*
15+
* DIFICULTAD EXTRA (opcional):
16+
* Crea dos programas que reciban dos parámetros (cada uno) definidos como variables anteriormente.
17+
* - Cada programa recibe, en un caso, dos parámetros por valor, y en otro caso, por referencia.
18+
* Estos parámetros los intercambia entre ellos en su interior, los retorna, y su retorno
19+
* se asigna a dos variables diferentes a las originales. A continuación, imprime el valor de las
20+
* variables originales y las nuevas, comprobando que se ha invertido su valor en las segundas.
21+
* Comprueba también que se ha conservado el valor original en las primeras.
22+
*/
23+
24+
// ________________________________________________________
25+
// 1. Asignación de variables "por valor":
26+
27+
// Inicialización:
28+
let int1 = 111;
29+
let boo1 = false;
30+
let str1 = "Ben";
31+
32+
// Asignación:
33+
let int2 = int1;
34+
let boo2 = boo1;
35+
let str2 = str1;
36+
37+
// Cambio:
38+
int1 = 777;
39+
boo1 = true;
40+
str1 = "Bob";
41+
42+
// Las segundas variables no fueron afectadas.
43+
console.log(int2, boo2, str2); // 111 false "Ben"
44+
45+
// Ejemplo en una función:
46+
function fun_v(en_int, en_boo, en_str) {
47+
// Cambio:
48+
en_int = 333;
49+
en_boo = false;
50+
en_str = "Ken";
51+
}
52+
53+
// Paso por valor
54+
fun_v(int1, boo1, str1);
55+
56+
// No afectadas por los cambios en la función.
57+
console.log(int1, boo1, str1); // 777 true "Bob"
58+
59+
// ________________________________________________________
60+
// 2. Asignación de variables "por referencia":
61+
62+
// Inicialización:
63+
let lis1 = [444, true, "Dan"];
64+
let set1 = new Set([444, true, "Dan"]);
65+
let dic1 = { name: "Dan" };
66+
67+
// Asignación:
68+
let lis2 = lis1;
69+
let set2 = set1;
70+
let dic2 = dic1;
71+
72+
// Cambio:
73+
lis1.splice(0, 3, 888, false, "Zoe");
74+
set1.delete(444);
75+
set1.delete("Dan");
76+
dic1.name = "Zoe";
77+
78+
// Las variables fueron afectadas por el cambio.
79+
console.log(lis2);
80+
console.log([...set2]);
81+
console.log(dic2);
82+
83+
// Ejemplo en una función:
84+
function fun_r(en_lis, en_set, en_dic) {
85+
// Cambio:
86+
en_lis.splice(0, 3, 333, true, "Jay");
87+
en_set.add(333);
88+
en_set.add("Jay");
89+
en_dic.name = "Jay";
90+
}
91+
92+
// Paso por referencia
93+
fun_r(lis2, set2, dic2);
94+
95+
// Fueron afectadas por los cambios en la función.
96+
console.log(lis2);
97+
console.log([...set2]);
98+
console.log(dic2);
99+
100+
// ________________________________________________________
101+
// 3. DIFICULTAD EXTRA
102+
103+
let s1 = "Ben";
104+
let s2 = "Zoe";
105+
let l1 = [12, 21];
106+
let l2 = ["Ben", "Zoe"];
107+
108+
console.log(`Pre-Intercambio:\n${s1} - ${s2}\n${l1} - ${l2}`);
109+
110+
function by_value(str1, str2) {
111+
let temp = str1;
112+
str1 = str2;
113+
str2 = temp;
114+
return [str1, str2];
115+
}
116+
117+
function by_reference(list1, list2) {
118+
return [list2.slice(), list1.slice()];
119+
}
120+
121+
const [new_s1, new_s2] = by_value(s1, s2);
122+
const [new_l1, new_l2] = by_reference(l1, l2);
123+
124+
console.log(`Originales:\n${s1} - ${s2}\n${l1} - ${l2}`);
125+
console.log(`Nuevas:\n${new_s1} - ${new_s2}\n${new_l1} - ${new_l2}`);

0 commit comments

Comments
 (0)