1 00:00:02,160 --> 00:00:07,740 voy a grabar esta clase por lo tanto si habláis o decís algo me autorizáis a grabar vuestra voz 2 00:00:07,740 --> 00:00:15,839 vamos a empezar aquí nosotros hace tiempo en episodios anteriores habíamos empezado a ver 3 00:00:15,839 --> 00:00:23,460 cómo podremos controlar el flujo de ejecución de un programa vale los primeros ejercicios cuando 4 00:00:23,460 --> 00:00:30,879 éramos niños en septiembre os acordáis que hacíamos eran un paso tras otro de imprime 5 00:00:30,879 --> 00:00:34,759 esto en pantalla, haz 3 más 7, ahora imprime 3 más 7 6 00:00:34,759 --> 00:00:38,859 en pantalla, y era siempre así. Luego hemos crecido en el mundo del Java 7 00:00:38,859 --> 00:00:43,200 y de la programación, y hemos empezado a ver cosas que pueden alterar 8 00:00:43,200 --> 00:00:47,119 la secuencialidad de la ejecución de las instrucciones 9 00:00:47,119 --> 00:00:50,740 es decir, el if, por ejemplo, que me dice, oye mira, este bloque 10 00:00:50,740 --> 00:00:54,840 lo ejecutas si y solo si una condición es verdadera, si no 11 00:00:54,840 --> 00:00:58,700 te lo saltas, y el while, que es decir, que cuando entras en un while, este 12 00:00:58,700 --> 00:01:03,880 bloque lo puedes repetir una diez millón de veces no lo sabemos vale y el for 13 00:01:03,880 --> 00:01:08,120 también que sirve para otros casos pero más o menos es parecido entonces todas 14 00:01:08,120 --> 00:01:14,060 estas cosas alteran el normal flujo de programación que es secuencial una 15 00:01:14,060 --> 00:01:21,200 instrucción traslado el último la última forma entre comillas para 16 00:01:21,200 --> 00:01:26,359 alterar el flujo de información es la llamada 17 00:01:26,359 --> 00:01:28,319 funciones o la llamada procedimientos 18 00:01:28,319 --> 00:01:32,379 esto es 19 00:01:32,379 --> 00:01:34,019 sustancialmente, y lo hemos hecho 20 00:01:34,019 --> 00:01:36,000 un ejemplo el otro día 21 00:01:36,000 --> 00:01:38,340 aquí en un ejercicio 22 00:01:38,340 --> 00:01:39,680 saqué fuera 23 00:01:39,680 --> 00:01:42,780 es pillar un trozo de código 24 00:01:42,780 --> 00:01:44,579 sacarlo fuera 25 00:01:44,579 --> 00:01:46,299 del main y llamarlo 26 00:01:46,299 --> 00:01:47,040 de algún modo 27 00:01:47,040 --> 00:01:50,459 es como una variable 28 00:01:50,459 --> 00:01:52,239 en un cierto sentido 29 00:01:52,239 --> 00:01:54,359 es dar un nombre a un trozo 30 00:01:54,359 --> 00:01:58,540 de memoria para que yo cuando quiera acceder a ese trozo de memoria pueda usar ese nombre 31 00:01:58,540 --> 00:02:02,219 crear un método o una función en un cierto sentido 32 00:02:02,219 --> 00:02:06,599 es como dar un nombre a un bloque de texto, a una secuencia 33 00:02:06,599 --> 00:02:10,360 de instrucciones y decir que cada vez que quiero hacer esa secuencia 34 00:02:10,360 --> 00:02:14,460 de instrucciones, pues lo que hago es llamar ese nombre 35 00:02:14,460 --> 00:02:18,360 entonces, una forma 36 00:02:18,360 --> 00:02:21,979 sencilla de utilizar las funciones o procedimientos es 37 00:02:21,979 --> 00:02:33,050 Pues imaginaos un código como este de aquí, donde yo voy a calcular lados, áreas de un rectángulo y perímetros de un rectángulo. 38 00:02:33,469 --> 00:02:42,110 Entonces aquí voy a calcular el perímetro de un rectángulo que es 3 por 4, por lo tanto tengo este código. 39 00:02:42,610 --> 00:02:50,409 El lado 1 vale 3, el lado 2 vale 4, el área del rectángulo es lado 1 por lado 2, el perímetro del rectángulo es lado 1 por 2 más lado 2 por 2. 40 00:02:50,409 --> 00:02:53,110 Vale, fenomenal. Y escribo el rectángulo es este de aquí. 41 00:02:53,110 --> 00:02:56,009 Ahora quiero cambiar de rectángulo y hacerlo otra vez 42 00:02:56,009 --> 00:02:59,810 Pues tengo que pillar todo este código y volver a repetirlo 43 00:02:59,810 --> 00:03:03,870 Cambiando que esta vez es 5 y 10 y luego hacer la suma 44 00:03:03,870 --> 00:03:09,009 Ahora lo hago otra vez, pues con 2 y 7 y hago lo mismo 45 00:03:09,009 --> 00:03:13,949 Imaginaos que por alguna razón del multiverso me haya equivocado 46 00:03:13,949 --> 00:03:17,469 Y que esta fórmula aquí esté equivocada 47 00:03:17,469 --> 00:03:19,310 Como esto lo he hecho tres veces 48 00:03:19,310 --> 00:03:25,789 tendré que ir a buscar las veces que he hecho esta operación, modificarla en cada una 49 00:03:25,789 --> 00:03:29,650 y poner la nueva fórmula, una fórmula más eficiente o lo que sea 50 00:03:29,650 --> 00:03:37,770 esto suele ser feo, cuando en un programa se repite mucho un mismo código 51 00:03:37,770 --> 00:03:40,530 a lo mejor con parámetros distintos, esto no lo niego 52 00:03:40,530 --> 00:03:43,590 pero que al fin y al cabo el procedimiento que se está haciendo 53 00:03:43,590 --> 00:03:46,849 la secuencia de instrucciones que se está haciendo, las operaciones que se están haciendo 54 00:03:46,849 --> 00:03:50,789 son siempre las mismas, no compensa escribirlo varias veces 55 00:03:50,789 --> 00:03:55,030 ¿vale? por cuestión que el código aumenta 56 00:03:55,030 --> 00:03:58,750 en tamaño, por cuestión en que si encuentro una forma mejor de hacerla 57 00:03:58,750 --> 00:04:03,090 la tengo que cambiar en varios sitios, por cuestión que si tengo un error o descubro 58 00:04:03,090 --> 00:04:06,729 un problema de seguridad en ese código, tengo que ir a buscar 59 00:04:06,729 --> 00:04:11,069 en todo mi sistema donde he usado 60 00:04:11,069 --> 00:04:14,009 esas operaciones y volver a cambiarlas 61 00:04:14,009 --> 00:04:25,389 Entonces lo que se suele hacer es crear un método externo, una función externa 62 00:04:25,389 --> 00:04:27,529 Este aquí es un procedimiento en concreto 63 00:04:27,529 --> 00:04:32,750 A la que se le da un nombre, por ejemplo calcular área perímetro 64 00:04:32,750 --> 00:04:37,209 Al que se le da unos parámetros, ahora veremos bien que son estas cosas aquí 65 00:04:37,209 --> 00:04:41,970 Y aquí dentro es donde pongo el código que antes estaba repetido 66 00:04:41,970 --> 00:04:44,930 Entonces, lo que he hecho aquí 67 00:04:44,930 --> 00:04:47,750 Fijaos que esta de aquí es un hermano del main 68 00:04:47,750 --> 00:04:53,569 O sea que esta llave aquí está cerrando el método main 69 00:04:53,569 --> 00:04:58,670 Y como hermano del main, como al mismo nivel del main 70 00:04:58,670 --> 00:05:01,470 Siempre dentro la declaración de public class 71 00:05:01,470 --> 00:05:02,790 Pero fuera del main 72 00:05:02,790 --> 00:05:05,009 Declaro un nuevo método 73 00:05:05,009 --> 00:05:06,110 ¿Cómo se declara un método? 74 00:05:06,569 --> 00:05:09,670 Public, por ahora vamos a public y luego esto lo veremos en un futuro 75 00:05:09,670 --> 00:05:11,670 Static, ¿qué es esto? 76 00:05:11,970 --> 00:05:25,430 Pues es lo que nos permite hacer funciones y procedimientos como si fuéramos en un mundo de programación estructurada 77 00:05:25,430 --> 00:05:31,750 Es lo que nos permite olvidarnos que en realidad deberíamos trabajar con objetos 78 00:05:31,750 --> 00:05:37,149 Si yo excluyo el static, estoy en el mundo de los objetos 79 00:05:37,149 --> 00:05:39,949 Con el static es una forma 80 00:05:39,949 --> 00:05:42,410 Fea 81 00:05:42,410 --> 00:05:44,329 Y poco elegante 82 00:05:44,329 --> 00:05:45,649 De olvidarme que 83 00:05:45,649 --> 00:05:47,410 Hay objetos de por medio 84 00:05:47,410 --> 00:05:49,709 Como por ahora objetos no los sabemos 85 00:05:49,709 --> 00:05:51,529 Pues entonces ponemos static 86 00:05:51,529 --> 00:05:53,269 Y nos olvidamos que lo hemos puesto aquí 87 00:05:53,269 --> 00:05:55,790 Fijaos que también vuestro método main 88 00:05:55,790 --> 00:05:57,730 Estático y esto será siempre así 89 00:05:57,730 --> 00:05:59,589 No cambiará nunca, el punto de acceso 90 00:05:59,589 --> 00:06:01,029 De mi programa siempre será static 91 00:06:01,029 --> 00:06:03,329 Pero este de aquí también 92 00:06:03,329 --> 00:06:05,550 Tiene que ser static, el por qué tiene que ser 93 00:06:05,550 --> 00:06:07,470 static lo entenderemos cuando veremos los 94 00:06:07,470 --> 00:06:09,490 objetos y cuando luego veremos los 95 00:06:09,490 --> 00:06:11,290 objetos empezaremos a trabajar sobre 96 00:06:11,290 --> 00:06:12,829 cuando pongo static y cuando no 97 00:06:12,829 --> 00:06:14,649 ¿vale? por ahora siempre 98 00:06:14,649 --> 00:06:16,649 esto 99 00:06:16,649 --> 00:06:19,430 en 10 minutos entenderemos que es 100 00:06:19,430 --> 00:06:21,529 este void, este es el 101 00:06:21,529 --> 00:06:23,430 nombre que doy a 102 00:06:23,430 --> 00:06:24,870 este trozo de código por aquí 103 00:06:24,870 --> 00:06:27,209 y luego a continuación 104 00:06:27,209 --> 00:06:29,410 digo que este código trabajará 105 00:06:29,410 --> 00:06:30,750 con una serie de parámetros 106 00:06:30,750 --> 00:06:33,370 ¿vale? aquí dentro habrá dos 107 00:06:33,370 --> 00:06:35,389 variables que desde el primer momento 108 00:06:35,389 --> 00:06:50,670 hasta si no la estoy declarando, existirán, porque cuando alguien va a utilizar este código, lo que hará es asignar a este lado 1 y a este lado 2 unos valores concretos 109 00:06:50,670 --> 00:07:00,769 y entonces para mí aquí dentro, lado 1 y lado 2, valdrán algo. Fijaos que aquí no los he todavía instanciados, pero cuando luego usaré esta función, 110 00:07:00,769 --> 00:07:03,709 Cuando llamaré esta función, este procedimiento 111 00:07:03,709 --> 00:07:09,129 Pues estos ya estarán inicializados a algún valor concreto 112 00:07:09,129 --> 00:07:10,269 Y ahora veremos cómo, ¿vale? 113 00:07:10,689 --> 00:07:14,370 Entonces, lo que yo sé es que independientemente que tú me des lado 1 y lado 2 114 00:07:14,370 --> 00:07:15,930 Sean lo que sean los valores 115 00:07:15,930 --> 00:07:19,209 Sé que el área será lado 1 por lado 2 116 00:07:19,209 --> 00:07:22,589 Que el perímetro será lado 1 por 2 más lado 2 por 2 117 00:07:22,589 --> 00:07:26,170 Y que luego tendrás que imprimir en pantalla el resultado 118 00:07:26,170 --> 00:07:28,069 Que era el mismo que antes 119 00:07:28,069 --> 00:07:30,189 El área de rectángulo, el perímetro de rectángulo 120 00:07:30,189 --> 00:07:32,269 y los lados que se utilizan, ¿vale? 121 00:07:32,509 --> 00:07:35,089 Ahora, esto es la declaración del método. 122 00:07:35,230 --> 00:07:37,089 ¿Qué hace el método? La implementación, ¿vale? 123 00:07:37,410 --> 00:07:40,569 Declaración del método, implementación del método. 124 00:07:40,829 --> 00:07:41,730 Lo que hace este método. 125 00:07:42,910 --> 00:07:43,970 ¿Cómo lo llamo? 126 00:07:44,730 --> 00:07:46,629 Pues desde el main, por ejemplo, 127 00:07:47,269 --> 00:07:50,009 puedo hacer referencia a calcular área y perímetro 128 00:07:50,009 --> 00:07:52,029 y pasarle aquí dos valores. 129 00:07:52,209 --> 00:07:53,110 ¿Por qué le paso dos valores? 130 00:07:53,470 --> 00:07:56,370 Porque calcular área y perímetro requiere dos int. 131 00:07:57,129 --> 00:07:58,389 Como he puesto int e int, 132 00:07:58,389 --> 00:08:02,370 Pues aquí se llamará poniéndole un valor int y otro valor int 133 00:08:02,370 --> 00:08:04,569 Esto será la asociación 134 00:08:04,569 --> 00:08:07,189 O sea, en esta llamada de este método 135 00:08:07,189 --> 00:08:10,930 Lado 1 valdrá 3 y lado 2 valdrá 4 136 00:08:10,930 --> 00:08:15,209 Entonces yo haré todas estas operaciones pensando en 3 y 4 137 00:08:15,209 --> 00:08:16,009 3 y 4 138 00:08:16,009 --> 00:08:19,290 La segunda vez que lo llamo 139 00:08:19,290 --> 00:08:21,990 Lo estoy llamando con parámetros distintos 140 00:08:21,990 --> 00:08:24,129 Esta vez es 5 y 10 141 00:08:24,129 --> 00:08:26,709 Por lo tanto, ahora haré una asociación 142 00:08:26,709 --> 00:08:29,629 Entre que el lado 1 vale 5 y el lado 2 vale 10 143 00:08:29,629 --> 00:08:31,949 Y aquí utilizaré 5 y 10 144 00:08:31,949 --> 00:08:34,570 ¿Se entiende? 145 00:08:35,190 --> 00:08:38,370 Entonces, esto es el mismo ejercicio 146 00:08:38,370 --> 00:08:43,929 Esto es el mismo 147 00:08:43,929 --> 00:08:52,649 Funciones, procedimientos, procedimientos 148 00:08:52,649 --> 00:08:57,049 Es el mismo código que tenía antes 149 00:08:57,049 --> 00:08:58,250 Es lo mismo, hace lo mismo 150 00:08:58,250 --> 00:09:03,610 Escribirá los datos y los cálculos de estos tres rectángulos 151 00:09:03,610 --> 00:09:07,269 Solo que en vez de tener un main donde se repite mucho 152 00:09:07,269 --> 00:09:10,649 Que es largo, no sé cuántas líneas de código y cosas por el estilo 153 00:09:10,649 --> 00:09:14,509 He organizado mejor el código 154 00:09:14,509 --> 00:09:17,070 Ahora mi main son tres líneas de código 155 00:09:17,070 --> 00:09:18,649 Se entiende mejor 156 00:09:18,649 --> 00:09:22,549 Si he utilizado nombres que tienen sentido 157 00:09:22,549 --> 00:09:24,169 Se entiende que se está haciendo 158 00:09:24,169 --> 00:09:25,809 Y es como una abstracción 159 00:09:25,809 --> 00:09:27,730 Y aquí te estoy diciendo, calcular el perímetro 160 00:09:27,730 --> 00:09:29,929 Tú no sabes cómo se hace esto 161 00:09:29,929 --> 00:09:31,330 Pero sabes lo que hace 162 00:09:31,330 --> 00:09:34,990 Aquí se calculará el área, el perímetro 163 00:09:34,990 --> 00:09:36,269 De estos dos 164 00:09:36,269 --> 00:09:37,549 ¿Se entiende? 165 00:09:39,549 --> 00:09:41,350 Esto me permite que si mañana 166 00:09:41,350 --> 00:09:43,230 Encuentro una forma más eficiente de hacerla 167 00:09:43,230 --> 00:09:44,529 La tengo que cambiar aquí 168 00:09:44,529 --> 00:09:46,750 Y en automático se ha cambiado 169 00:09:46,750 --> 00:09:47,929 En todas las veces que he llamado 170 00:09:47,929 --> 00:09:50,629 Esto me permite que si aquí había un error 171 00:09:50,629 --> 00:09:53,230 Lo corrijo aquí y se ha corregido en todo mi programa 172 00:09:53,230 --> 00:09:55,289 Esto me permite que mañana 173 00:09:55,289 --> 00:09:56,309 Yo diga a ellos 174 00:09:56,309 --> 00:09:58,029 Mirad, en vuestro trabajo 175 00:09:58,029 --> 00:09:59,529 Que tenéis que hacer el main 176 00:09:59,529 --> 00:10:03,669 podéis utilizar este método, ¿vale? que funcionará 177 00:10:03,669 --> 00:10:07,610 correctamente y a otro equipo de trabajo decir, mira, vosotros tendréis 178 00:10:07,610 --> 00:10:11,470 que desarrollar un método que se llama así, que recibe 179 00:10:11,470 --> 00:10:15,490 estos parámetros y que tiene que dar como resultado esta cosa de aquí 180 00:10:15,490 --> 00:10:18,990 y yo estoy trabajando, ellos que están haciendo 181 00:10:18,990 --> 00:10:23,429 un programa, un sistema que trabaja de geometría en general y voy 182 00:10:23,429 --> 00:10:27,470 dando a vosotros todos los métodos para rectángulo 183 00:10:27,470 --> 00:10:29,289 A vosotros los métodos para el círculo 184 00:10:29,289 --> 00:10:30,870 A vosotros los métodos para el triángulo 185 00:10:30,870 --> 00:10:33,889 Y estoy paralelizando el desarrollo de este sistema 186 00:10:33,889 --> 00:10:44,580 Entonces, ¿qué es un procedimiento? 187 00:10:45,159 --> 00:10:47,379 Un procedimiento es un conjunto de instrucciones 188 00:10:47,379 --> 00:10:49,240 Que cumple una determinada tarea 189 00:10:49,240 --> 00:10:51,500 Esta tarea puede depender de algunos valores 190 00:10:51,500 --> 00:10:53,379 Que se llaman parámetros o no 191 00:10:53,379 --> 00:10:56,519 Por ejemplo, calcular área 192 00:10:56,519 --> 00:10:59,820 Para calcular el área necesito un lado y otro lado 193 00:10:59,820 --> 00:11:01,659 Pues paso los dos lados 194 00:11:01,659 --> 00:11:03,679 Y esto de aquí hará algo 195 00:11:03,679 --> 00:11:06,539 Pero podría ser un método que es saluda 196 00:11:06,539 --> 00:11:07,799 Sin ningún parámetro 197 00:11:07,799 --> 00:11:10,080 Y esto te dirá hola 198 00:11:10,080 --> 00:11:12,700 O saluda con un nombre 199 00:11:12,700 --> 00:11:15,320 Entonces me han pasado como parámetro un nombre 200 00:11:15,320 --> 00:11:17,879 Y el nombre se tendrá dentro Estefano 201 00:11:17,879 --> 00:11:19,360 Y eso dirá hola Estefano 202 00:11:19,360 --> 00:11:25,379 Nadie me dice cuantos parámetros tengo que poner 203 00:11:25,379 --> 00:11:27,080 Puedo poner los parámetros que me da la gana 204 00:11:27,080 --> 00:11:30,200 Pondré los parámetros necesarios y suficientes 205 00:11:30,200 --> 00:11:33,580 Para que este procedimiento haga lo que tiene que hacer 206 00:11:33,580 --> 00:11:36,120 Si es el cálculo de un cuadrado 207 00:11:36,120 --> 00:11:38,460 Pues a lo mejor con un lado solo me calcula el área 208 00:11:38,460 --> 00:11:39,159 Ningún problema 209 00:11:39,159 --> 00:11:42,600 Si en vez es un rectángulo necesitaré dos lados 210 00:11:42,600 --> 00:11:44,899 Si es un triángulo necesitaré base de altura, etc. 211 00:11:48,600 --> 00:11:54,100 Tened en cuenta que yo aquí he usado 5 y 10 o 3 y 4 212 00:11:54,100 --> 00:11:57,600 Nadie me prohíbe aquí en vez de 3 utilizar una variable 213 00:11:57,600 --> 00:12:00,620 Si aquí tengo int lado es igual a 7 214 00:12:00,620 --> 00:12:01,759 Y luego aquí uso lado 215 00:12:01,759 --> 00:12:03,460 Pues le estaré pasando 7 216 00:12:03,460 --> 00:12:04,600 O una expresión 217 00:12:04,600 --> 00:12:06,360 Aquí podría poner 3 por 7 218 00:12:06,360 --> 00:12:09,519 O podría poner todo lo que hemos usado hasta ahora 219 00:12:09,519 --> 00:12:11,600 Que luego se resuelva en un int 220 00:12:11,600 --> 00:12:13,419 Lo puedo poner aquí como parámetro 221 00:12:13,419 --> 00:12:15,700 Y luego será asociado con esta variable 222 00:12:15,700 --> 00:12:17,620 ¿Se entiende? 223 00:12:22,419 --> 00:12:22,720 Vale 224 00:12:22,720 --> 00:12:27,080 Entonces, ¿cómo se declara un procedimiento? 225 00:12:27,080 --> 00:12:47,080 Un procedimiento se declara con public static void, esto es importante, void que quiere decir vacío, que quiere decir nada, ¿vale? Lo que está haciendo, me está diciendo que este procedimiento hace cosas, pero no genera ningún valor final que me tiene que entregar. 226 00:12:47,080 --> 00:12:50,860 entregar. Y asumo que esto hará sus cosas 227 00:12:50,860 --> 00:12:54,700 y cuando acaban sus cosas vuelvo a quien lo ha llamado 228 00:12:54,700 --> 00:12:58,320 y allí me paro. No me espero que 229 00:12:58,320 --> 00:13:02,519 desde las operaciones que hace esto haya un valor final, 230 00:13:02,799 --> 00:13:06,899 un string final, un algo que me tiene 231 00:13:06,899 --> 00:13:10,159 que devolver como operación que ha hecho. 232 00:13:10,980 --> 00:13:15,220 No me espero que al final me diga, oye, este int es 7, toma el 7. 233 00:13:15,220 --> 00:13:36,000 O que cuando aquí lo he hecho, aquí este imprime directamente en pantalla el resultado. No me espero que esta string de aquí se me devuelva a quien ha llamado para decir, oye, mira, esto es lo que he hecho y he creado esta string. Toma esta string y ahora haz tú lo que quieras. Pues no, ¿vale? 234 00:13:36,000 --> 00:13:52,019 Cuando es un procedimiento, el procedimiento hace su tarea, hace lo que tiene que hacer y yo no me espero nada devuelto, no me espero que él lo que ha hecho me lo entregue, ¿sí? Es la diferencia entre procedimiento y función. 235 00:13:52,019 --> 00:14:02,580 Cuando veremos la función, yo me espero que la función al final de su tarea me devuelva algo, me dé algo, un entero, un booleano, un string o un array. 236 00:14:03,139 --> 00:14:07,659 Tú haz lo tuyo y al final has creado un producto y este producto me lo das a mí. 237 00:14:08,679 --> 00:14:14,100 Sin embargo, cuando es procedimiento, tú haces lo tuyo y yo no me espero de recibir nada desde ti. 238 00:14:14,899 --> 00:14:33,570 En un cierto sentido sí, podría no olvidarme, pero no me gusta. 239 00:14:33,570 --> 00:14:35,570 en el sentido que tú puedes hasta no olvidarlo 240 00:14:35,570 --> 00:14:37,950 tú puedes hacer operaciones y cambios 241 00:14:37,950 --> 00:14:39,950 que luego verás desde el main 242 00:14:39,950 --> 00:14:42,230 pero no te esperas 243 00:14:42,230 --> 00:14:43,929 que cuando tú haces calcular 244 00:14:43,929 --> 00:14:45,769 el perímetro, no esperas 245 00:14:45,769 --> 00:14:47,750 que esto lo tengas que guardar 246 00:14:47,750 --> 00:14:49,690 en alguna variable, porque esto no 247 00:14:49,690 --> 00:14:51,809 genera nada, no genera 248 00:14:51,809 --> 00:14:53,370 un int, no genera 249 00:14:53,370 --> 00:14:56,070 a lo mejor te escribe un int en otra variable 250 00:14:56,070 --> 00:14:58,009 a lo mejor en un futuro 251 00:14:58,009 --> 00:14:59,769 te pilla un objeto y te lo modifica 252 00:14:59,769 --> 00:15:01,789 entonces ese objeto luego lo puedes ver 253 00:15:01,789 --> 00:15:03,750 desde el main y verás las modificaciones 254 00:15:03,750 --> 00:15:06,009 que ha hecho, pero no te esperas 255 00:15:06,009 --> 00:15:07,870 que recibas algo a cambio 256 00:15:07,870 --> 00:15:09,590 o sea, yo podría hacer 257 00:15:09,590 --> 00:15:10,909 un cálculo área 258 00:15:10,909 --> 00:15:13,970 que calcule el área y la escriba en pantalla 259 00:15:13,970 --> 00:15:15,669 o podría hacer un cálculo área 260 00:15:15,669 --> 00:15:17,889 que cuando ha calculado el área 261 00:15:17,889 --> 00:15:19,409 me devuelva ese valor 262 00:15:19,409 --> 00:15:21,710 y que yo con ese valor haga lo que me dé la gana 263 00:15:21,710 --> 00:15:23,929 lo ponga en un array, lo escriba en pantalla 264 00:15:23,929 --> 00:15:25,429 lo sume con otra cosa 265 00:15:25,429 --> 00:15:27,450 pues cuando es un procedimiento 266 00:15:27,450 --> 00:15:29,350 ese valor no se me devuelve 267 00:15:29,350 --> 00:15:34,830 No me espero que este señor sea una expresión 268 00:15:34,830 --> 00:15:38,809 ¿Cuánto vale calcular el perímetro de 3 y 4? 269 00:15:38,990 --> 00:15:39,450 Nada 270 00:15:39,450 --> 00:15:41,289 Porque no es una expresión 271 00:15:41,289 --> 00:15:43,149 Es una operación 272 00:15:43,149 --> 00:15:44,590 Y cuando se ha acabado 273 00:15:44,590 --> 00:15:46,950 No devuelve nada 274 00:15:46,950 --> 00:15:47,950 Devuelve void 275 00:15:47,950 --> 00:15:50,149 Devuelve vacío 276 00:15:50,149 --> 00:15:51,570 No devuelve nada 277 00:15:51,570 --> 00:15:53,549 Sin embargo no funciona 278 00:15:53,549 --> 00:15:54,830 Ahora veremos devuelve algo 279 00:15:54,830 --> 00:15:57,929 Y volveremos a ver esto 280 00:15:57,929 --> 00:15:58,549 ¿Sí? 281 00:15:59,350 --> 00:16:05,929 Después de public static void pongo el nombre 282 00:16:05,929 --> 00:16:10,389 Nombres de métodos de funciones siempre empiezan por minúsculas 283 00:16:10,389 --> 00:16:12,049 Y luego se usa el estándar Java 284 00:16:12,049 --> 00:16:16,049 Si son varias palabras, cada palabra siguiente es en mayúsculas 285 00:16:16,049 --> 00:16:22,669 Y luego empiezo una lista de un tipo con su nombre 286 00:16:22,669 --> 00:16:27,610 Coma, tipo, con nombre, coma, tipo, con nombre, coma, tipo, con nombre 287 00:16:27,610 --> 00:16:49,580 Y estos serán los parámetros que se usan. Sería esto. Int lado 1, int lado 2. Esto pilla dos parámetros. El parámetro lado 1 que es un entero, el parámetro lado 2 que es otro entero. 288 00:16:49,580 --> 00:16:54,080 esto quiere decir que dentro del cuerpo de este método 289 00:16:54,080 --> 00:16:57,200 yo tendré mágicamente este lado 1 y el lado 2 290 00:16:57,200 --> 00:17:00,659 y los podré utilizar, lo puedo imprimir en pantalla, lo puedo sumar 291 00:17:00,659 --> 00:17:03,779 lo puedo multiplicar, puedo hacer lo que me da la gana con este lado 1 y el lado 2 292 00:17:03,779 --> 00:17:05,960 ¿cuánto valen? no lo sé 293 00:17:05,960 --> 00:17:09,960 no lo sabré hasta que me llamen 294 00:17:09,960 --> 00:17:12,220 cuando llamarán este procedimiento 295 00:17:12,220 --> 00:17:16,039 allí estarán forzados, como este procedimiento recibe dos int 296 00:17:16,039 --> 00:17:17,640 a poner dos int aquí 297 00:17:17,640 --> 00:17:21,640 Y estos dos ints harán operaciones llamadas bind 298 00:17:21,640 --> 00:17:25,799 Serán enlazados con lado 1 con 3 299 00:17:25,799 --> 00:17:28,339 Y lado 2 con 4 en esta llamada 300 00:17:28,339 --> 00:17:31,480 O lado 1 con 5 y lado 2 con 10 en esta llamada 301 00:17:31,480 --> 00:17:34,859 O sea que como esto es un bloque 302 00:17:34,859 --> 00:17:38,000 Estos lado 1 y lado 2 existen aquí 303 00:17:38,000 --> 00:17:40,359 Yo no puedo desde el main decir 304 00:17:40,359 --> 00:17:41,519 Y ahora imprímeme lado 1 305 00:17:41,519 --> 00:17:43,160 Porque aquí no existe lado 1 306 00:17:43,160 --> 00:17:52,299 esta es como se declara 307 00:17:52,299 --> 00:17:54,640 como se llama un método 308 00:17:54,640 --> 00:17:56,640 simplemente con su nombre 309 00:17:56,640 --> 00:17:58,099 abierta paréntesis 310 00:17:58,099 --> 00:18:00,460 y un valor que tiene que ser 311 00:18:00,460 --> 00:18:01,319 del tipo 1 312 00:18:01,319 --> 00:18:04,960 coma un valor que tiene que ser del tipo 2 313 00:18:04,960 --> 00:18:06,079 etc, etc, etc 314 00:18:06,079 --> 00:18:08,279 si aquí había puesto string nombre 315 00:18:08,279 --> 00:18:10,420 coma entidad 316 00:18:10,420 --> 00:18:12,900 pues esto se llamará con su nombre 317 00:18:12,900 --> 00:18:14,660 y luego un string 318 00:18:14,660 --> 00:18:15,700 coma 319 00:18:15,700 --> 00:18:17,420 un int 320 00:18:17,420 --> 00:18:19,720 que representarán respectivamente 321 00:18:19,720 --> 00:18:21,759 su nombre y su edad 322 00:18:21,759 --> 00:18:24,240 ¿Dudas? 323 00:18:25,819 --> 00:18:26,380 Ejemplos 324 00:18:26,380 --> 00:18:29,690 Tengo este main 325 00:18:29,690 --> 00:18:30,589 ¿Vale? 326 00:18:31,269 --> 00:18:32,130 Y este main 327 00:18:32,130 --> 00:18:37,380 No sé si se ve el problema que no puedo hacer mucho zoom 328 00:18:37,380 --> 00:18:39,019 porque luego en los vídeos sale mal, me han dicho 329 00:18:39,019 --> 00:18:40,680 Entonces 330 00:18:40,680 --> 00:18:43,559 Este main lo que hace es 331 00:18:43,559 --> 00:18:44,680 llamar unos métodos 332 00:18:44,680 --> 00:18:47,359 Fijaos que cuando los métodos son estáticos 333 00:18:47,359 --> 00:18:49,019 aparecen como en 334 00:18:49,019 --> 00:18:52,200 cursiva, ¿vale? veremos que cuando 335 00:18:52,200 --> 00:18:54,000 no son estáticos no aparecen en cursiva 336 00:18:54,000 --> 00:18:56,119 pero esto lo veremos más adelante, por ahora cada vez que 337 00:18:56,119 --> 00:18:58,259 llamo un método me debería aparecer en cursiva 338 00:18:58,259 --> 00:19:00,059 si no me aparece en cursiva probablemente 339 00:19:00,059 --> 00:19:01,720 he hecho algo malo, como por ejemplo 340 00:19:01,720 --> 00:19:03,799 no haber puesto estática aquí, ¿vale? 341 00:19:04,140 --> 00:19:05,299 entonces, ¿qué hace este main? 342 00:19:05,839 --> 00:19:08,359 primero saluda, ¿qué quiere decir? 343 00:19:08,599 --> 00:19:10,220 me voy a ver cómo está el método 344 00:19:10,220 --> 00:19:12,160 de saluda, el método de saluda no pilla ningún 345 00:19:12,160 --> 00:19:14,140 parámetro, por lo tanto aquí no le pongo ningún 346 00:19:14,140 --> 00:19:16,259 parámetro, ¿sí? y lo que 347 00:19:16,259 --> 00:19:17,880 hace el método de saluda es decir 348 00:19:17,880 --> 00:19:19,660 Hola a todos, escribe en pantalla 349 00:19:19,660 --> 00:19:21,640 Hola a todos, ¿me devuelve algo? 350 00:19:21,740 --> 00:19:23,140 ¿Me da algo a cambio? No 351 00:19:23,140 --> 00:19:25,759 Se pierde, se acaba y se acabó 352 00:19:26,440 --> 00:19:27,000 ¿Sí? 353 00:19:28,099 --> 00:19:29,480 Y luego llama el método 354 00:19:29,480 --> 00:19:31,000 Saluda, Estefan 355 00:19:31,000 --> 00:19:33,539 Pasándole como parámetro 356 00:19:33,539 --> 00:19:36,099 Un elemento 357 00:19:36,099 --> 00:19:37,839 Un parámetro que es de tipo 358 00:19:37,839 --> 00:19:39,660 String 359 00:19:39,660 --> 00:19:44,329 Ahora llegamos 360 00:19:44,329 --> 00:19:46,430 Sí 361 00:19:46,430 --> 00:19:48,390 Saluda, saluda es el mismo nombre 362 00:19:48,390 --> 00:19:52,359 Ahora llegamos 363 00:19:52,359 --> 00:20:07,619 ¿Vale? ¿Qué hace saluda? Saluda me da un parámetro, parámetro string, ¿vale? Entonces, string nombre, lo que hace aquí dentro es que nombre será asociado a Estefano, por lo tanto me escribirá, hola Estefano. 364 00:20:07,619 --> 00:20:12,720 Y aquí me preguntaban, ¿saluda y saluda es el mismo nombre? 365 00:20:13,140 --> 00:20:15,799 No es confuso eso, para nada 366 00:20:15,799 --> 00:20:19,759 Porque esto se llamará cuando saluda no tiene parámetros 367 00:20:19,759 --> 00:20:24,880 Y esto se llamará cuando saluda tiene un parámetro de tipo string 368 00:20:24,880 --> 00:20:30,140 Por lo tanto, el ordenador sabe siempre cuál de los dos métodos llamar 369 00:20:30,140 --> 00:20:36,579 Lo que no puedo hacer es ahora declarar otro public static void de saluda 370 00:20:36,579 --> 00:20:38,819 con parámetro string apellido 371 00:20:38,819 --> 00:20:42,779 porque entonces cuando yo te digo 372 00:20:42,779 --> 00:20:44,960 saluda a Estefano, tú no sabes 373 00:20:44,960 --> 00:20:46,839 si llamar saluda con string 374 00:20:46,839 --> 00:20:48,200 o saluda con string 375 00:20:48,200 --> 00:20:50,579 serían lo mismo, ¿se entiende? 376 00:20:51,640 --> 00:20:52,640 eso no se puede hacer 377 00:20:52,640 --> 00:20:54,680 lo que tiene que ser 378 00:20:54,680 --> 00:20:56,740 único es la firma 379 00:20:56,740 --> 00:20:57,559 del método 380 00:20:57,559 --> 00:21:00,559 la firma del método es su nombre 381 00:21:00,559 --> 00:21:02,700 seguido de los tipos 382 00:21:02,700 --> 00:21:03,579 de su parámetro 383 00:21:03,579 --> 00:21:06,740 la firma de este método es saluda void 384 00:21:06,740 --> 00:21:09,720 que es distinto de saluda string 385 00:21:09,720 --> 00:21:11,720 perfecto, lo puedo hacer 386 00:21:11,720 --> 00:21:14,799 sería distinto de saluda string string 387 00:21:14,799 --> 00:21:16,819 que sería distinto de saluda int 388 00:21:16,819 --> 00:21:19,640 que sería distinto de saluda int string string 389 00:21:19,640 --> 00:21:22,920 no puedo hacer dos métodos 390 00:21:22,920 --> 00:21:25,480 declarar dos veces un método con el mismo nombre 391 00:21:25,480 --> 00:21:27,680 y los mismos tipos de parámetros 392 00:21:27,680 --> 00:21:32,819 dos que tengan la firma saluda string y saluda string 393 00:21:32,819 --> 00:21:36,599 sería ambiguo, sería no determinista 394 00:21:36,599 --> 00:21:40,680 y por lo tanto cuando me dan un saluda con un string no sabría si utilizar 395 00:21:40,680 --> 00:21:44,759 esto o este otro, y esto al ordenador no le gusta, el ordenador en cada 396 00:21:44,759 --> 00:21:46,740 momento quiere saber que va a hacer 397 00:21:46,740 --> 00:21:51,519 cuando lo llama, no lo puedes hacer, te da un error 398 00:21:51,519 --> 00:21:56,880 aquí lo que hace es que este es void 399 00:21:56,880 --> 00:22:00,779 y este es string, por lo tanto sabe 400 00:22:00,779 --> 00:22:02,980 cuál utilizar. Si pusiera otro aquí 401 00:22:02,980 --> 00:22:04,859 poniendo string apellido y luego 402 00:22:04,859 --> 00:22:06,920 hola apellido, pues me daría 403 00:22:06,920 --> 00:22:08,880 un error. Me diría, esta cosa aquí ya existe. 404 00:22:09,180 --> 00:22:10,539 Ahora lo hacemos cuando hacemos lo propio. 405 00:22:11,880 --> 00:22:12,559 ¿Ya te he contestado? 406 00:22:13,240 --> 00:22:17,940 Vale. Ah, bueno. 407 00:22:18,720 --> 00:22:20,559 Luego creo una variable string 408 00:22:20,559 --> 00:22:22,740 que pongo dentro Paco y llamo 409 00:22:22,740 --> 00:22:24,519 saludaN. ¿Qué hará este 410 00:22:24,519 --> 00:22:25,019 saludaN? 411 00:22:26,359 --> 00:22:27,220 Hola Paco. 412 00:22:30,890 --> 00:22:31,769 ¿Paco qué es? 413 00:22:33,150 --> 00:22:34,109 Vale. Entonces 414 00:22:34,109 --> 00:22:36,170 Cuando hago saluda y le paso un string 415 00:22:36,170 --> 00:22:38,509 Él asociará este nombre 416 00:22:38,509 --> 00:22:40,589 Con el contenido de end 417 00:22:40,589 --> 00:22:43,089 Que es paco 418 00:22:43,089 --> 00:22:45,230 Por lo tanto me ejecutará esto 419 00:22:45,230 --> 00:22:47,009 Donde nombre vale paco 420 00:22:47,009 --> 00:22:48,990 Cuando llegue aquí y dice hola 421 00:22:48,990 --> 00:22:50,109 Paco 422 00:22:50,109 --> 00:22:51,769 Make sense? 423 00:22:52,849 --> 00:22:53,309 Dudas? 424 00:22:55,970 --> 00:22:57,950 Cuando acabo la parte teórica 425 00:22:57,950 --> 00:22:58,930 Luego hacemos pruebas 426 00:22:58,930 --> 00:23:01,089 Y volvemos sobre estas cosas 427 00:23:01,089 --> 00:23:03,569 Otro ejemplo 428 00:23:03,569 --> 00:23:08,369 Vale, tengo un main que dice, repite saludo, Luis, coma, cuatro. 429 00:23:08,589 --> 00:23:09,809 ¿Cuántos parámetros pilla esto? 430 00:23:10,990 --> 00:23:13,210 Dos. ¿Qué tipo de parámetros pilla? 431 00:23:14,589 --> 00:23:15,650 String e int. 432 00:23:16,549 --> 00:23:19,069 ¿Cuál es la firma de este método? 433 00:23:21,480 --> 00:23:23,779 Repite saludo, string, int. 434 00:23:26,019 --> 00:23:29,880 La firma es su nombre con los tipos de los parámetros. 435 00:23:31,180 --> 00:23:34,980 Declaro este método, que es public static void. 436 00:23:35,079 --> 00:23:36,240 Nombre 437 00:23:36,240 --> 00:23:38,140 Y luego tengo un string 438 00:23:38,140 --> 00:23:39,279 O sea, el nombre del método 439 00:23:39,279 --> 00:23:41,380 Del procedimiento 440 00:23:41,380 --> 00:23:42,359 String 441 00:23:42,359 --> 00:23:43,400 Nombre 442 00:23:43,400 --> 00:23:44,079 Coma 443 00:23:44,079 --> 00:23:44,480 Int 444 00:23:44,480 --> 00:23:45,299 Repetición 445 00:23:45,299 --> 00:23:47,119 Y ahora digo que 446 00:23:47,119 --> 00:23:47,920 For int 447 00:23:47,920 --> 00:23:48,859 Igual a cero 448 00:23:48,859 --> 00:23:49,859 Y menor que repeticiones 449 00:23:49,859 --> 00:23:50,660 Y más más 450 00:23:50,660 --> 00:23:52,559 String.out.tln 451 00:23:52,559 --> 00:23:52,980 Hola 452 00:23:52,980 --> 00:23:53,660 Más nombre 453 00:23:53,660 --> 00:23:54,799 ¿Qué hace esta cosa aquí? 454 00:23:55,420 --> 00:23:58,000 ¿Qué hace este programa si lo lanzo? 455 00:24:00,000 --> 00:24:01,619 Escribe cuatro veces 456 00:24:01,619 --> 00:24:03,579 Porque hace cuatro repeticiones 457 00:24:03,579 --> 00:24:04,019 ¿Vale? 458 00:24:04,019 --> 00:24:11,039 Un for de cero a menor que repeticiones lo hará cuatro veces, en que me escribe hola y el nombre. 459 00:24:11,759 --> 00:24:12,519 O sea, hola Luis. 460 00:24:16,349 --> 00:24:22,170 Si yo hiciera repite saludo de, entre comillas, Estefano, coma, sesenta, ¿qué haría? 461 00:24:25,000 --> 00:24:26,720 Hola Estefano, sesenta veces. 462 00:24:27,480 --> 00:24:32,559 Si yo hiciera string n es igual a cocodrilo, entre comillas. 463 00:24:32,880 --> 00:24:37,220 Y luego hago repite saludos de n, coma, tres, ¿qué haría? 464 00:24:38,180 --> 00:24:45,710 N,3 465 00:24:45,710 --> 00:24:50,079 O la cocodrilo tres veces 466 00:24:50,079 --> 00:24:51,640 ¿Sí o no? 467 00:24:53,000 --> 00:24:53,240 Va 468 00:24:53,240 --> 00:24:55,640 Pues esto es un procedimiento 469 00:24:55,640 --> 00:25:00,329 Los procedimientos también se pueden utilizar 470 00:25:00,329 --> 00:25:02,230 Simplemente para ordenar el código 471 00:25:02,230 --> 00:25:03,289 Y hacerlo más leíble 472 00:25:03,289 --> 00:25:05,089 Yo tengo un main 473 00:25:05,089 --> 00:25:06,450 Aquí hay un error 474 00:25:06,450 --> 00:25:08,589 Tengo un main que hace 475 00:25:08,589 --> 00:25:11,569 Inicializa el sistema, calcula datos y escribe resultados 476 00:25:11,569 --> 00:25:14,450 Entonces el main no lo entiendes perfectamente 477 00:25:14,450 --> 00:25:17,109 Porque está haciendo tres operaciones que se entienden 478 00:25:17,109 --> 00:25:18,589 ¿Esta operación qué hará? 479 00:25:20,750 --> 00:25:22,829 ¿Qué quiere decir? No lo sé 480 00:25:22,829 --> 00:25:24,430 Dependerá del programa que estoy haciendo 481 00:25:24,430 --> 00:25:27,190 Pero sé que todas las operaciones 482 00:25:27,190 --> 00:25:29,269 De inicialización se harán aquí 483 00:25:29,269 --> 00:25:31,450 Luego estará calcula datos 484 00:25:31,450 --> 00:25:32,849 Y en este método de aquí 485 00:25:32,849 --> 00:25:34,109 Es donde haré 486 00:25:34,109 --> 00:25:37,329 Los datos y haré las operaciones que tengo que hacer 487 00:25:37,329 --> 00:25:39,150 Y luego estará una parte de output 488 00:25:39,150 --> 00:25:40,250 Que es escribir el resultado 489 00:25:40,250 --> 00:25:43,109 Y luego me creo los tres 490 00:25:43,109 --> 00:25:44,730 Métodos 491 00:25:44,730 --> 00:25:46,490 Y en cada uno de estos tres métodos 492 00:25:46,490 --> 00:25:47,829 En cada uno de estos tres procedimientos 493 00:25:47,829 --> 00:25:49,809 Haré las operaciones para inicializar 494 00:25:49,809 --> 00:25:51,069 Las operaciones para calcular 495 00:25:51,069 --> 00:25:52,450 Las operaciones para escribir el resultado 496 00:25:52,450 --> 00:25:56,309 Entonces se me queda más bonito 497 00:25:56,309 --> 00:25:57,750 En vez de salir un caos 498 00:25:57,750 --> 00:25:59,430 El otro día cuando nosotros 499 00:25:59,430 --> 00:26:02,690 No me acuerdo que era exactamente la cosa 500 00:26:02,690 --> 00:26:04,750 Pillé una parte del código 501 00:26:04,750 --> 00:26:05,549 Lo saqué fuera 502 00:26:05,549 --> 00:26:08,130 Y en el main se quedaba más bonito 503 00:26:08,130 --> 00:26:10,430 Porque se quedaba una línea que decía que hacía esa cosa 504 00:26:10,430 --> 00:26:11,529 Y como se hace 505 00:26:11,529 --> 00:26:12,690 Lo escondo 506 00:26:12,690 --> 00:26:16,410 pero sé lo que hace, que es un poco una forma de 507 00:26:16,410 --> 00:26:21,009 yo aquí sé qué se está haciendo, pero escondo 508 00:26:21,009 --> 00:26:24,990 el cómo se hace, el cómo se hace es engorroso, para que sea más leíble 509 00:26:24,990 --> 00:26:28,869 mi texto, pues lo saco fuera, lo hago aparte, que así es un programita 510 00:26:28,869 --> 00:26:32,789 más sencillo, es un poquito el divide tímpera, el divide vencerás 511 00:26:32,789 --> 00:26:37,049 que os digo alguna vez, cada parte de mi programa lo estoy sacando 512 00:26:37,049 --> 00:26:40,829 fuera en partes distintas y luego me centro en cada una de estas partes 513 00:26:40,829 --> 00:26:42,710 ¿Dudas? 514 00:26:43,690 --> 00:26:54,599 No, es que como estáis aprendiendo a hacer los métodos 515 00:26:54,599 --> 00:26:56,400 Habrá parte del examen que te dice 516 00:26:56,400 --> 00:26:57,759 Haz un método con esta cosa 517 00:26:57,759 --> 00:26:59,259 Si no lo haces, no sacas punto 518 00:26:59,259 --> 00:27:05,200 Veremos en el día del examen 519 00:27:05,200 --> 00:27:06,400 No lo sé, no veo el futuro 520 00:27:06,400 --> 00:27:07,579 Todavía 521 00:27:07,579 --> 00:27:10,059 Funciones, ¿vale? 522 00:27:10,359 --> 00:27:12,859 Si en vez de un procedimiento hay que hacer una función 523 00:27:12,859 --> 00:27:14,339 ¿En qué se diferencia? 524 00:27:14,420 --> 00:27:17,359 ¿Cuál es la diferencia entre funciones y procedimiento? 525 00:27:18,460 --> 00:27:20,259 Una función es parecida a un procedimiento 526 00:27:20,259 --> 00:27:22,880 Pero sirve para obtener un determinado resultado 527 00:27:22,880 --> 00:27:25,819 Que se devolverá al programa que ha llamado la función 528 00:27:25,819 --> 00:27:26,579 ¿Vale? 529 00:27:26,799 --> 00:27:28,000 Entonces, por ejemplo 530 00:27:28,000 --> 00:27:31,359 Tendré una cosa que te dice 531 00:27:31,359 --> 00:27:34,000 Calcularea de lado 1 y lado 2 532 00:27:34,000 --> 00:27:37,240 Esto calculará, hará lado 1 por lado 2, lo que sea 533 00:27:37,240 --> 00:27:40,180 Y el valor que saca al final 534 00:27:40,180 --> 00:27:41,640 Me lo devuelve 535 00:27:41,640 --> 00:27:43,460 ¿Y cómo me lo devuelve? 536 00:27:43,460 --> 00:27:47,480 Yo lo puedo guardar en algún lado 537 00:27:47,480 --> 00:27:48,740 Por ejemplo, en una variable 538 00:27:48,740 --> 00:27:52,619 Los métodos anteriores 539 00:27:52,619 --> 00:27:53,980 Los procedimientos 540 00:27:53,980 --> 00:27:56,700 No permiten hacer esta parte 541 00:27:56,700 --> 00:27:57,640 Aquí de la izquierda 542 00:27:57,640 --> 00:27:58,680 Esta 543 00:27:58,680 --> 00:28:01,559 El procedimiento no te devuelve un valor 544 00:28:01,559 --> 00:28:04,079 Entonces no puedes decir, oye lo que has creado 545 00:28:04,079 --> 00:28:06,039 Devuélvelo y métemelo en una variable int 546 00:28:06,039 --> 00:28:07,799 Porque no has creado nada 547 00:28:07,799 --> 00:28:08,559 Tu 548 00:28:08,559 --> 00:28:12,420 Tipo de devolución es 549 00:28:12,420 --> 00:28:13,460 Dios 550 00:28:13,460 --> 00:28:17,150 Es void 551 00:28:17,150 --> 00:28:19,930 Esto me está diciendo 552 00:28:19,930 --> 00:28:21,589 No te voy a devolver nada 553 00:28:21,589 --> 00:28:23,650 Por lo tanto no puedes hacer nada 554 00:28:23,650 --> 00:28:30,759 Tendría que buscar otra forma 555 00:28:30,759 --> 00:28:31,900 De guardar ese valor 556 00:28:31,900 --> 00:28:32,900 O volver a hacerlo 557 00:28:32,900 --> 00:28:34,259 O no lo sé 558 00:28:34,259 --> 00:28:36,700 Pero si tú necesitas 559 00:28:36,700 --> 00:28:37,200 Tu valor 560 00:28:37,200 --> 00:28:38,640 No haces un procedimiento 561 00:28:38,640 --> 00:28:39,420 Haces una función 562 00:28:39,420 --> 00:28:41,519 Eres tú que decides 563 00:28:41,519 --> 00:28:42,000 No es que 564 00:28:42,000 --> 00:28:43,059 Oye o haces uno 565 00:28:43,059 --> 00:28:43,640 O haces otro 566 00:28:43,640 --> 00:28:44,740 Dependiendo si es martes 567 00:28:44,740 --> 00:28:45,339 O miércoles 568 00:28:45,339 --> 00:28:46,380 Pues quieres hacer una función 569 00:28:46,380 --> 00:28:47,180 Tienes que esperar miércoles 570 00:28:47,180 --> 00:28:47,519 Pues no 571 00:28:47,519 --> 00:28:49,579 Tu programador dice 572 00:28:49,579 --> 00:28:51,119 Este dato lo necesito 573 00:28:51,119 --> 00:28:52,319 ¿En quién lo llama? 574 00:28:52,420 --> 00:28:53,880 ¿Lo necesito en el main? 575 00:28:53,880 --> 00:28:56,220 pues esto traiga una función y el dato final 576 00:28:56,220 --> 00:28:58,519 me lo devuelva, que no lo necesito 577 00:28:58,519 --> 00:29:00,420 quiero que esto haga trabajo así 578 00:29:00,420 --> 00:29:02,720 y lo escriba ya en pantalla o lo guarde en un fichero 579 00:29:02,720 --> 00:29:04,240 o haga lo que sea, pues entonces 580 00:29:04,240 --> 00:29:04,940 hago un procedimiento 581 00:29:04,940 --> 00:29:08,500 cuando luego tendremos los métodos 582 00:29:08,500 --> 00:29:10,299 pues yo puedo hacer procedimientos 583 00:29:10,299 --> 00:29:12,259 que lo que hacen es, perdón 584 00:29:12,259 --> 00:29:14,640 los objetos, es que modifican el objeto 585 00:29:14,640 --> 00:29:16,559 y como el objeto ya lo tenía antes 586 00:29:16,559 --> 00:29:16,900 pues 587 00:29:16,900 --> 00:29:20,460 haremos algunos ejemplos con los arrays 588 00:29:20,460 --> 00:29:21,799 para entender lo que entiendo 589 00:29:21,799 --> 00:29:22,400 ¿Vale? 590 00:29:23,359 --> 00:29:23,960 ¿Dudas? 591 00:29:25,359 --> 00:29:25,960 Entonces 592 00:29:25,960 --> 00:29:29,680 Por ejemplo aquí yo tengo un creasaludo 593 00:29:29,680 --> 00:29:31,319 Con un nombre, esto me creará 594 00:29:31,319 --> 00:29:33,700 HolaStefano pero no lo imprime en pantalla 595 00:29:33,700 --> 00:29:35,380 Me lo devuelve a mi 596 00:29:35,380 --> 00:29:36,460 En formato de string 597 00:29:36,460 --> 00:29:39,660 Lo puede hasta imprimir en pantalla y luego devolverme 598 00:29:39,660 --> 00:29:41,680 Todo depende de como lo codifico yo 599 00:29:41,680 --> 00:29:42,799 ¿Si? 600 00:29:43,079 --> 00:29:45,019 Pero el objetivo, la función 601 00:29:45,019 --> 00:29:47,460 Al final tiene que tener 602 00:29:47,460 --> 00:29:49,579 Una operación que se llama return 603 00:29:49,579 --> 00:29:51,500 Que es este valor 604 00:29:51,500 --> 00:29:58,539 es el que me devuelve, ¿cómo se declara? pues es igual al otro 605 00:29:58,539 --> 00:30:03,880 solo que en vez de void voy a poner el tipo del valor 606 00:30:03,880 --> 00:30:07,660 que se devolverá, entonces public static int 607 00:30:07,660 --> 00:30:13,460 no se que, quiere decir que al final todas las operaciones tendrá un int 608 00:30:13,460 --> 00:30:16,420 y este int me lo devuelve a quien lo ha llamado 609 00:30:16,420 --> 00:30:22,839 public static string saluda no se que, pues creará un string 610 00:30:22,839 --> 00:30:27,799 Y ese string me lo empaquetará y devolverá a quien ha llamado este método 611 00:30:27,799 --> 00:30:34,480 Es decir, que cuando se llama, se hará tipo variable, nombre variable 612 00:30:34,480 --> 00:30:38,960 Es igual al nombre del método con sus parámetros 613 00:30:38,960 --> 00:30:41,720 Esto de los parámetros se queda igual 614 00:30:41,720 --> 00:30:46,079 Este tipo tiene que ser este tipo 615 00:30:46,079 --> 00:30:57,130 Si lo almacenas en una variable 616 00:30:57,130 --> 00:31:11,789 Si yo hago esto, o lo usas como parámetros en otra función, o lo usas como parte de una expresión para luego sumarle 3, pues eso no se sabe. 617 00:31:13,809 --> 00:31:21,430 Esto es una expresión y al final hará algo y al final valdrá algo. 618 00:31:21,430 --> 00:31:23,589 Esto vale 3 619 00:31:23,589 --> 00:31:26,210 Y luego, ¿qué haces tú con este 3? 620 00:31:26,309 --> 00:31:28,210 Guardarlo en una variable, guardarlo en una array 621 00:31:28,210 --> 00:31:30,609 Multiplicarlo por 5, exprimirlo por pantalla 622 00:31:30,609 --> 00:31:31,789 Pues eso depende de ti 623 00:31:31,789 --> 00:31:33,190 ¿Qué haces con una variable? 624 00:31:36,369 --> 00:31:36,990 Lo que quieras 625 00:31:36,990 --> 00:31:39,210 ¿Qué haces con un método que devuelve algo? 626 00:31:39,549 --> 00:31:41,009 Pues lo que tienes que hacer con ese método 627 00:31:41,009 --> 00:31:41,890 Que no lo sé 628 00:31:41,890 --> 00:31:44,009 Se puede hacer lo que 629 00:31:44,009 --> 00:31:46,329 Donde tú pondrías una expresión 630 00:31:46,329 --> 00:31:49,549 3, n, nombre 631 00:31:49,549 --> 00:31:51,609 Puedes poner un método 632 00:31:51,609 --> 00:31:53,430 Que luego será al final 633 00:31:53,430 --> 00:31:54,809 Su valor, su tipo 634 00:31:54,809 --> 00:31:57,309 Será el return de ese método 635 00:31:57,309 --> 00:32:03,099 Yo os entiendo 636 00:32:03,099 --> 00:32:05,539 Miramos los ejemplos 637 00:32:05,539 --> 00:32:07,119 Y luego después me hacéis las preguntas 638 00:32:07,119 --> 00:32:09,259 ¿Puedo devolver? 639 00:32:10,920 --> 00:32:12,619 ¿Te puedo devolver varios datos? 640 00:32:15,069 --> 00:32:15,670 ¿Cómo? 641 00:32:17,250 --> 00:32:18,750 No, poniendo un array 642 00:32:18,750 --> 00:32:23,240 Devuelves un array de enteros 643 00:32:23,240 --> 00:32:24,900 Y me puedes devolver 50 arrays 644 00:32:24,900 --> 00:32:26,960 Lo que no puedes hacer es devolver 645 00:32:26,960 --> 00:32:28,079 Un int y un string 646 00:32:28,079 --> 00:32:30,099 Porque aquí pones un tipo solo 647 00:32:30,099 --> 00:32:31,299 Pues int o string 648 00:32:31,299 --> 00:32:39,059 Pues hago un array 649 00:32:39,059 --> 00:32:41,740 Devuelvo un array de int 650 00:32:41,740 --> 00:32:44,180 Y cuando devuelvo sé que en la posición 0 651 00:32:44,180 --> 00:32:46,079 Tendré el área y en la posición 1 tendré 652 00:32:46,079 --> 00:32:47,160 El perímetro 653 00:32:47,160 --> 00:32:48,980 Y lo utilizo como yo sé 654 00:32:48,980 --> 00:32:50,720 ¿Sí? 655 00:32:52,240 --> 00:32:54,160 Entonces, ejemplo de funciones 656 00:32:54,160 --> 00:32:56,099 ¿Vale? Aquí yo tengo 657 00:32:56,099 --> 00:32:57,319 Saluda a Estefano 658 00:32:57,319 --> 00:32:59,680 Que lo que hace al final es 659 00:32:59,680 --> 00:33:01,200 Producir un string 660 00:33:01,200 --> 00:33:03,140 Y este string lo guardo aquí 661 00:33:03,140 --> 00:33:05,980 Y ahora si quiero lo imprimo en pantalla 662 00:33:05,980 --> 00:33:07,680 O le añado algo 663 00:33:07,680 --> 00:33:09,460 O le pongo delante 664 00:33:09,460 --> 00:33:10,920 El primer saludo es 665 00:33:10,920 --> 00:33:12,539 Más saludo uno 666 00:33:12,539 --> 00:33:13,599 ¿Sí? 667 00:33:14,680 --> 00:33:16,339 ¿Cómo sería saluda 668 00:33:16,339 --> 00:33:18,859 Que pilla un string? 669 00:33:19,220 --> 00:33:19,460 ¿Vale? 670 00:33:19,920 --> 00:33:21,960 Public static string 671 00:33:21,960 --> 00:33:22,819 No void 672 00:33:22,819 --> 00:33:26,319 Esto es que al final me tienes que devolver un string 673 00:33:26,319 --> 00:33:27,519 Saluda 674 00:33:27,519 --> 00:33:30,460 String nombre es el parámetro 675 00:33:30,460 --> 00:33:32,559 Y aquí dentro lo que hago es 676 00:33:32,559 --> 00:33:34,460 crearme una variable que se llama resultado 677 00:33:34,460 --> 00:33:36,160 que es igual a hola 678 00:33:36,160 --> 00:33:37,339 más el nombre 679 00:33:37,339 --> 00:33:40,299 return resultado 680 00:33:40,299 --> 00:33:42,940 este return 681 00:33:42,940 --> 00:33:44,799 es la operación que me dice 682 00:33:44,799 --> 00:33:46,140 devuélvelo 683 00:33:46,140 --> 00:33:48,920 si yo le he dicho que devuelve algo 684 00:33:48,920 --> 00:33:50,700 y no he puesto un return 685 00:33:50,700 --> 00:33:51,819 se enfada 686 00:33:51,819 --> 00:33:54,420 hoy me has dicho que devuelves un 687 00:33:54,420 --> 00:33:56,640 string pero en ningún lado has dicho 688 00:33:56,640 --> 00:33:57,220 que devuelve 689 00:33:57,220 --> 00:34:00,519 es obligatorio si aquí pones algo 690 00:34:00,519 --> 00:34:02,720 que no sea void, poner un return 691 00:34:02,720 --> 00:34:03,660 en algún lado 692 00:34:03,660 --> 00:34:06,599 y siempre tiene que llegar a return 693 00:34:06,599 --> 00:34:07,720 siempre 694 00:34:07,720 --> 00:34:09,760 si yo aquí pongo 695 00:34:09,760 --> 00:34:11,239 aquí arriba 696 00:34:11,239 --> 00:34:14,699 if string.length mayor que 0 697 00:34:14,699 --> 00:34:16,099 hago todo esto 698 00:34:16,099 --> 00:34:17,780 se enfada 699 00:34:17,780 --> 00:34:20,480 porque si string no es 700 00:34:20,480 --> 00:34:21,940 mayor que 0, si name 701 00:34:21,940 --> 00:34:24,579 no es mayor que 0, no hay un return 702 00:34:24,579 --> 00:34:26,239 entonces se enfadaría 703 00:34:26,239 --> 00:34:28,059 siempre tengo que tener un return 704 00:34:28,059 --> 00:34:31,159 Y ahora veremos ejemplo 705 00:34:31,159 --> 00:34:44,550 Porque es una función 706 00:34:44,550 --> 00:34:46,030 Y tienes que devolver algo 707 00:34:46,030 --> 00:34:52,909 Si tú no sientes la necesidad de poner un return 708 00:34:52,909 --> 00:34:54,170 Estás haciendo un procedimiento 709 00:34:54,170 --> 00:34:55,050 Entonces pones void 710 00:34:55,050 --> 00:35:00,239 Porque es una función 711 00:35:00,239 --> 00:35:03,719 Si tú estás haciendo una función es porque quieres que te calcule algo 712 00:35:03,719 --> 00:35:04,619 Y te dé resultado 713 00:35:04,619 --> 00:35:07,599 Y si no le dices 714 00:35:07,599 --> 00:35:08,420 Devuélveme el resultado 715 00:35:08,420 --> 00:35:09,760 No estás haciendo una función 716 00:35:09,760 --> 00:35:11,019 Estás haciendo un procedimiento 717 00:35:11,019 --> 00:35:17,230 Tened en cuenta también 718 00:35:17,230 --> 00:35:19,090 Que el return acaba el método 719 00:35:19,090 --> 00:35:20,969 Cuando llega un return 720 00:35:20,969 --> 00:35:22,309 Salgo del método 721 00:35:22,309 --> 00:35:24,349 Vuelvo a quien me ha llamado 722 00:35:24,349 --> 00:35:27,170 Yo estoy aquí, llamo esta cosa de aquí 723 00:35:27,170 --> 00:35:29,030 Me teletransporto a esto 724 00:35:29,030 --> 00:35:30,329 Estoy ejecutando 725 00:35:30,329 --> 00:35:32,250 En cuanto ejecute un return 726 00:35:32,250 --> 00:35:33,309 Vuelvo aquí 727 00:35:33,309 --> 00:35:35,809 Guardo lo que he guardado 728 00:35:35,809 --> 00:35:36,710 Y pasa al siguiente 729 00:35:36,710 --> 00:35:39,190 String n es igual a pago 730 00:35:39,190 --> 00:35:41,030 Saludo 2, saluda n 731 00:35:41,030 --> 00:35:49,630 pues lo que hará es ejecutarme este método de aquí, entra aquí dentro, ahora n está asociado con nombre, 732 00:35:49,769 --> 00:35:56,829 por lo tanto aquí nombre vale el contenido de n, o sea nombre vale pago, hará que el resultado es hola espacio pago, 733 00:35:57,789 --> 00:36:06,090 esto lo guarda dentro del resultado y me lo devuelve, entonces el resultado de esta operación de aquí es hola espacio pago 734 00:36:06,090 --> 00:36:09,010 y por lo tanto me lo guardará dentro de saludo2. 735 00:36:11,030 --> 00:36:11,670 ¿Entiendes? 736 00:36:13,289 --> 00:36:14,489 Más ejemplos. 737 00:36:17,559 --> 00:36:23,500 Tengo un main que dice saludos es igual a repiteSaludo de Luis4. 738 00:36:24,340 --> 00:36:27,320 Y luego imprimo lo que haya generado aquí. 739 00:36:27,480 --> 00:36:28,199 ¿Qué genero? 740 00:36:28,199 --> 00:36:35,960 Pues aquí tengo un public static string repiteSaludo que pilla un nombre en una repetición, 741 00:36:35,960 --> 00:36:38,940 crea un resultado vacío 742 00:36:38,940 --> 00:36:40,440 ¿vale? una cadena vacía 743 00:36:40,440 --> 00:36:43,320 por cuatro veces, por repeticiones 744 00:36:43,320 --> 00:36:44,900 veces, que luego se hará asociado 745 00:36:44,900 --> 00:36:47,159 con cuatro, lo que hace es 746 00:36:47,159 --> 00:36:48,659 acumular dentro 747 00:36:48,659 --> 00:36:50,639 el resultado es igual a lo que hay en 748 00:36:50,639 --> 00:36:52,780 resultado más hola, más 749 00:36:52,780 --> 00:36:54,059 nombre, más espacio 750 00:36:54,059 --> 00:36:56,760 y luego hará return el resultado 751 00:36:56,760 --> 00:36:58,699 entonces lo que hace es 752 00:36:58,699 --> 00:37:00,460 escribir hola Luis 753 00:37:00,460 --> 00:37:02,719 hola Luis, hola Luis, hola Luis, todo en una 754 00:37:02,719 --> 00:37:03,760 línea en este caso 755 00:37:03,760 --> 00:37:07,260 4 veces 756 00:37:07,260 --> 00:37:11,539 La versión anterior me lo ponía 757 00:37:11,539 --> 00:37:13,480 Como hacía println me lo ponía 758 00:37:13,480 --> 00:37:15,059 Uno en cada línea 759 00:37:15,059 --> 00:37:17,280 Este de aquí como lo estoy acumulando 760 00:37:17,280 --> 00:37:18,800 Me lo está poniendo 761 00:37:18,800 --> 00:37:20,320 Todo en la misma línea 762 00:37:20,320 --> 00:37:21,960 Si yo en vez de este espacio 763 00:37:21,960 --> 00:37:23,920 Aquí pusiera un barra n 764 00:37:23,920 --> 00:37:26,860 Pues entonces me lo pondría uno en cada línea 765 00:37:26,860 --> 00:37:29,260 ¿Dudas? 766 00:37:31,760 --> 00:37:32,960 Ejemplo otro 767 00:37:32,960 --> 00:37:33,760 ¿Vale? 768 00:37:38,559 --> 00:37:39,679 Leo 769 00:37:39,679 --> 00:37:43,179 Creo un escáner 770 00:37:43,179 --> 00:37:43,659 ¿Vale? 771 00:37:46,239 --> 00:37:48,519 Lado 1 es igual a 772 00:37:48,519 --> 00:37:50,940 Leginum de esta cosa 773 00:37:50,940 --> 00:37:52,139 De aquí, coma S 774 00:37:52,139 --> 00:37:54,119 Fijaos, estoy pasando 775 00:37:54,119 --> 00:37:55,539 Una frase 776 00:37:55,539 --> 00:37:57,440 Que es un string 777 00:37:57,440 --> 00:37:59,900 Y, ¿qué es esto? 778 00:38:01,099 --> 00:38:02,420 Un escáner 779 00:38:02,420 --> 00:38:02,900 ¿Vale? 780 00:38:03,760 --> 00:38:04,940 Mira como es Leginum 781 00:38:04,940 --> 00:38:06,800 Recibe un string 782 00:38:06,800 --> 00:38:09,239 Y un objeto escáner 783 00:38:09,239 --> 00:38:13,300 como le he pasado este objeto 784 00:38:13,300 --> 00:38:14,199 escáner de aquí 785 00:38:14,199 --> 00:38:17,539 pues entonces yo puedo utilizar 786 00:38:17,539 --> 00:38:19,239 aquí dentro eso 787 00:38:19,239 --> 00:38:20,639 utilizando la palabra teclado 788 00:38:20,639 --> 00:38:23,099 entonces puedo hacer, escribe 789 00:38:23,099 --> 00:38:25,539 el mensaje 790 00:38:25,539 --> 00:38:26,179 que me has dado 791 00:38:26,179 --> 00:38:28,760 luego 792 00:38:28,760 --> 00:38:30,920 teclado.nextint 793 00:38:30,920 --> 00:38:32,800 estoy utilizando el escáner 794 00:38:32,800 --> 00:38:35,059 lo que tú me has escrito 795 00:38:35,059 --> 00:38:36,699 lo guardo en numleído 796 00:38:36,699 --> 00:38:39,059 y te devuelvo numleído 797 00:38:39,059 --> 00:38:45,059 Entonces lo que nosotros hacíamos siempre en dos pasos de escribe lo que quieres hacer y guarda las variables 798 00:38:45,059 --> 00:38:52,880 Ahora me he creado un método, una función, que lo que hace es leer un número 799 00:38:52,880 --> 00:38:57,619 Me dices cuál tiene que ser el prompt que pone que tengo que hacer 800 00:38:57,619 --> 00:39:03,860 Por ejemplo, dame el primer lado del rectángulo y le paso el objeto por el que tiene que leer 801 00:39:03,860 --> 00:39:05,420 Que está asociado con el teclado 802 00:39:05,420 --> 00:39:08,559 la segunda vez 803 00:39:08,559 --> 00:39:10,159 llamo otra vez leggiNum 804 00:39:10,159 --> 00:39:12,739 con otro nombre, dame el otro lado 805 00:39:12,739 --> 00:39:14,539 del rectángulo, el mismo 806 00:39:14,539 --> 00:39:16,500 objeto es S, por lo tanto esto de aquí 807 00:39:16,500 --> 00:39:18,679 me le da un primer número y lo guarda en el lado 1 808 00:39:18,679 --> 00:39:20,760 esto de aquí me le da un segundo número y lo guarda 809 00:39:20,760 --> 00:39:21,300 en el lado 2 810 00:39:21,300 --> 00:39:23,079 ¿se entiende? 811 00:39:23,960 --> 00:39:26,699 ¿qué parámetros tiene? stringMessage 812 00:39:26,699 --> 00:39:28,280 y scannerTeclado 813 00:39:28,280 --> 00:39:30,059 entonces aquí dentro usaré 814 00:39:30,059 --> 00:39:31,739 msg y teclado 815 00:39:31,739 --> 00:39:34,420 cuando llamaré 816 00:39:34,420 --> 00:39:36,639 este método, msg 817 00:39:36,639 --> 00:39:38,639 estará asociado con este 818 00:39:38,639 --> 00:39:40,440 string de aquí, o sea 819 00:39:40,440 --> 00:39:41,639 msg vale esto 820 00:39:41,639 --> 00:39:44,539 y teclado vale 821 00:39:44,539 --> 00:39:46,079 esto, que vale esto 822 00:39:46,079 --> 00:39:49,139 ¿entiende? 823 00:39:50,880 --> 00:39:51,480 ¿se entiende? 824 00:39:52,679 --> 00:39:54,300 ¿sí? fijaos que 825 00:39:54,300 --> 00:39:56,460 la devolución de este señor es un int 826 00:39:56,460 --> 00:39:58,599 public static int 827 00:39:58,599 --> 00:40:00,360 yo me espero que al final 828 00:40:00,360 --> 00:40:02,119 tú me devuelvas un entero, y de hecho 829 00:40:02,119 --> 00:40:04,079 return no me he leído, y no me he leído 830 00:40:04,079 --> 00:40:04,559 fíjate tú 831 00:40:04,559 --> 00:40:06,739 Duda 832 00:40:06,739 --> 00:40:19,300 Porque aquí dentro 833 00:40:19,300 --> 00:40:20,900 Tú no sabes 834 00:40:20,900 --> 00:40:22,679 Qué escáner te van a pasar 835 00:40:22,679 --> 00:40:25,139 Podría ser otro objeto escáner 836 00:40:25,139 --> 00:40:27,380 Tú haces una asociación 837 00:40:27,380 --> 00:40:29,579 Entre teclado, que es esta cosa aquí 838 00:40:29,579 --> 00:40:30,900 Y S 839 00:40:30,900 --> 00:40:34,199 Paint 840 00:40:34,199 --> 00:40:38,389 Esto es un objeto escáner 841 00:40:38,389 --> 00:40:41,190 Y yo estoy creando 842 00:40:41,190 --> 00:40:43,570 Creo un objeto S 843 00:40:43,570 --> 00:40:47,150 Que apunta al objeto escáner 844 00:40:47,150 --> 00:40:50,110 cuando ahora 845 00:40:50,110 --> 00:40:50,750 llamo 846 00:40:50,750 --> 00:40:52,570 leggi, numero 847 00:40:52,570 --> 00:40:54,530 y le paso una 848 00:40:54,530 --> 00:40:57,449 string, s 849 00:40:57,449 --> 00:40:58,769 vale 850 00:40:58,769 --> 00:41:00,750 dentro del mundo 851 00:41:00,750 --> 00:41:02,849 de este metodo 852 00:41:02,849 --> 00:41:04,650 yo tengo un teclado 853 00:41:04,650 --> 00:41:09,460 que es una variable 854 00:41:09,460 --> 00:41:11,079 y cuanto vale la variable 855 00:41:11,079 --> 00:41:13,480 se asocia con el contenido de s 856 00:41:13,480 --> 00:41:14,679 cual es el contenido de s 857 00:41:14,679 --> 00:41:16,579 es esta cosa de aqui 858 00:41:16,579 --> 00:41:18,719 que es un puntero 859 00:41:18,719 --> 00:41:20,139 Es una zona de memoria 860 00:41:20,139 --> 00:41:21,460 Donde está un objeto 861 00:41:21,460 --> 00:41:23,539 Por lo tanto yo pillo esta cosa de aquí 862 00:41:23,539 --> 00:41:24,519 Y la copio aquí 863 00:41:24,519 --> 00:41:27,360 Para esta ejecución de teclado 864 00:41:27,360 --> 00:41:29,420 Es decir que esto me está apuntando 865 00:41:29,420 --> 00:41:30,559 A este objeto 866 00:41:30,559 --> 00:41:32,280 Por lo tanto estoy usando 867 00:41:32,280 --> 00:41:34,699 El teclado que había creado antes 868 00:41:34,699 --> 00:41:36,260 Acordaos que 869 00:41:36,260 --> 00:41:38,539 Las variables 870 00:41:38,539 --> 00:41:40,380 Al fin y al cabo 871 00:41:40,380 --> 00:41:43,519 Son representaciones 872 00:41:43,519 --> 00:41:44,860 Alfanuméricas 873 00:41:44,860 --> 00:41:46,880 De algo, de un valor, de un objeto 874 00:41:46,880 --> 00:41:49,420 Y nosotros hemos visto dos cosas 875 00:41:49,420 --> 00:41:51,739 La hemos hablado un poquito en algunos casos 876 00:41:51,739 --> 00:41:54,019 Puede ser que sean por valor 877 00:41:54,019 --> 00:41:55,579 Como cuando uso int 878 00:41:55,579 --> 00:41:58,360 Entonces se crea una copia del mismo valor 879 00:41:58,360 --> 00:42:00,340 Y si modifico uno no modifico el otro 880 00:42:00,340 --> 00:42:01,900 Pero hay casos 881 00:42:01,900 --> 00:42:04,559 Spoiler, cada vez que uso un objeto 882 00:42:04,559 --> 00:42:06,300 En el que 883 00:42:06,300 --> 00:42:08,739 No estoy usando dos copias de lo mismo 884 00:42:08,739 --> 00:42:10,059 Si no estoy usando 885 00:42:10,059 --> 00:42:11,460 La misma cosa 886 00:42:11,460 --> 00:42:14,639 Esto lo hemos visto con los 887 00:42:14,639 --> 00:42:15,739 Arrays 888 00:42:15,739 --> 00:42:24,199 Si yo hacía S, cuando hacía ArrayX y luego hacía ArrayY es igual a X 889 00:42:24,199 --> 00:42:28,360 No estoy creando un nuevo Array, más estoy creando dos punteros al mismo objeto 890 00:42:28,360 --> 00:42:33,199 Como Scanner es un objeto, pues funciona así 891 00:42:33,199 --> 00:42:38,840 Es lo que se llama paso por valor o paso por referencia 892 00:42:38,840 --> 00:42:40,960 Del que hablaremos dentro de un rato 893 00:42:40,960 --> 00:42:41,940 ¿Más preguntas? 894 00:42:42,659 --> 00:43:02,469 No 895 00:43:02,469 --> 00:43:06,150 Porque dentro de este bloque de aquí 896 00:43:06,150 --> 00:43:08,050 No existe ningún S 897 00:43:08,050 --> 00:43:11,610 Tú estás declarando 898 00:43:11,610 --> 00:43:13,409 Scanner S y aquí usas S 899 00:43:13,409 --> 00:43:16,309 Tu S aquí dentro es este S de aquí 900 00:43:16,309 --> 00:43:18,829 A la hora de llamarlo 901 00:43:18,829 --> 00:43:20,409 Haces una asociación 902 00:43:20,409 --> 00:43:22,590 Entre este S y este S 903 00:43:22,590 --> 00:43:24,409 Pero están en dos sitios distintos 904 00:43:24,409 --> 00:43:25,949 Están en dos bloques distintos, no se molesta 905 00:43:25,949 --> 00:43:26,369 ¿Y otra? 906 00:43:28,849 --> 00:43:31,349 Si en vez de S ahí arriba 907 00:43:31,349 --> 00:43:33,650 Si S es un string explotaría 908 00:43:33,650 --> 00:43:34,869 ¿Aquí? 909 00:43:34,869 --> 00:43:36,809 Claro, porque te dice 910 00:43:36,809 --> 00:43:38,849 No está definido ningún leginum 911 00:43:38,849 --> 00:43:40,730 Cuya firma sea 912 00:43:40,730 --> 00:43:42,230 Leginum string string 913 00:43:42,230 --> 00:43:54,360 Imagínate que tú tienes un escáner que lee de teclado 914 00:43:54,360 --> 00:43:55,699 Un escáner que lee de un fichero 915 00:43:55,699 --> 00:43:57,280 Un escáner que lee de internet 916 00:43:57,280 --> 00:44:00,860 Pues entonces dependiendo de donde quieres leer 917 00:44:00,860 --> 00:44:01,960 Pues usa uno o otro 918 00:44:01,960 --> 00:44:12,219 No, porque un número de ratón 919 00:44:12,219 --> 00:44:14,019 Un escáner no es para leer de ratón 920 00:44:14,019 --> 00:44:16,099 Pero si de un fichero, sí 921 00:44:16,099 --> 00:44:18,679 ¿Sí? 922 00:44:18,679 --> 00:44:21,019 Más dudas 923 00:44:21,019 --> 00:44:25,179 No hay dos escáneres, hay un escáner solo 924 00:44:25,179 --> 00:44:26,599 Lo repito 925 00:44:26,599 --> 00:44:28,860 Hay un escáner solo, aquí 926 00:44:28,860 --> 00:44:31,679 Escáner solo, hay un objeto escáner solo 927 00:44:31,679 --> 00:44:33,400 Solo que hay dos referencias al escáner 928 00:44:33,400 --> 00:44:36,610 Vale 929 00:44:36,610 --> 00:44:38,809 Entonces 930 00:44:38,809 --> 00:44:41,530 Aquí pide dos números 931 00:44:41,530 --> 00:44:43,610 Y luego dice, calcula área 932 00:44:43,610 --> 00:44:44,309 ¿Vale? 933 00:44:44,869 --> 00:44:47,230 ¿Qué será calcular área la de uno y la de dos? 934 00:44:47,670 --> 00:44:48,969 Pues será un método 935 00:44:48,969 --> 00:44:50,869 Es una procedura 936 00:44:50,869 --> 00:44:53,730 Es un procedimiento o es una función 937 00:44:53,730 --> 00:44:57,469 Función porque devuelve algo 938 00:44:57,469 --> 00:45:01,590 ¿Cuál es la firma de esta función? 939 00:45:05,690 --> 00:45:05,869 No 940 00:45:05,869 --> 00:45:08,289 Calcular, int, int 941 00:45:08,289 --> 00:45:09,809 Nombre y tipos 942 00:45:09,809 --> 00:45:11,050 ¿Sí? 943 00:45:11,929 --> 00:45:14,010 Entonces, si voy a mirar 944 00:45:14,010 --> 00:45:15,789 Public static int 945 00:45:15,789 --> 00:45:17,050 Devuelve un entero 946 00:45:17,050 --> 00:45:19,070 Calcular es un nombre 947 00:45:19,070 --> 00:45:22,050 Recibe un entero lado 1, entero lado 2 948 00:45:22,050 --> 00:45:25,369 Lado 1 se asociará con este lado 1 de aquí 949 00:45:25,369 --> 00:45:28,550 Lado 2 se asociará con este lado 2 de aquí 950 00:45:28,550 --> 00:45:30,269 Que serán los que he leído aquí 951 00:45:30,269 --> 00:45:31,869 Y aquí contesta tu pregunta de antes 952 00:45:31,869 --> 00:45:37,110 Y returna lado 1 por lado 2 953 00:45:37,110 --> 00:45:41,369 Esto de aquí es una expresión que se evaluará 954 00:45:41,369 --> 00:45:45,250 Sacará lo que es y este lo devuelve como entero 955 00:45:45,250 --> 00:45:48,269 Y este de aquí pilla ese entero y lo guarda en el área 956 00:45:48,269 --> 00:45:54,920 Estamos aprendiendo 957 00:45:54,920 --> 00:45:57,960 De todas formas es más bonito 958 00:45:57,960 --> 00:45:59,440 Este de aquí a poner esta cosa de aquí 959 00:45:59,440 --> 00:45:59,940 Que no se entiende 960 00:45:59,940 --> 00:46:13,550 ¿No hemos dicho antes que no? 961 00:46:16,329 --> 00:46:18,409 No se puede devolver un string unid 962 00:46:18,409 --> 00:46:20,170 O devolverse un string o devolverse un unid 963 00:46:20,170 --> 00:46:22,590 Pero puedes siempre devolver 964 00:46:22,590 --> 00:46:24,489 Un array de string donde por un lado 965 00:46:24,489 --> 00:46:26,469 Pones la palabra que quieres y en otro lado 966 00:46:26,469 --> 00:46:28,030 Un string que es un número 967 00:46:28,030 --> 00:46:30,170 Y luego harás algo para transformar 968 00:46:30,170 --> 00:46:31,030 Este string en un número 969 00:46:31,030 --> 00:46:48,360 Pues, tú estás llamando aquí una función 970 00:46:48,360 --> 00:46:58,449 A ver, tú tienes, piénsalo en abstracto 971 00:46:58,449 --> 00:47:03,309 Tú quieres crear una función a la que te pasan dos cosas 972 00:47:03,309 --> 00:47:09,090 Te pasan un mensaje y te pasan algo desde que tú puedes leer 973 00:47:09,090 --> 00:47:13,230 Si a ti te dan estas dos cosas, tú haces lo tuyo 974 00:47:13,230 --> 00:47:25,469 Que es imprimir en pantalla el mensaje y luego leer en esta cosa que te han dado un número, guardarlo dentro de una variable y revolver esa variable. 975 00:47:27,250 --> 00:47:38,909 Ahora, esto funciona siempre cuando te manden un mensaje, string, y algo que pueda leer de teclado, un escáner. 976 00:47:38,909 --> 00:47:42,730 Entonces, cuando tú lo vas a llamar este método 977 00:47:42,730 --> 00:47:46,929 Tú le pasarás un string 978 00:47:46,929 --> 00:47:51,349 Y le tienes que pasar algo que pueda leer de teclado 979 00:47:51,349 --> 00:47:53,449 ¿Qué es este algo que puede leer de teclado? 980 00:47:53,570 --> 00:47:54,730 Un objeto scanner 981 00:47:54,730 --> 00:47:57,570 Entonces tú te creas un objeto scanner 982 00:47:57,570 --> 00:48:00,369 Creas un nuevo objeto capaz de leer de teclado 983 00:48:00,369 --> 00:48:03,710 Y a él le dices, mira, haz lo tuyo 984 00:48:03,710 --> 00:48:06,449 Que es leer un número con este mensaje de aquí 985 00:48:06,449 --> 00:48:08,690 Y este objeto que puede leer de teclado 986 00:48:08,690 --> 00:48:09,489 Te lo paso aquí. 987 00:48:11,050 --> 00:48:14,010 Él hará una asociación entre este mensaje y este mensaje. 988 00:48:15,010 --> 00:48:22,329 Entonces, cada vez que tú usas aquí SMSG, estás haciendo esto. 989 00:48:23,110 --> 00:48:29,730 Y cada vez que aquí usas teclado, como esto está asociado con este S, estás usando S. 990 00:48:29,730 --> 00:48:53,070 A ver, tú aquí dentro tienes que usar un mensaje y tienes que utilizar un teclado 991 00:48:53,070 --> 00:48:55,070 Si no le das un nombre, ¿cómo los usa? 992 00:48:56,610 --> 00:48:59,650 Tendrás que decir, oye, mira, cuando a mí me llaman me pasarán un mensaje 993 00:48:59,650 --> 00:49:00,969 ¿Y este mensaje cómo se llama? 994 00:49:01,449 --> 00:49:02,110 Hola, Estefano 995 00:49:02,110 --> 00:49:04,889 Pues no, porque tú me puedes escribir hola, Estefano, me puedes escribir cocodrilo 996 00:49:04,889 --> 00:49:06,969 Entonces digo, vale, será una variable 997 00:49:06,969 --> 00:49:09,130 Y yo digo que esto es MSG 998 00:49:09,130 --> 00:49:27,730 Luego este msg ahora mismo no vale nada, pero aquí dentro digo imprímelo, ¿vale? Sea cual sea el contenido de smg. ¿Cuándo sabré cuándo vale? Cuando haré la llamada y entonces tú me has pasado un string y entonces yo puedo asociar el valor de este string con este msg. 999 00:49:27,730 --> 00:49:31,130 Esto se llama 1000 00:49:31,130 --> 00:49:33,170 Parámetro formal 1001 00:49:33,170 --> 00:49:35,650 Esto se llama 1002 00:49:35,650 --> 00:49:37,610 Parámetro actual 1003 00:49:37,610 --> 00:49:40,429 Parámetro formal es msg 1004 00:49:40,429 --> 00:49:41,670 Es una cosa genérica 1005 00:49:41,670 --> 00:49:43,210 Es imprime esto 1006 00:49:43,210 --> 00:49:46,369 Y en esta llamada de aquí 1007 00:49:46,369 --> 00:49:47,909 Actualmente 1008 00:49:47,909 --> 00:49:49,250 Este msg es