1
00:00:00,120 --> 00:00:00,690
Bienvenidos!

2
00:00:00,780 --> 00:00:07,890
Vamos a ver la diferencia entre pasar una variable por valor vía un método versus pasar por referencia

3
00:00:08,040 --> 00:00:12,870
bueno, para poner en contexto podríamos estar en el método Moine o en cualquiera, pero en nuestro

4
00:00:12,870 --> 00:00:13,740
caso en el método Meine.

5
00:00:13,900 --> 00:00:19,920
Y vamos a tener otro método, por ejemplo, test y vemos pasar una variable por argumento, por parámetro.

6
00:00:20,020 --> 00:00:25,710
En el otro método, en el método test y el método test va a modificar el valor de esta variable al modificar

7
00:00:25,710 --> 00:00:28,440
el valor en test como se pasa por valor.

8
00:00:28,590 --> 00:00:33,540
No debería de afectar ni cambiar el valor que tenía en el método principal en el método.

9
00:00:33,820 --> 00:00:38,880
Bueno, y después vamos a ver la diferencia entre pasar por referencia, porque cuando pasamos por referencia

10
00:00:38,940 --> 00:00:45,150
un objeto, cuando se cambia algún valor, algún atributo de este objeto, éste también cambia y mantiene

11
00:00:45,160 --> 00:00:46,980
ese mismo estado en el método principal.

12
00:00:47,040 --> 00:00:53,160
Por lo tanto, si el método test modifica un objeto de referencia, también se ve afectado en el método

13
00:00:53,160 --> 00:00:57,240
principal, porque de referencia es un objeto apunta al mismo puntero.

14
00:00:57,330 --> 00:00:59,790
En la memoria se refiere a la misma instancia.

15
00:00:59,910 --> 00:01:04,590
Mientras cuando el valor no solamente cambia un valor en una parte, pero no tiene por qué afectar en

16
00:01:04,620 --> 00:01:06,480
la otra parte, en el método principal.

17
00:01:06,650 --> 00:01:08,400
Pero lo mejor es ver el ejemplo.

18
00:01:08,670 --> 00:01:09,660
Entonces vamos a cerrar.

19
00:01:13,360 --> 00:01:15,200
Y vamos a crear una nueva clase.

20
00:01:16,810 --> 00:01:17,860
Pasar por valor.

21
00:01:25,230 --> 00:01:31,120
Vamos a tener una variable del tipo integer primitiva por ejemplo y igual a 10.

22
00:01:32,200 --> 00:01:37,870
Entonces, para poner en contexto toda variable primitiva siempre, siempre se pasa por valor y no por

23
00:01:37,870 --> 00:01:40,250
referencia, porque no es un objeto, es un primitivo.

24
00:01:40,350 --> 00:01:45,650
Entonces, cuando se pasa esta variable a otro método por argumento, se pasa por valor.

25
00:01:45,720 --> 00:01:52,260
Por lo tanto, si este otro método cambia este valor da lo mismo porque en el método se mantiene intacto

26
00:01:52,500 --> 00:01:53,430
el valor original.

27
00:01:53,530 --> 00:02:00,090
Bueno, veamos, vamos a imprimir, por ejemplo, y voy a cambiar el texto.

28
00:02:00,330 --> 00:02:01,340
Iniciamos el Moine

29
00:02:06,370 --> 00:02:10,650
con y igual a este valor y la idea es tener otro método.

30
00:02:10,770 --> 00:02:11,760
Entonces lo vamos a crear.

31
00:02:11,850 --> 00:02:18,120
Bueno, por ahora no se preocupen, después vamos a entrar mucho más en detalle a lo que método y a

32
00:02:18,120 --> 00:02:18,900
todo lo que clase.

33
00:02:19,080 --> 00:02:24,910
Por ahora solamente lo vamos a utilizar para ver esta diferencia entre pasar por valor y pasar por referencia.

34
00:02:24,990 --> 00:02:30,090
Bueno, siempre dentro un método, porque siempre se pasan datos de un objeto a otro mediante métodos.

35
00:02:30,180 --> 00:02:34,380
Entonces necesitamos implementar este método públic.

36
00:02:34,450 --> 00:02:37,850
Static boy test.

37
00:02:38,480 --> 00:02:40,210
Bueno, públic, un método público.

38
00:02:40,380 --> 00:02:42,660
Recuerden, después vamos a ver más detalles sobre esto.

39
00:02:42,700 --> 00:02:44,550
Es Tatic, es un método estático.

40
00:02:44,610 --> 00:02:49,560
Por lo tanto, se puede invocar sin necesidad de crear el objeto, simplemente usando el nombre de la

41
00:02:49,560 --> 00:02:53,490
clase o de forma directa si estamos en otro método estático como el main.

42
00:02:53,610 --> 00:02:58,450
Por tanto, el main puede invocar este método sin ningún problema, ya que ambos son estatico y veidt

43
00:02:58,590 --> 00:03:05,220
no devuelve ningún valor, no retorna nada y tenemos que pasar por valor el parámetro del tipo entero

44
00:03:05,220 --> 00:03:05,820
primitivo.

45
00:03:06,750 --> 00:03:14,040
Indicamos el tipo, el nombre de esta variable y aunque puede ser cualquiera, vamos a imprimir.

46
00:03:14,760 --> 00:03:16,290
Iniciamos el método test

47
00:03:19,990 --> 00:03:32,070
con Bueno y sería el argumento que estamos recibiendo por parametro esta área Laka Y igual bien si se

48
00:03:32,070 --> 00:03:36,780
fijan todavía no hemos hecho nada, simplemente vale 10 y acá se va a imprimir.

49
00:03:37,040 --> 00:03:42,760
En primer solamente iniciamos el método meiko, ni inició un método maiko ni ahora vamos a invocar en

50
00:03:42,810 --> 00:03:43,590
el método Main.

51
00:03:43,740 --> 00:03:49,760
El método test se fija en test y por argumento pasamos la variable.

52
00:03:50,280 --> 00:03:51,030
Eso sería todo.

53
00:03:51,660 --> 00:03:58,290
Ahora, con esto, si vuelvo a ejecutar va a imprimir esto porque se llama este método se invoca.

54
00:03:58,890 --> 00:04:05,230
Entonces me tomé, invoca o envía un mensaje al método test y ahora iniciamos métodos test con igual

55
00:04:05,240 --> 00:04:05,570
10.

56
00:04:06,000 --> 00:04:10,840
Ahora vamos a cambiar el valor de Y Vale, por ejemplo, 35.

57
00:04:11,930 --> 00:04:13,380
Entonces acá voy a imprimir.

58
00:04:15,270 --> 00:04:18,160
El nuevo valor de acá finaliza

59
00:04:23,290 --> 00:04:25,200
con y o con el noveno.

60
00:04:25,860 --> 00:04:30,340
Pero bueno, acá va a imprimir 10 y 35 y está correcto porque lo modificó.

61
00:04:34,210 --> 00:04:34,960
35.

62
00:04:35,450 --> 00:04:40,460
Bueno, entonces después después del test vamos a imprimir acá.

63
00:04:41,080 --> 00:04:43,140
Entonces finaliza el método Main.

64
00:04:49,850 --> 00:04:57,900
Con el valor de igual a tanto supuestamente test Modificã pasa por parametro por argumento de método

65
00:04:57,900 --> 00:04:59,100
test 10.

66
00:04:59,830 --> 00:05:06,880
Y acá se modifica, casi se fijan 10 y después cambio 35 y acá bueno.

67
00:05:08,180 --> 00:05:12,710
Se vuelve primer 10, pero recuerden, acá se pasa el valor y no una referencia, un objeto.

68
00:05:12,920 --> 00:05:18,950
Por lo tanto se mantiene intacto, debería mostrar a caddies y no 35, a pesar de que acá en el otro

69
00:05:18,950 --> 00:05:19,850
método se cambió.

70
00:05:23,580 --> 00:05:31,750
Se fijan, se mantienen 10 y no 35 y eso se debe a que un primitivo se pasa el valor y no el objeto

71
00:05:31,750 --> 00:05:33,460
en sí, no la referencia a este objeto.

72
00:05:33,730 --> 00:05:37,510
Entonces finaliza el método mé con el valor dei y se mantiene igual,

73
00:05:41,620 --> 00:05:42,280
no cambia.

74
00:05:42,490 --> 00:05:50,200
Ahora bien, me podrían decir o podríamos pensar si cambiamos el tipo integer de referencia con igual

75
00:05:50,200 --> 00:05:57,220
10 y acá integer de que pasamos un objeto o una referencia y cambiamos acá también debería cambiar.

76
00:05:57,220 --> 00:05:59,560
Acá debería afectar, pero tampoco.

77
00:06:01,750 --> 00:06:05,140
Sigue siendo 10, se mantiene igual a pesar de que el de referencia.

78
00:06:05,230 --> 00:06:06,040
Bueno, entonces cómo?

79
00:06:06,100 --> 00:06:10,900
Por qué si pasamos por valor y también pasamos por referencia, no cambia en ninguno de los casos.

80
00:06:11,620 --> 00:06:17,110
Se debe a que Integer, la clase Integer y también la clase streeck y la clase doble.

81
00:06:17,350 --> 00:06:22,060
La clase float y todas esas clases rapper que representan a lo primitivo son inmutables.

82
00:06:22,150 --> 00:06:27,760
Por lo tanto, cada vez que se modifica el valor, en este caso se retorna una nueva instancia, y eso

83
00:06:27,760 --> 00:06:28,300
lo vimos.

84
00:06:28,420 --> 00:06:33,520
No mantiene la instancia anterior siempre e inmutable, retorna una instancia.

85
00:06:33,580 --> 00:06:39,400
Por lo tanto, si estamos pasando por referencia y no por valor, pero al modificar el objeto ya no

86
00:06:39,400 --> 00:06:44,860
es el objeto original que tiene acá es otra instancia y esta es la que cambia, pero la anterior se

87
00:06:44,860 --> 00:06:46,450
mantiene igual, es inmutable.

88
00:06:46,540 --> 00:06:49,170
Son objetos especiales de aullaba que no se modifica.

89
00:06:49,170 --> 00:06:52,120
La instase original se mantiene intacta, por eso acá no cambia.

90
00:06:53,020 --> 00:06:58,270
Ahora, si usamos otro tipo de instancia, otro tipo de clase, por ejemplo, una clase propia nuestra,

91
00:06:58,360 --> 00:07:03,250
hay por supuesto que se va a pasar por referencia, pero también si cambiamos, saca algún valor.

92
00:07:03,340 --> 00:07:09,610
Algún atributo de este objeto también va a afectar al método, porque por lo general no son inmutables

93
00:07:09,790 --> 00:07:10,840
ciertos objetos.

94
00:07:10,850 --> 00:07:16,840
Ciertas clases de Yaiba son inmutables y bueno, a medida que avancemos en el curso los vamos a ir viendo.

95
00:07:17,020 --> 00:07:22,310
Por ejemplo, ya hemos visto alguna Electric Integer, cualquier clase del tipo Amber.

96
00:07:22,450 --> 00:07:28,330
Como había explicado el chord, el bit, el long, los decimales float dobles son inmutables.

97
00:07:28,360 --> 00:07:32,120
Por lo tanto, que se cambie el valor de esta forma o con el nombre.

98
00:07:32,140 --> 00:07:37,290
La clase Integer punto valido of siempre retorna unas 90.

99
00:07:37,570 --> 00:07:39,370
Por lo tanto, cambia, cambia la referencia.

100
00:07:39,490 --> 00:07:45,430
Agha cambia a otro objeto, pero otro objeto original se mantiene intacto en 10 la próxima clase.

101
00:07:45,430 --> 00:07:52,330
Vamos a ver un ejemplo de pasar por referencia, pero que no sea inmutable, que sea mutable y que finalmente

102
00:07:52,420 --> 00:07:53,020
afecte.

103
00:07:53,170 --> 00:07:55,090
Es decir, si se cambia, se modifica el objeto.

104
00:07:55,180 --> 00:07:57,780
En el método test también se modifica en el método.

105
00:07:58,120 --> 00:08:00,040
Pero bien lo dejamos en la siguiente clase.

106
00:08:00,310 --> 00:08:01,000
Nos vemos.
