Skip to content

Commit 6b3a991

Browse files
committed
mouredev#5 - TypeScript
1 parent 777bfe9 commit 6b3a991

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/*
2+
* EJERCICIO:
3+
* - Muestra ejemplos de asignación de variables "por valor" y "por referencia", según
4+
* su tipo de dato.
5+
* - Muestra ejemplos de funciones con variables que se les pasan "por valor" y
6+
* "por referencia", y cómo se comportan en cada caso en el momento de ser modificadas.
7+
* (Entender estos conceptos es algo esencial en la gran mayoría de lenguajes)
8+
*
9+
* DIFICULTAD EXTRA (opcional):
10+
* Crea dos programas que reciban dos parámetros (cada uno) definidos como variables anteriormente.
11+
* - Cada programa recibe, en un caso, dos parámetros por valor, y en otro caso, por referencia.
12+
* Estos parámetros los intercambia entre ellos en su interior, los retorna, y su retorno
13+
* se asigna a dos variables diferentes a las originales. A continuación, imprime el valor de las
14+
* variables originales y las nuevas, comprobando que se ha invertido su valor en las segundas.
15+
* Comprueba también que se ha conservado el valor original en las primeras.
16+
*/
17+
18+
// Ejemplo de asignación por valor para tipos primitivos
19+
const num1: number = 10;
20+
let num2: number = num1; // Asignación por valor
21+
num2 = 20;
22+
23+
console.log(num1); // Salida: 10 (valor original no cambia)
24+
console.log(num2); // Salida: 20
25+
26+
// Ejemplo de asignación por referencia para objetos
27+
interface Persona {
28+
nombre: string;
29+
}
30+
31+
const obj1: Persona = { nombre: 'Juan' };
32+
const obj2: Persona = obj1; // Asignación por referencia
33+
obj2.nombre = 'Carlos';
34+
35+
console.log(obj1.nombre); // Salida: Carlos (el valor original cambia)
36+
console.log(obj2.nombre); // Salida: Carlos
37+
38+
// Ejemplo de función que recibe parámetros por valor
39+
function duplicar(numero: number): number {
40+
numero *= 2;
41+
return numero;
42+
}
43+
44+
const original: number = 5;
45+
const resultado: number = duplicar(original);
46+
47+
console.log(original); // Salida: 5 (el valor original no cambia)
48+
console.log(resultado); // Salida: 10
49+
50+
// Ejemplo de función que recibe parámetros por referencia (objeto)
51+
function cambiarNombre(persona: Persona): void {
52+
persona.nombre = 'Pedro';
53+
}
54+
55+
const personaOriginal: Persona = { nombre: 'Juan' };
56+
cambiarNombre(personaOriginal);
57+
58+
console.log(personaOriginal.nombre); // Salida: Pedro (el valor original cambia)
59+
60+
console.log(`${'\n'}${'*'.repeat(50)}${'\n'}`);
61+
62+
// Función que intercambia valores por valor
63+
function intercambiarValoresPorValor(a: any, b: any): [any, any] {
64+
const temp = a;
65+
a = b;
66+
b = temp;
67+
return [a, b];
68+
}
69+
70+
// Función que intercambia valores por referencia
71+
function intercambiarValoresPorReferencia(obj: { valor1: any; valor2: any }): { valor1: any; valor2: any } {
72+
const { valor1, valor2 } = obj;
73+
return { valor1: valor2, valor2: valor1 }; // Devolver un nuevo objeto con valores intercambiados
74+
}
75+
76+
// Ejemplos
77+
const valorA: number = 3;
78+
const valorB: number = 7;
79+
80+
const [nuevoValorA, nuevoValorB]: [number, number] = intercambiarValoresPorValor(valorA, valorB);
81+
console.log(valorA, valorB); // Salida: 3 7
82+
console.log(nuevoValorA, nuevoValorB); // Salida: 7 3
83+
84+
const valores: { valor1: number; valor2: number } = { valor1: 10, valor2: 5 };
85+
86+
const nuevosValores: { valor1: number; valor2: number } = intercambiarValoresPorReferencia(valores);
87+
console.log(valores.valor1, valores.valor2); // Salida: 10 5
88+
console.log(nuevosValores.valor1, nuevosValores.valor2); // Salida: 5 10
89+
90+
// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges

0 commit comments

Comments
 (0)