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