Skip to content

Commit 2e06424

Browse files
authored
Merge pull request #8689 from bluefeatherdev/reto-05-dart
#5 - Dart
2 parents 0ef77cc + a3e2761 commit 2e06424

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
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+
void main() {
19+
/// [Asignaciones por valor]:
20+
/// int, bool, String y enum
21+
int a = 10;
22+
int b = a; // Copia el valor
23+
24+
b = 20;
25+
print('a: $a'); // 10
26+
print('b: $b'); // 20
27+
28+
double c = 3.14159265;
29+
double d = c; // Copia el valor
30+
31+
d = 1.61803399;
32+
print('c: $c'); // 3.14159265
33+
print('d: $d'); // 1.61803399
34+
35+
String e = 'Hello';
36+
String f = e; // Copia el valor
37+
38+
f = 'Dart!';
39+
print('e: $e'); // Hello
40+
print('f: $f'); // Dart
41+
42+
EnumColor color1 = EnumColor.blue;
43+
EnumColor color2 = color1; // Copia el valor
44+
45+
color2 = EnumColor.green;
46+
print('color1: ${color1.name}'); // blue
47+
print('color2: ${color2.name}'); // green
48+
49+
/// [Asignaciones por referencia]:
50+
/// List, Set, Map y clases personalizadas
51+
List<String> list1 = ['A', 'B', 'C'];
52+
List<String> list2 = list1; // Copia la referencia
53+
54+
list2.add('D');
55+
print('list1: $list1'); // [A, B, C, D]
56+
print('list2: $list2'); // [A, B, C, D]
57+
58+
Set<int> set1 = {1, 2, 3};
59+
Set<int> set2 = set1; // Copia la referencia
60+
61+
set2.add(4);
62+
print('set1: $set1'); // {1, 2, 3, 4}
63+
print('set2: $set2'); // {1, 2, 3, 4}
64+
65+
Map<int, bool> map1 = {0:true, 1:false, 2:true};
66+
Map<int, bool> map2 = map1; // Copia la referencia
67+
68+
map2[3] = false;
69+
print('map1: $map1'); // {0: true, 1: false, 2: true, 3: false}
70+
print('map2: $map2'); // {0: true, 1: false, 2: true, 3: false}
71+
72+
Person p1 = Person('Ana');
73+
Person p2 = p1; // Copia la referencia
74+
75+
p2.name = 'Elie';
76+
print('p1: ${p1.name}'); // Elie
77+
print('p2: ${p2.name}'); // Elie
78+
79+
/// [Función con parámetros por valor]:
80+
void addTwo(int x) {
81+
x = x + 2; /// `x` copia valor de `myInt`
82+
print(x); /// cambiar `x` no altera a `myInt`
83+
}
84+
85+
int myInt = 23;
86+
addTwo(myInt); // 25
87+
print(myInt); // 23
88+
89+
/// [Función con parámetros por referencia]:
90+
void newKey(Map map) {
91+
map['c'] = 3; /// cambiar `map` altera `myMap`
92+
93+
Map otherMap = map; /// `otherMap` copia referencia de `map`
94+
otherMap['d'] = 4; /// cambiar `otherMap` altera `map`
95+
96+
print(map);
97+
}
98+
99+
Map myMap = {
100+
'a': 1,
101+
'b': 2,
102+
};
103+
newKey(myMap); // {a: 1, b: 2, c: 3, d: 4}
104+
print(myMap); // {a: 1, b: 2, c: 3, d: 4}
105+
106+
/// [DIFICULTAD EXTRA]:
107+
int int1 = 15;
108+
int int2 = 23;
109+
int int3;
110+
int int4;
111+
(int3, int4) = byValue(int1, int2); /// por [valor]
112+
print('int1: $int1, int2: $int2'); // 15, 23
113+
print('int3: $int3, int4: $int4'); // 23, 15
114+
115+
Set mySet1 = {1, 2, 3};
116+
Set mySet2 = {4, 5, 6};
117+
Set mySet3;
118+
Set mySet4;
119+
(mySet3, mySet4) = byReference(mySet1, mySet2); /// por [referencia]
120+
print('mySet1: $mySet1, mySet2: $mySet2'); // {1, 2, 3}, {4, 5, 6}
121+
print('mySet3: $mySet3, mySet4: $mySet4'); // {4, 5, 6}, {1, 2, 3}
122+
}
123+
124+
/// [Asignaciones por valor]:
125+
/// Ejemplo de enums
126+
enum EnumColor { red, green, blue }
127+
128+
/// [Asignaciones por referencia]:
129+
/// Ejemplo de clases personalizadas
130+
class Person {
131+
String name;
132+
Person(this.name);
133+
}
134+
135+
/// [DIFICULTAD EXTRA]:
136+
(int, int) byValue(int var1, int var2) {
137+
int temp = var1;
138+
var1 = var2;
139+
var2 = temp;
140+
return (var1, var2);
141+
}
142+
143+
(Set, Set) byReference(Set var1, Set var2) {
144+
Set temp = var1;
145+
var1 = var2;
146+
var2 = temp;
147+
return (var1, var2);
148+
}

0 commit comments

Comments
 (0)