Prog2223 funciones y procedimientos - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
A ver, voy a grabar esta clase, por lo tanto si preguntáis algo o habláis mientras hay esta grabación
00:00:00
es porque me dais vuestro consentimiento a hablar y grabaros, ¿vale?
00:00:08
Si no, levantáis la mano y lo paro y bla bla bla bla, ya lo hemos dicho varias veces.
00:00:12
Vale, entonces, hoy vamos a ver, esta parte de aquí en realidad es una extensión,
00:00:20
una parte extra con respecto a lo que hemos visto de estructuras de control, ¿vale?
00:00:28
Esto de aquí lo podríamos ver como una estructura de control. ¿Os acordáis la estructura de
00:00:34
control que hemos visto nosotros? Los condicionales, los iterativos, for, while, if, lo que hacían
00:00:39
era cambiar un poco el normal flujo de ejecución de un programa, ¿no? Ya llegaba un momento
00:00:44
Y allí tomaba una decisión
00:00:52
Si era verdadera o condición
00:00:54
Hacía una serie de instrucciones
00:00:56
Si no era verdadera esa condición
00:01:00
Hacía otra cosa, ¿vale?
00:01:03
O hacía una serie de instrucciones
00:01:05
Y cuando llegaba al final de estas instrucciones
00:01:07
Volvía al principio si una condición era verdadera
00:01:09
Entonces en vez de tener
00:01:12
Como hacíamos los ejercicios cuando estábamos al principio de curso
00:01:13
Hacer una instrucción tras otra, tras otra, tras otra
00:01:18
Y seguir hasta el final
00:01:21
Pues cambiaba un poquito la secuencia
00:01:22
Volvía atrás o cosa por esto
00:01:26
Las funciones o procedimientos tienen una función parecida en un cierto sentido
00:01:28
En el sentido que llega un momento en que puedo pillar un trozo de código
00:01:34
Una parte de mi programa
00:01:41
Sacarlo del main
00:01:43
Que hasta ahora nosotros siempre hemos trabajado y solo hemos utilizado el main
00:01:45
Y darle un nombre, para que si yo quiero utilizar esta función, utilizar este trozo de código
00:01:49
Pueda referirme, pueda referenciar este trozo de código con su nombre
00:01:59
¿Para qué me sirve esto? Para muchas cosas
00:02:04
En particular, para ser básico, como la primera cosa digamos más sencilla para entender
00:02:08
Es para organizar código
00:02:16
En vez de tener todo el código
00:02:17
Dentro del main
00:02:19
Entonces se me vuelve complejo
00:02:20
Con muchas líneas de código
00:02:22
Pues si pillo un trozo
00:02:23
Lo saco fuera
00:02:25
Y lo llamo
00:02:26
Acceso a la base de datos
00:02:26
O login del cliente
00:02:28
¿Vale?
00:02:31
Yo cuando miro el main
00:02:32
Leo allí que se llama
00:02:33
Una función que tiene nombre
00:02:34
Login del cliente
00:02:36
O calcular no sé qué
00:02:37
Y sé que esa función sola
00:02:39
Independientemente de cómo esté implementada
00:02:42
De cuántas líneas de código tiene
00:02:44
Pues tiene esa funcionalidad
00:02:45
¿Vale?
00:02:47
Entonces el main se me vuelve más pequeño
00:02:48
Se me vuelve más fácil de leer y de organizar
00:02:51
¿Sí?
00:02:53
Y además
00:02:55
La cosa interesante de las funciones de los procedimientos
00:02:56
Es que pueden llevar parámetros
00:02:59
¿Vale?
00:03:01
Entonces
00:03:02
Un código que yo voy a ejecutar
00:03:03
Le voy a pasar
00:03:06
Un cierto parámetro, un cierto valor
00:03:08
O unos valores
00:03:10
Y su funcionamiento, el resultado que me dará
00:03:11
Dependerá de los parámetros que yo le paso
00:03:15
Para hacer un ejemplo básico
00:03:17
Si yo tengo un método que se llama calcular el cuadrado
00:03:19
¿Vale?
00:03:22
Le pasaré como parámetro el lado del cuadrado que yo quiero calcular
00:03:23
Y él me calculará el área del cuadrado del lado del número que le he pasado
00:03:28
¿Vale?
00:03:34
Para hacer un ejemplo
00:03:36
Entonces, vamos a ver un poquito
00:03:37
Qué tipo de cosas hay
00:03:39
Vamos aquí
00:03:42
Imaginémonos, aquí hace un ejemplo, ¿vale?
00:03:44
Diciendo, vamos a ver si en un programa se repite muchas veces el mismo código, ¿vale?
00:03:47
Como por ejemplo aquí
00:03:51
Nosotros lo que vamos a hacer es calcular el área, el perímetro de un rectángulo varias veces
00:03:53
Y cada vez cambia el tipo de rectángulo que yo tengo, ¿vale?
00:04:01
Entonces aquí tengo un rectángulo de lado 3 y 4
00:04:06
Y luego calculo la área, el perímetro
00:04:09
Y escribo el rectángulo de lado
00:04:11
Con sus lados, tiene área
00:04:14
Área y perímetro
00:04:15
¿Vale? Y luego hago lo mismo
00:04:17
Lo único que hago es cambiar
00:04:19
Los lados
00:04:21
Ahora en vez de utilizar lado 3 y 4
00:04:23
Utilizo lado 5 y 10
00:04:25
Y luego lado 2 y 7
00:04:27
¿Vale? Esto es un programa
00:04:29
Algo parecido
00:04:32
Hemos hecho al principio, ¿vale?
00:04:33
Un programa muy sencillo
00:04:34
Lo que noto es que está haciendo siempre lo mismo
00:04:36
¿Vale? Entonces
00:04:38
No tiene mucho sentido que yo vuelva a escribir
00:04:40
Todo este código
00:04:42
Si el código es el mismo
00:04:43
La idea sería pillar este código de aquí
00:04:45
Darle un nombre
00:04:48
Y luego reutilizar
00:04:50
Este código
00:04:53
Utilizando una función
00:04:54
O un procedimiento o lo que sea
00:04:56
¿Vale? Ya luego veremos
00:04:58
La diferencia entre procedimiento
00:05:00
Y
00:05:02
Función
00:05:04
¿Vale? Entonces, por ejemplo, algo así
00:05:06
Mi main se transforma en esta cosa aquí
00:05:08
Yo tengo calcular el perímetro de 3, 4
00:05:13
Calcular el perímetro de 5, 10
00:05:16
Calcular el perímetro de 2, 6, 7
00:05:18
Y esto, técnicamente, es más fácil de leer a nivel de main
00:05:20
Con respecto al anterior
00:05:24
Es mucho más organizado, ¿vale?
00:05:26
Luego, ¿qué harán estas cosas?
00:05:29
Pues si me interesa y lo quiero saber
00:05:31
La voy a mirar, voy a mirar cuál es su implementación
00:05:33
Ahora lo vamos a ver, ¿vale?
00:05:35
Pero ya sé que esta línea de aquí
00:05:37
Calcular el perímetro de 3, 4
00:05:40
Me tiene que calcular el perímetro del rectángulo
00:05:42
Que tiene el lado 3 y el lado 4
00:05:44
¿Sí?
00:05:46
¿Se entiende?
00:05:48
¿Dudas hasta aquí?
00:05:50
Vale, vamos a ver cómo declaro
00:05:52
Cómo creo un nuevo método
00:05:55
¿Vale? Por ejemplo, esto
00:05:57
¿Métodos o funciones?
00:05:59
En Java, funciones y procedimientos se llaman métodos
00:06:02
¿Vale?
00:06:05
Y están relacionados con la programación orientada a objetos
00:06:06
Por lo tanto, cuando estaremos en programación orientada a objetos
00:06:09
Todo esto serán métodos
00:06:12
Métodos normales o métodos estáticos, ¿vale?
00:06:13
En programación estructurada
00:06:17
No es un método, sino es más bien funciones o procedimientos
00:06:21
Que ahora veremos la diferencia, ¿vale?
00:06:24
Depende de qué devuelve
00:06:25
Si devuelve algo es una función, si no devuelve algo es un procedimiento, ¿vale?
00:06:27
Si ahora me equivoco y uso método
00:06:31
Pues por ahora lo utilizamos como sinónimo
00:06:33
Al fin y al cabo el concepto es el mismo
00:06:38
Es pillar un trozo de código
00:06:40
Sacarlo fuera y darle un nombre
00:06:42
Y parámetros
00:06:44
¿Vale?
00:06:45
Entonces si digo método
00:06:47
Vosotros cambiadlo en vuestra cabeza
00:06:48
Luego la grabación
00:06:50
Pues no sé cómo cambiar la grabación
00:06:53
Vale, entonces
00:06:56
Este aquí es una función
00:06:58
Vamos a crear una función
00:07:00
Bueno, concretamente esto sería un procedimiento, ¿vale?
00:07:03
Si os fijáis, estas palabras ya las hemos visto alguna vez, ¿vale?
00:07:07
Porque cuando nosotros hemos hecho main, este es el método main, llamado en Java, ¿vale?
00:07:11
Y es el punto de acceso a mi programa
00:07:16
Y siempre nosotros poníamos delante un public static void
00:07:20
¿Y qué son estas cosas? Ni idea, ¿vale?
00:07:23
Hasta ahora la hemos puesto siempre así
00:07:26
Y luego poníamos este string
00:07:29
Paréntesis, paréntesis
00:07:31
Arcs
00:07:33
¿Y qué es eso? No tengo ni idea, ¿vale?
00:07:35
Sí, lo sé, ¿vale?
00:07:37
Pero por qué va allí, no lo sabía
00:07:38
¿Sí? Ahora la idea es intentar
00:07:41
Entender un poquito qué es esto
00:07:43
¿Vale? Y luego crear cosas parecidas
00:07:45
¿Sí?
00:07:47
Voy también porque aquí hay muchas cosas
00:07:51
Hay muchas cosas para entender
00:07:53
Y algunas cosas son también complejas
00:07:55
Por lo tanto, yo voy, por ahora, simplificando algunos temas
00:07:57
Dejándolos a más para allá, ¿vale?
00:08:01
Por ejemplo, el public inicial
00:08:03
Public inicial no tiene mucho sentido
00:08:04
Mientras que no trabajemos con objetos, clases y visibilidad de los objetos
00:08:07
Por lo tanto, por ahora, nosotros este es public
00:08:12
Es público
00:08:15
Todos nos pueden ver y todos nos pueden utilizar
00:08:16
Ya está, ¿vale?
00:08:18
También sabemos que lo utilizamos en la clase
00:08:20
Public clase prueba 3
00:08:23
Y sabemos que si una clase es public
00:08:24
O sea, si se ponga así
00:08:26
Prueba 3 tiene que estar en un fichero
00:08:27
Que se llama prueba3.java
00:08:30
¿Sí? ¿Se acuerdan?
00:08:32
Veremos en un futuro que yo puedo crear
00:08:34
Clases no públicas
00:08:36
Y esas pueden no estar
00:08:38
En un fichero que se llama
00:08:40
No sé qué punto ya
00:08:42
¿Vale? Pero eso va a ser
00:08:43
Static
00:08:45
¿Qué es esto de static?
00:08:47
También no lo podemos saber muy bien
00:08:49
Sin saber el concepto de objeto
00:08:52
De instancia de objeto y de clase
00:08:54
¿Vale? No lo sabemos, no lo conocemos todavía, lo veremos en breve
00:08:56
Por ahora simplemente sabemos que todos los métodos y funciones que vamos a crear
00:08:59
Y procedimientos van a ser estáticos
00:09:04
¿Vale? ¿Por qué?
00:09:06
Lo tenemos que esperar un rato para entender por qué son estáticos
00:09:08
¿Vale? Pero por ahora simplemente
00:09:12
Como el main es estático
00:09:14
¿Vale? Y no sé crear objetos
00:09:17
He creado algunos objetos pero no sé muy bien qué son
00:09:19
¿Vale?
00:09:22
Pues entonces los métodos
00:09:22
Estoy en un contexto estático
00:09:24
O sea que esto es estático porque pone static
00:09:27
Y entonces los métodos que puedo llamar
00:09:29
Tienen que ser static también
00:09:32
Por ahora sumamos así
00:09:34
¿Vale?
00:09:35
Perfecto
00:09:37
De hecho, cuando escribís el nombre
00:09:38
Si os fijáis, esto calcula área pedímetro
00:09:41
Está como en cursiva
00:09:43
¿Vale?
00:09:45
Y esto es porque es un método estático
00:09:46
Si no fuera un método estático
00:09:47
No lo pondría en cursiva
00:09:49
¿Vale?
00:09:50
Pero bueno, por ahora
00:09:51
Todos para nosotros pondremos static
00:09:52
¿Vale? Fenómeno
00:09:55
Tercera palabrita, esto ya nos interesa más
00:09:56
Es void
00:09:58
Void que en inglés quiere decir como
00:09:59
Nada, vacío
00:10:02
¿Vale? Es porque
00:10:04
Estos métodos de aquí
00:10:06
Que estamos viendo, estos procedimientos
00:10:09
Concretamente que estamos viendo
00:10:11
No devuelven nada
00:10:12
Es decir, yo no me espero que al final
00:10:14
De este trabajo
00:10:17
Este método calcule algo
00:10:18
Y me lo devuelva a mí
00:10:20
¿A quién lo ha llamado?
00:10:22
¿Vale?
00:10:24
El método main
00:10:24
Aquí llama
00:10:26
¿Vale?
00:10:27
El método calcula área, perímetro, 3 y 4
00:10:28
Y no se espera
00:10:31
Que este método de aquí
00:10:32
Que este procedimiento
00:10:34
Calcule algo y me lo devuelva
00:10:36
Y me lo dé
00:10:39
¿Vale?
00:10:40
Hará algo
00:10:41
Pero no me da el resultado
00:10:42
Si me diera un resultado
00:10:44
Yo podría hacer algo así
00:10:47
No, aquí no lo puedo hacer
00:10:49
Sí, esperad un segundo que pillo un
00:10:52
Block de notas
00:10:55
Para escribir
00:10:57
Si
00:10:58
Calcula área perímetro me diera
00:11:01
Algo, yo podría esperarme
00:11:05
Algo así, por ejemplo, imaginaos que
00:11:07
Me espero un intero, pues podría hacer
00:11:09
Int x es igual
00:11:11
Es igual a
00:11:13
Calcula área
00:11:15
Y perímetro
00:11:17
De 3 y 4
00:11:19
¿Vale?
00:11:23
Esta cosa de aquí sería, vale, ok
00:11:26
Tú haz lo que tienes que hacer
00:11:28
Al final calcularás algo
00:11:30
Y este es algo
00:11:32
Me lo devuelves
00:11:34
Me lo das a mí, ¿vale?
00:11:36
Entonces, el resultado de esta operación
00:11:38
De aquí
00:11:41
Lo guardas, por ejemplo, aquí dentro
00:11:41
¿Sí? Y esto sería una función
00:11:44
Para que esto pueda ser
00:11:46
esto
00:11:49
no puede ser
00:11:51
void
00:11:54
si esto es void
00:11:55
quiere decir que no lo hace
00:11:58
¿vale? no me da
00:11:59
un resultado
00:12:02
hace operaciones
00:12:03
¿vale? pero no me devuelve
00:12:05
un resultado
00:12:07
¿se entiende esto?
00:12:08
una función
00:12:12
la diferencia que tiene con respecto al procedimiento
00:12:13
es que si devuelve algo
00:12:16
Es decir, una cosa como esta de aquí
00:12:17
Que hemos visto ahora, que he escrito ahora
00:12:20
Esta sería una función
00:12:22
Porque después de haber hecho lo que sea
00:12:27
No lo sé qué es
00:12:30
Pues crea un entero
00:12:31
Este entero me lo pasa a mí
00:12:33
Que soy el que ha llamado este método
00:12:36
¿Vale?
00:12:38
Esto sería el main, por ejemplo
00:12:38
Y este valor final se guarda dentro de x
00:12:40
¿Sí?
00:12:44
Podría también utilizarlo 3 más esta cosa aquí, ¿vale?
00:12:45
Como este de aquí devuelve un entero, este es un int, le sumo 3 y el resultado lo pongo dentro de x, ¿vale?
00:12:50
Esto sería del tipo que devuelve.
00:13:01
Si devuelve un int, pues este sería un int.
00:13:05
Si devuelve un boolean, pues este sería un boolean.
00:13:07
Entonces esto no tendría sentido.
00:13:10
Pero podría hacer
00:13:11
Si esto devolviera un boolean
00:13:13
Podría hacer un if
00:13:15
Esta cosa de aquí
00:13:16
Entonces haz algo
00:13:18
Porque al final
00:13:22
Después de haber hecho todo el trabajo
00:13:24
Que haga esta cosa aquí, que no lo sé
00:13:26
Me dará un true o un false
00:13:28
¿De acuerdo?
00:13:30
Si en vez es un procedimiento
00:13:32
O sea que tiene void
00:13:34
Esta cosa aquí no la puedo hacer
00:13:36
Porque no me devuelve un valor
00:13:38
Hace operaciones
00:13:40
Hace lo que sea, escribe en pantalla
00:13:41
Él, no lo sé
00:13:44
Pero al final no me dice
00:13:45
Y el valor calculado es esto
00:13:46
¿Se entiende?
00:13:48
¿Dudas?
00:13:53
Vale, entonces
00:13:56
Por ejemplo, en la que tenemos nosotros
00:13:57
Como estos son void
00:13:59
No puedo hacer una cosa así
00:14:00
No puedo tampoco hacer
00:14:02
Una cosa así
00:14:04
Entre x es igual
00:14:06
Oye, pero esto calcula el perímetro
00:14:08
Pues esto tiene que ser un entero, un double
00:14:11
Sí, pero por como está definido
00:14:13
El valor que calcula
00:14:18
Será él, por ejemplo, que lo escribe en pantalla
00:14:20
O será él que hace lo que sea con ese valor
00:14:23
Pero no te lo da a ti
00:14:25
No te lo devuelve
00:14:27
¿Dudas sobre esto?
00:14:29
Vale
00:14:32
Entonces, cuando un trozo de código con nombre
00:14:33
No devuelve nada
00:14:37
Se suele llamar procedimiento
00:14:39
Cuando un trozo de código con nombre
00:14:41
Devuelve algo
00:14:44
Se suele llamar función
00:14:45
Cuando un trozo de código
00:14:46
Está asociado con un objeto
00:14:49
Y trabaja con programación de un objeto
00:14:51
Se suele llamar método
00:14:53
Así simplificado
00:14:54
¿Dudas?
00:14:56
Y esta es la diferencia básica
00:14:58
Entre función, procedimiento y método
00:15:00
¿Dudas?
00:15:03
En realidad en Java
00:15:06
Como en Java estamos utilizando objetos siempre
00:15:07
Pues todos son métodos
00:15:09
¿Vale?
00:15:11
Pero por ahora nosotros ignoramos la parte orientada a objetos de Java
00:15:12
Y por lo tanto para nosotros son funciones
00:15:16
Y si me decís que son métodos, me vale
00:15:19
¿Dudas?
00:15:21
¿Sigo?
00:15:24
Vale
00:15:25
Entonces, volvamos aquí
00:15:26
Entonces tengo
00:15:28
Public static, son así, por ahora
00:15:30
Void, porque no devuelvo nada
00:15:32
Veremos ejemplos después de cosas que devuelve
00:15:35
¿Vale?
00:15:38
Nombre que doy a este trozo de código, a esta función, a este procedimiento
00:15:38
Y luego una lista de parámetros
00:15:43
¿Vale?
00:15:47
Estos son, cuando yo llamo a esta función de aquí
00:15:49
Le daré una serie de valores
00:15:51
Unos valores que son parámetros
00:15:54
Son valores que parametrizan este procedimiento, esta función
00:15:56
¿Vale?
00:15:59
Entonces, ¿qué parámetros recibe?
00:16:00
¿Qué necesita este trozo de código para poder funcionar?
00:16:02
Para calcular el área y el perímetro, estamos hablando de rectángulos
00:16:07
Pues entonces
00:16:11
Vale, ahí, espera, yo no sé si está grabando o no
00:16:12
Ahora tengo un problema
00:16:18
Aquí pone pausar grabación
00:16:19
Pongo que está grabando
00:16:23
Esa es la bonita directa
00:16:25
¿Lo pone para algún lado que está grabando?
00:16:27
Espero que sí
00:16:30
Sí, lo pone aquí, rec, vale, muy bien
00:16:31
Entonces, para calcular el perímetro de un rectángulo
00:16:36
Estamos trabajando en un rectángulo, ¿vale?
00:16:43
Aquí a lo mejor habría sido interesante poner de rectángulo o algo por el estilo
00:16:44
¿Para qué? Porque de un triángulo no sería esto, ¿vale?
00:16:48
De un triángulo no necesito lado y lado, necesito otras cosas, base, altura o lo que sea
00:16:51
¿Vale? Pero aquí estamos hablando de rectángulos, ¿vale?
00:16:56
Por lo tanto, ¿qué necesito para calcular el área de un rectángulo y el perímetro de un rectángulo?
00:16:59
Pues los lados, por lo tanto tengo estos dos parámetros
00:17:04
Tengo el parámetro
00:17:07
Lado 1 y lado 2
00:17:08
¿Vale?
00:17:10
Que son los dos lados distintos de un retangón
00:17:11
Si fuera la área de un cuadrado
00:17:13
El perímetro de un cuadrado
00:17:15
Necesitaría un solo
00:17:19
Entonces lado 2 no lo pondría
00:17:20
Pondría lado, int lado
00:17:23
Es más, si yo quiero que sea un double
00:17:24
Pues pondría double lado 1
00:17:26
Double lado 2
00:17:28
Es más, si yo quiero saber también
00:17:29
el color, pues pondría ahí
00:17:32
int lado 1, int lado 2
00:17:35
string color
00:17:37
¿vale? lo que necesite
00:17:38
para poder trabajar
00:17:40
¿vale? entonces pienso en
00:17:43
que va a hacer este procedimiento
00:17:45
calcular el perímetro, vale, que necesito
00:17:47
necesito lado y lado
00:17:49
¿vale? ¿cuánto vale la de 1 y la de 2?
00:17:51
ni idea
00:17:54
¿vale?
00:17:55
ahora mismo, en fase
00:17:57
de creación de este
00:17:59
Procedimiento, no tengo
00:18:00
Idea de cuánto valga el lado 1
00:18:03
Y cuánto valga el lado 2
00:18:05
Son parámetros, son genéricos
00:18:06
¿Vale?
00:18:10
Yo ahora aquí dentro
00:18:10
Los voy a utilizar como parámetros
00:18:12
Como variables
00:18:15
En el momento en que alguien
00:18:16
Me llame, me dirá
00:18:19
Cuánto vale el lado 1
00:18:21
Y cuánto vale el lado 2
00:18:22
¿Sí? ¿Me seguís?
00:18:24
O sea, la clave de esto
00:18:29
es que estoy abstraendo
00:18:30
¿cuánto vale el lado 1? no lo sé
00:18:32
vale el lado 1, cada vez que tengo
00:18:34
que utilizar el lado 1, utilizaré el lado 1
00:18:36
esta será una
00:18:38
variable, una variable que existe dentro
00:18:40
de mi método, dentro de mi función
00:18:42
dentro de mi procedimiento
00:18:44
¿vale? y que
00:18:45
ahora mismo no vale nada
00:18:48
en un futuro cuando
00:18:50
alguien use este procedimiento
00:18:52
me tendrá que decir
00:18:54
cuánto vale el lado 1 y cuánto vale el lado 2
00:18:56
y entonces yo aplicaré
00:18:58
lo que viene aquí dentro
00:19:00
utilizando los valores
00:19:01
que me has dado tú en ese momento
00:19:03
¿vale? que si os acordáis
00:19:06
son estos
00:19:08
cuando yo llamo
00:19:09
calcular el perímetro de 3,4
00:19:12
este 3
00:19:14
se asocia al lado 1
00:19:16
y este 4
00:19:18
se asocia al lado 2
00:19:20
entonces cuando
00:19:21
aquí dentro encontraré el lado 1
00:19:24
para mí es 3
00:19:26
Y cuando encuentro el lado 2, para mí es 4
00:19:27
Cuando después se vuelva a llamar esto con 5 y 10
00:19:30
Vuelvo a hacer lo mismo, pero esta vez el lado 1 me vale 5
00:19:35
Y el lado 2 me vale 10
00:19:39
Por lo tanto, cuando hago esta operación de aquí, haré 5 multiplicado 10
00:19:41
Estos se llaman parámetros formales
00:19:45
Y estos son los parámetros actuales
00:19:53
Estos parámetros formales son como la forma. No es un parámetro concreto, sino es la idea de ese parámetro. Lo vas a utilizar sin saber su valor actual, su valor real.
00:19:57
En el momento en que se hace una llamada a este método de aquí o a este procedimiento, pues se tiene que instanciar los parámetros formales con valores actuales.
00:20:12
En esta ejecución, el valor actual del parámetro lado 1 es 3
00:20:24
Y el valor actual del parámetro lado 2 es 4
00:20:33
¿Se entiende?
00:20:37
¿Dudas?
00:20:40
¿Y qué hago aquí dentro?
00:20:43
Pues me creo int área de rectángulo es igual a lado 1 por lado 2
00:20:44
Int perímetro es lado 1 por 2 más lado 2 por 2
00:20:48
Y luego escribo el rectángulo de lado
00:20:51
Lado 1 y lado 2
00:20:54
Esto es el código que tenía antes
00:20:56
¿Vale?
00:20:59
El código que se repetía muchas veces
00:21:00
Pues lo he copiado aquí
00:21:02
Entonces cada vez que llamo
00:21:03
Esta cosa de aquí
00:21:06
Me ejecutará estas tres
00:21:07
Funciones
00:21:09
Estas tres
00:21:12
Instrucciones
00:21:13
Cada vez con un parámetro distinto
00:21:15
Un parámetro distinto
00:21:18
dudas habría podido hacer esto un poquito distinto es decir vale el
00:21:20
resultado de esto aquí o sea este string de aquí lo es que aquí hay un string que
00:21:29
dice el rectángulo de lado bla bla bla bla bla bla en vez de escribirlo tú
00:21:34
directamente devuélveme lo entonces esto no habría sido una para un
00:21:38
procedimiento habría sido una función y esto no habría escrito nada habría
00:21:45
Calculado esta string de aquí
00:21:51
Y luego la habría devuelta
00:21:54
Aquí al
00:21:55
Al main
00:21:57
Que habría podido guardarla dentro de una string
00:21:59
Por ejemplo, habría podido escribirla
00:22:02
Él, no lo sé
00:22:04
Habría utilizado esa cosa
00:22:05
¿Vale? Pero no
00:22:07
He querido que haga todo
00:22:09
Este procedimiento
00:22:11
Entonces, ¿cómo funciona?
00:22:13
El main empieza, hace una llamada
00:22:14
¿Vale? Hace una llamada
00:22:17
Y aquí está el concepto de estructura de control
00:22:19
Quiere decir que no sigo aquí debajo
00:22:21
Sino que salto aquí
00:22:23
Ejecuto estas tres líneas de código
00:22:26
Luego vuelvo aquí
00:22:31
Hay otra llamada
00:22:33
Entonces vuelvo aquí
00:22:36
Ejecuto estas tres líneas de código
00:22:37
Pero esta vez con parámetros distintos
00:22:39
Vuelvo aquí
00:22:41
Otra llamada
00:22:42
Vuelvo aquí, ejecuto estas tres
00:22:45
Y vuelvo aquí, y acabo
00:22:47
¿Dudas?
00:22:49
¿Preguntas hasta aquí?
00:22:53
Vale, sigamos adelante
00:22:58
Procedimiento, ¿vale?
00:22:59
Un procedimiento es un conjunto de instrucciones que cumplen una determinada tarea
00:23:01
¿Vale?
00:23:04
Entonces aquí la tarea ¿Cuál era?
00:23:05
Era calcular área y perímetro
00:23:07
¿Vale?
00:23:10
Habría podido dividirlo
00:23:10
Crear un método, una función o un procedimiento para crear el área
00:23:11
y uno para calcular el perímetro
00:23:19
y luego juntarlos de alguna forma
00:23:22
eso depende a mi, yo tengo una tarea
00:23:23
pues voy a crear toda
00:23:25
voy a asociar
00:23:27
todas las instrucciones necesarias
00:23:29
para hacer esa determinada tarea a un nombre
00:23:31
vale
00:23:33
entonces luego cuando
00:23:34
quiero hacer esa tarea
00:23:37
pues simplemente llamo ese nombre
00:23:39
con los parámetros que necesita para hacer
00:23:41
esa tarea, si necesita tres parámetros
00:23:43
ponde tres parámetros y si necesita cien
00:23:45
parámetros pone cien parámetros
00:23:47
Si necesita 100 parámetros, probablemente le daré un array
00:23:48
¿Vale? Lo que haga falta
00:23:52
Esta tarea puede depender de algunos valores, ¿vale?
00:23:54
Llamados parámetros o no
00:23:58
Como por ejemplo, calcula área de lado 1 y lado 2
00:23:59
Saluda de esta cosa ahí o saluda nombre, ¿vale?
00:24:02
Estos son llamadas a métodos, ¿vale?
00:24:05
Calcula área, calculará una área
00:24:08
Entonces necesita dos lados, por ejemplo
00:24:10
Aquí hay otro método que no sé qué hace
00:24:12
Saludará, dirá hola, ¿vale?
00:24:15
Que si yo lo llamo saluda sin parámetros
00:24:16
Como no sabe a quien tiene que ir a saludar
00:24:20
Dirá hola
00:24:23
¿Vale?
00:24:24
Si en vez de llamo saluda y le paso un parámetro
00:24:25
Que es nombre, ¿qué es nombre?
00:24:29
Será una variable, una variable de tipo string por ejemplo
00:24:32
Donde dentro he puesto el nombre mío, Estefano
00:24:35
Pues ahora me dirá hola, Estefano
00:24:37
¿Sí?
00:24:40
Entonces este es el mismo método, entre comillas
00:24:42
Son dos métodos distintos
00:24:44
Son dos funciones distintas
00:24:45
O procedimientos distintos
00:24:48
Que hacen lo mismo
00:24:49
Hacen la misma tarea
00:24:51
Hacen la tarea de saludar
00:24:53
Pero saluda sin parámetros
00:24:54
Saluda genéricamente
00:24:56
Hola usuario
00:24:57
Y si en vez tú le has pasado
00:24:58
Como se llama el usuario
00:25:01
Pues te dirá hola y es tu nombre
00:25:02
¿Se entiende?
00:25:04
¿Dudas?
00:25:06
¿Cómo se declara?
00:25:10
Pues lo hemos visto
00:25:12
Public static void
00:25:13
Porque estamos hablando de procedimientos
00:25:15
Entonces el procedimiento es void
00:25:17
El nombre del procedimiento
00:25:18
Y luego tipo 1, parámetro 1
00:25:20
Tipo 2, parámetros 2
00:25:23
Tipo 3, parámetros 3
00:25:25
Cuidado, puede no tener ninguno
00:25:26
Si yo hago un procedimiento que no necesita parámetros
00:25:27
Pues no le pongo nada
00:25:32
Abro paréntesis, cero paréntesis
00:25:33
¿Dudas?
00:25:35
¿Cómo se llama un procedimiento?
00:25:39
Pues con el nombre
00:25:41
Y luego una secuencia de valores
00:25:42
Que se corresponderán con los parámetros que tengo aquí
00:25:45
Si aquí tengo int, double, boolean
00:25:48
Lo llamaré con un intero, coma, un booleano
00:25:52
No, ¿qué era el segundo? Un double
00:25:57
Segundo un double y tercero un booleano
00:25:58
¿Sí?
00:26:01
Tiene que ir en el mismo orden
00:26:02
Si yo le he dicho int, int, boolean
00:26:04
No puedo luego poner un booleano, un entero, un entero
00:26:07
¿Vale? Porque se lía
00:26:10
El primero tiene que ser el que me has dicho
00:26:12
El segundo es el que me has dicho
00:26:14
El tercero es el que me has dicho
00:26:16
¿Vale? Para entendernos
00:26:17
Yo aquí me espero dos int
00:26:18
Si tú me llamas calcular el perímetro
00:26:21
Con un int solo
00:26:24
No va a funcionar
00:26:25
Dice, me falta uno
00:26:26
Si tú le das un boolean
00:26:28
No te va a funcionar
00:26:30
Dice, yo necesito un int
00:26:32
¿Dudas?
00:26:33
Creo que ahora vienen
00:26:39
Aquí
00:26:40
¿Ejemplos?
00:26:42
Minúscula sería en...
00:26:43
El nombre
00:26:44
El nombre siempre empieza en la barra minúscula
00:26:47
Se diferencian de las variables
00:26:51
Los dos se ponen con minúscula
00:26:53
Pero un método acaba con paréntesis
00:26:55
Dentro de la variable no
00:26:57
¿Vale?
00:26:58
Ejemplo
00:27:02
¿Vale?
00:27:03
Aquí tengo mis dos métodos
00:27:05
El método saluda
00:27:07
Bueno, estos son procedimientos
00:27:08
¿Vale?
00:27:11
El método saluda que es un método
00:27:13
Que no devuelve nada y dice hola a todos
00:27:15
¿Por qué? Porque es genérico, no me pasa nada
00:27:17
Si en vez de yo pongo saluda con un parámetro string nombre
00:27:20
Lo que hace es hola y luego le pega detrás el nombre que tú me has dado
00:27:24
Estas son las definiciones de los métodos
00:27:29
¿Cómo se usan?
00:27:33
Pues por ejemplo yo puedo llamar saluda
00:27:35
Entonces saluda me llamaría este método de aquí
00:27:37
El sin parámetros porque no le he puesto ningún parámetros
00:27:40
Y me escribiría hola a todos
00:27:43
Luego llamo saluda
00:27:45
Estefano
00:27:47
Y lo que me hace, me llama este de aquí
00:27:48
Porque le he pasado un string
00:27:51
Entonces me pondría hola, espacio, Estefano
00:27:52
Y luego, fijaos aquí
00:27:55
Yo creo una variable string
00:27:57
Que tenga dentro Paco
00:27:58
Y luego llamo saluda de n
00:28:00
Como este n es un string
00:28:02
Pues me llama este de aquí
00:28:04
¿Vale?
00:28:05
Asociaría nombre
00:28:08
El parámetro formal nombre
00:28:09
Con el valor actual n
00:28:11
Que en verdad es una variable
00:28:13
Que tiene dentro pago
00:28:15
Por lo tanto ahora nombre vale pago
00:28:16
Justo
00:28:18
Y me diría hola pago
00:28:20
¿Dudas?
00:28:22
Más ejemplos
00:28:28
Por ejemplo, y aquí tengo un repite saludo
00:28:30
Que pilla dos parámetros
00:28:34
Un nombre
00:28:36
Y cuántas repeticiones
00:28:37
¿Vale?
00:28:39
Entonces me dice, desde igual a cero
00:28:41
Y menor de repeticiones y más más
00:28:43
O sea, por repeticiones veces
00:28:45
Lo que haces es decir hola el nombre
00:28:48
Entonces este de aquí es un método solo
00:28:52
Que cuando lo llamo con Luis
00:28:54
Pues me dirá hola Luis, hola Luis, hola Luis, hola Luis
00:28:55
Tantas veces cuanto lo he puesto aquí
00:28:58
Por ejemplo 4
00:29:00
Fijaos que necesita un string y un int
00:29:01
Pues yo cuando lo llamo string e int
00:29:06
¿Podría ser esta una variable tipo string?
00:29:09
Sí
00:29:12
¿Podría ser esta una variable tipo int?
00:29:12
Sí
00:29:15
¿Podría ser esto de aquí el resultado de una operación?
00:29:15
Sí
00:29:18
¿Con qué sea un int el resultado de la operación?
00:29:19
Sí
00:29:21
¿Podría ser esto una posición de un array de string?
00:29:21
Sí
00:29:26
Todo lo que tenga tipo string puede ir aquí
00:29:26
Y todo lo que tenga tipo int puede ir aquí
00:29:29
Y se utilizará aquí con su valor y su valor
00:29:33
¿Dudas?
00:29:36
¿Preguntas?
00:29:39
Se puede usar también para ordenar el código
00:29:46
Hacerlo más leíble, ¿vale?
00:29:48
Lo que decíamos antes
00:29:49
Vale, aquí se me han colado dos puntos
00:29:50
Pero
00:29:53
Imaginamos que yo tengo un main
00:29:53
En vez de tener todo el código allí
00:29:56
Metido
00:29:58
Pues tengo un método
00:30:00
Inicializa el sistema
00:30:01
Calcula datos
00:30:02
Escribe resultados
00:30:03
Esto ya sé
00:30:04
Que mi main hará tres pasos
00:30:05
Iniciará el sistema con lo que tiene que inicializar
00:30:08
Luego después
00:30:11
Calculará los datos
00:30:12
Y hará las operaciones que tiene que hacer
00:30:14
Y al final
00:30:16
Los resultados me los escribirá de alguna forma
00:30:16
¿Cómo se hacen estas tres cosas?
00:30:19
Pues estarán aquí, aquí y aquí
00:30:21
No lo sé, aquí le he metido comentarios
00:30:24
Lo tengo que implementar
00:30:26
¿Por qué esto es interesante?
00:30:28
Primero porque si a mí no me interesa cómo se hacen las cosas
00:30:31
Sino lo que se está haciendo, me leo solo esto
00:30:35
Aquí está escrito lo que se está haciendo
00:30:38
¿Cómo se hace?
00:30:41
No me importa
00:30:42
Otra cosa
00:30:43
En términos de trabajo
00:30:45
Yo podría
00:30:47
Pillar distintos
00:30:49
Grupos de trabajo, distintos
00:30:51
Empleados y decirle, mira, oye, tú
00:30:53
Te encargas de la inicialización de sistemas
00:30:55
Rellena este método
00:30:58
De aquí
00:30:59
Otro grupo, este método de aquí
00:31:00
Otro grupo, este método de aquí
00:31:03
Os voy a dar las
00:31:04
Especificaciones de cómo
00:31:06
Qué tiene que hacer cada uno de estos
00:31:09
¿Vale?
00:31:12
Inicialización de sistemas tiene que
00:31:13
Inicializar un array
00:31:14
meter los nombres de los
00:31:16
clientes, hacer no sé qué
00:31:18
cuánto, vale, calcular datos
00:31:20
¿qué tiene que hacer? se espera que un array
00:31:22
ya esté inicializado, porque
00:31:24
aquí es donde se inicializa
00:31:26
y lo que hace es pillar los nombres
00:31:27
de los clientes, añadirle
00:31:30
un código, no sé qué, no sé cuánto
00:31:32
¿y qué tiene que hacer este aquí? pues se espera
00:31:34
que el proceso
00:31:36
ya haya acabado, ya esté
00:31:38
el resultado final y tiene que imprimir
00:31:40
los resultados, vale, y en un cierto
00:31:42
sentido puedo separar el trabajo entre ellos
00:31:44
dudas
00:31:46
fijaos que son todos
00:31:50
void, son todos proceeding
00:31:52
vale, entonces
00:31:53
la idea
00:31:56
es, por un lado
00:31:58
ordenar el código y hacerlo más leíble
00:32:00
y ser más fácil, por otro lado
00:32:02
generalizar
00:32:04
los trabajos, vale
00:32:05
en vez de hacer mil veces lo mismo
00:32:08
pues generalizo
00:32:10
la operación que estoy haciendo
00:32:12
Y pongo un método que me generaliza
00:32:14
Esa operación
00:32:17
Y luego llamo ese método todas las veces que quiero
00:32:18
Parametrizado
00:32:20
¿Dudas?
00:32:23
¿Entonces qué es una función?
00:32:29
Pues lo mismo
00:32:30
Pero os repito que la función
00:32:31
Al final de todo
00:32:33
Ha calculado algo
00:32:35
Ha calculado un entero, ha calculado un double
00:32:37
Ha calculado un objeto, ha calculado algo
00:32:39
Y esa cosa
00:32:42
Me la devuelve a mí
00:32:44
¿A quién? ¿A quién la he llamado?
00:32:45
Si lo habéis entendido, aquí hay dos cosas
00:32:48
Hay por un lado donde se declara el método, la función o el procedimiento
00:32:51
Y por otro lado donde se llama ese método, función o procedimiento
00:32:56
Esto es una llamada a un procedimiento
00:33:02
Esta es la definición de procedimiento
00:33:05
Entonces la idea es que como es un procedimiento, como es void
00:33:07
No me espero que me devuelva nada
00:33:12
Entonces lo llamo y ya está
00:33:14
Si me esperara que esto calcula algo
00:33:16
Y luego me devuelve a mí que lo estoy llamando
00:33:19
Un valor, pues entonces este valor tendría que hacer algo con él
00:33:22
Guardarlo en una variable, utilizarlo en un if
00:33:26
Ponerlo dentro de un array, no lo sé
00:33:29
¿Vale? Pero algo tendría que hacer con él
00:33:34
Si no, calculo el valor del área
00:33:36
Y luego este valor calculado, pues lo pierdo
00:33:40
Si no lo guardo por algún lado para utilizarlo
00:33:43
Pues lo pierdo, o lo imprimo directamente en pantalla
00:33:45
¿Vale? Fenomenal
00:33:47
O si no lo pierdo, ¿vale?
00:33:48
Entonces, vamos a ver ejemplos
00:33:51
Por ejemplo, estas son llamadas
00:33:53
De funciones, ¿vale?
00:33:57
Intarea es igual a
00:34:00
Calcular área del lado 1 al lado 2
00:34:01
Me espero que calcular área sea una función
00:34:03
Pille el lado 1, pille el lado 2
00:34:05
Haga los cálculos y el resultado
00:34:07
De esto que es el área
00:34:09
Me lo guardo en intarea
00:34:11
A este punto puedo hacer un system.auto.println
00:34:12
El área del cuadrado
00:34:16
El área del rectángulo es
00:34:18
Área, porque lo tengo allí
00:34:19
¿Vale?
00:34:21
O crea saludo de un nombre
00:34:22
Entonces, antes me escribía directamente
00:34:25
Hola en pantalla, pues ahora no
00:34:27
Ahora me crea un string con escrito dentro
00:34:29
Hola y el nombre, hola Stefano
00:34:31
Y este string me lo devuelve
00:34:33
A mí que lo he llamado
00:34:36
Y yo me lo guardo en una variable tipo string
00:34:37
Y luego lo uso
00:34:40
Como se declara
00:34:44
Una función
00:34:51
Exactamente igual que antes un procedimiento
00:34:53
La única cosa que cambia
00:34:56
Es que el tipo devuelto ahora no es void
00:34:57
Pero es el tipo de lo que me espero que me devuelva
00:35:00
Es un cálculo que al final
00:35:02
Devuelve un int
00:35:04
Pues aquí pondré int
00:35:05
Quiero al final me da un double
00:35:06
Pues aquí pondré double
00:35:09
Da un boolean, boolean, da un string, string
00:35:10
Y el resto es igual, el nombre y los tipos de parámetros que necesita para trabajar
00:35:12
¿Cómo se llama?
00:35:17
Pues se llama igual, nombre con tipo valor, valor, valor, igual al otro
00:35:21
Solo que normalmente el resultado se guarda en una variable para utilizarlo
00:35:27
Si la variable es nueva, la declaro, int x es igual a lo que de esto
00:35:31
Y si en vez lo había ya creado antes
00:35:38
Pues puedo hacer x igual
00:35:40
Lo que sea
00:35:42
¿Sí?
00:35:43
O lo puedo usar directamente
00:35:45
¿Sí?
00:35:47
Ahora le damos ejemplo
00:35:48
Por ejemplo aquí
00:35:49
¿Vale?
00:35:53
Fijaos
00:35:54
Ahora ha cambiado saluda
00:35:55
Ahora ya no es un procedimiento
00:35:56
Es una función porque aquí tiene string
00:35:58
Me espero que al final
00:36:00
Me devuelva un string
00:36:03
¿Vale?
00:36:05
Entonces ¿Cómo lo hago?
00:36:07
Por ejemplo esto de aquí
00:36:08
saluda, pilla como parámetros un nombre
00:36:09
fijaos que ahora no lo escribe
00:36:11
lo que crea es
00:36:13
hola más nombre
00:36:15
crea este string
00:36:17
lo guarda dentro de la variable
00:36:18
resultado que es de tipo
00:36:21
string
00:36:23
y luego palabra reservada
00:36:24
return resultado
00:36:27
esto es el concepto de
00:36:29
devuelve resultado
00:36:31
lo que hace esta función
00:36:33
es pillar estos parámetros
00:36:35
Construirme un string
00:36:38
Y este string me lo devuelve
00:36:39
Si yo no pongo esta cosa de aquí
00:36:41
Y he puesto
00:36:44
String aquí, me da un error
00:36:45
Me dice, oye mira
00:36:48
Tú has dicho que devuelve un string
00:36:49
Pero no has hecho return de nada
00:36:51
¿Vale?
00:36:52
¿Y cómo lo uso?
00:36:56
Por ejemplo, string saludo1
00:36:57
Es igual a saludaStéfano
00:36:59
¿Vale?
00:37:01
Fijaos que el resultado de esta cosa de aquí
00:37:03
Me lo guardo en saludo1
00:37:05
O tengo una string Paco
00:37:07
Tengo otro string que es saludo2
00:37:11
Que es igual a saluda de esta variable de aquí
00:37:14
Entonces, ¿cuánto vale saluda1?
00:37:17
No
00:37:23
Hola, Estefano
00:37:24
¿Y cuánto vale saluda2?
00:37:25
Hola, Paco
00:37:28
Y luego los imprimo en pantalla
00:37:29
¿Sí?
00:37:31
Diferencia de antes
00:37:35
Es que antes, cuando hacía saluda a Estefano
00:37:36
Como procedimiento, no lo puedo guardar en una variable
00:37:38
Y ahora sí, porque el resultado de este de aquí es que me devuelve a mí un valor que es un string
00:37:41
¿Cómo lo sé? De esto
00:37:48
¿Podría hacer int saludo1 igual a saludo a Estefano?
00:37:50
No, porque el resultado de esta operación no es un int
00:37:57
Es un string, entonces no lo puedo guardar en una variable int
00:38:01
¿Verdad?
00:38:05
¿Dudas?
00:38:10
Más ejemplos
00:38:14
¿Qué es esta cosa aquí?
00:38:16
Es una función que se llama repiteSaludo
00:38:29
Pilla como parámetros un nombre y repeticiones
00:38:32
Y devuelve una string
00:38:37
¿Vale?
00:38:39
¿Qué hace dentro?
00:38:41
Crea un string vacío
00:38:42
Por repeticiones veces
00:38:44
Lo que hace es concatenar al resultado
00:38:47
Hola y un nombre más un espacio
00:38:50
¿Vale?
00:38:54
Y lo guarda otra vez en resultado
00:38:55
Entonces irá pegando
00:38:58
Hola y el nombre que me has pasado
00:39:00
Espacio, hola y el nombre que me has pegado
00:39:03
Espacio, hola y el nombre que me has pasado
00:39:04
Etcétera, etcétera, etcétera
00:39:06
Un cierto número de repeticiones veces
00:39:07
¿Sí?
00:39:10
Entonces, ¿cómo se llama esto?
00:39:13
Por ejemplo, digo string saludos
00:39:15
Es igual, repite saludos de Luis,4
00:39:17
Entonces, ¿qué hace esto?
00:39:22
Pues repite cuatro veces
00:39:24
Hola Luis
00:39:26
Es fácil
00:39:28
Lo concatena todo
00:39:28
Y no lo escribe en pantalla
00:39:31
Me da esa cadena
00:39:33
¿Vale?
00:39:35
Y esa cadena yo la guardo
00:39:36
En esta variable de aquí
00:39:38
Y ahora puedo utilizar esa variable de aquí
00:39:39
Como me da la gana
00:39:41
Como por ejemplo
00:39:42
Imprimirla en pantalla
00:39:43
Duda para vosotros
00:39:44
Entonces eso quiere decir
00:39:48
Que una función no puede imprimir en pantalla
00:39:49
Puede, tranquilamente
00:39:52
La diferencia es que al final me tiene que devolver algo
00:39:56
Me puede hasta devolver una cadera vacía
00:39:59
Pero me tiene que devolver un string
00:40:03
¿Por qué? Porque lo dice aquí
00:40:04
Está claro que si hace mil cosas
00:40:06
Y luego me devuelve algo inútil
00:40:10
Entonces no es una función
00:40:11
Es un procedimiento
00:40:13
Entonces aquí le pongo void y ya está
00:40:15
¿Sí o no?
00:40:17
Fijaos también que después de haberlo creado la string
00:40:20
Me lo devuelve
00:40:23
¿Vale? Necesito un return
00:40:24
Si aquí no he puesto void
00:40:28
Necesito un return
00:40:30
Porque es lo que me devuelve
00:40:31
Al final de todo el procedimiento
00:40:33
Haga lo que haga
00:40:35
Por aquí, por allá
00:40:36
Cambia cosas, escribe cosas
00:40:37
Haga lo que sea
00:40:39
Pero al final me tiene que hacer
00:40:40
Un resultado de esta función
00:40:42
Y me lo tiene que dar
00:40:47
Y el resultado tiene que coincidir en tipo
00:40:48
Con lo que he puesto aquí
00:40:51
Si tiene que devolver un string
00:40:52
Tiene que devolver un string
00:40:55
¿Dudas?
00:40:56
No, ¿esto qué es?
00:41:02
Un ejercicio
00:41:05
Otro ejemplo
00:41:06
¿Vale?
00:41:08
Entonces, por ejemplo, aquí tenemos
00:41:10
Un ejercicio
00:41:12
¿Qué dice?
00:41:14
Scanner es, es igual a un scanner
00:41:16
¿Vale? Este aquí le he detectado
00:41:18
Int lado 1
00:41:20
Es leginum
00:41:22
¿Vale?
00:41:25
esto es italiano, leenum
00:41:26
vale, de
00:41:28
darme el primer número de rectángulo
00:41:29
coma s
00:41:32
o sea, estoy llamando un método
00:41:33
¿qué es esto? ¿una función?
00:41:36
¿o un procedimiento?
00:41:38
una función, porque veis que
00:41:40
el resultado lo estoy
00:41:44
guardando dentro del lado 1
00:41:46
vale, entonces me espero que esto me devuelva
00:41:47
algo, ¿y qué parámetros
00:41:50
le estoy pasando?
00:41:52
un string
00:41:54
Y un escáner
00:41:55
¿Vale?
00:41:58
Un escáner que será este escáner de aquí
00:42:00
¿Vale? Vamos a ver que hace este legendum
00:42:01
Pues está aquí
00:42:04
Me devuelve un entero
00:42:06
Entonces me espero que al final
00:42:08
Haya un return de algo que sea un int
00:42:10
¿Cómo se llama?
00:42:12
Legendum
00:42:15
¿Qué parámetros tienes?
00:42:15
Un string que llamaré mensaje
00:42:18
Y un escáner que llamaré teclado
00:42:20
¿Vale?
00:42:23
Aquí dentro
00:42:24
Si uso teclado
00:42:25
Estoy usando este escáner
00:42:27
Y si uso MSG
00:42:29
Estoy utilizando este stringer
00:42:30
¿Qué son este stringer y este escáner?
00:42:32
No lo sé
00:42:34
Lo sabré a la hora en que tú me llames aquí
00:42:34
Entonces sabré que el mensaje es este de aquí
00:42:38
Y el escáner será este de aquí
00:42:42
¿Vale?
00:42:44
Pero no lo sé en este momento
00:42:44
Abstractamente pienso solo en MSG y teclado
00:42:47
Sí que puedo hipotizar que MSG será un mensaje
00:42:50
Por lo tanto un stringer
00:42:53
Por lo tanto lo puedo utilizar como string
00:42:54
Y que teclado será un escáner
00:42:56
Por lo tanto lo puedo utilizar como un escáner
00:42:58
¿Vale?
00:43:00
Entonces ¿Qué hago?
00:43:01
Escribo el mensaje en pantalla
00:43:03
Luego hago teclado.nextint
00:43:05
El resultado de este teclado.nextint
00:43:09
Que es como cuando nosotros hacemos can.nextint
00:43:13
Lo guardo en un entero
00:43:15
En una variable entero
00:43:18
Y esta variable aquí que es numleído
00:43:19
Es la que devuelvo
00:43:22
Sustancialmente
00:43:23
Las operaciones estas que nosotros
00:43:26
Hacíamos siempre de pido al usuario
00:43:28
Dame un número y luego después lo leo
00:43:30
Pues lo he pegado y compactado
00:43:32
En una única
00:43:34
Función
00:43:35
Que se llama leginum
00:43:37
Entonces cuando llamo leginum
00:43:38
Le pongo aquí
00:43:41
Lo que quiero pedir
00:43:42
Y donde lo voy a leer
00:43:44
Lo voy a leer desde el teclado
00:43:46
Y ya está
00:43:48
Si o no
00:43:49
Entonces, este leggiNum
00:43:53
Dame el primer número, me le dará un primer número
00:43:56
LeggiNum, dame el otro lado del rectángulo
00:43:58
Me le dará el segundo num
00:44:00
A este punto, en intarea
00:44:02
Voy a poner
00:44:04
Calcularea
00:44:06
¿Qué es calcularia?
00:44:08
Función o procedimiento
00:44:13
Función
00:44:14
¿Por qué?
00:44:17
Porque luego algo lo pongo dentro de área
00:44:19
¿Vale? Por lo tanto, probablemente
00:44:21
Tiene que ser una función
00:44:23
¿Vale?
00:44:24
¿Qué pilla como parámetros?
00:44:26
Un int y otro int
00:44:34
¿Vale? Lo veo aquí, int e int
00:44:35
¿Vale? Vamos a verlo
00:44:37
Entonces aquí tengo calcular
00:44:38
Que me pilla un int al lado uno
00:44:40
Y un int al lado dos
00:44:43
Cuidado que este nombre de aquí
00:44:44
No tiene que ser el mismo de esto de aquí
00:44:46
Pueden ser distintos
00:44:48
¿Vale? O iguales, da igual
00:44:50
Fijaos antes que yo uso S
00:44:52
Pero luego aquí dentro lo llamo teclado
00:44:55
¿Sí?
00:44:57
Pueden ser distintos, son variables
00:44:59
Calcula área, lado 1 y lado 2
00:45:01
Que son dos int, lado 1 y lado 2
00:45:05
Y que hace, returna lado 1 por lado 2
00:45:07
¿Es correcto esto?
00:45:10
Esta es una expresión
00:45:15
Lado 1 por lado 2
00:45:16
Lado 1 es un entero, lado 2 es un entero
00:45:17
Entero por entero, ¿qué me devuelve?
00:45:20
Un entero
00:45:22
Y tengo que devolver un entero
00:45:23
Pues perfecto
00:45:25
entonces devuelvo el resultado de esta operación
00:45:26
y el resultado de esta operación se guardará
00:45:29
en área
00:45:33
y ahora tengo
00:45:34
pinta bonito
00:45:37
que no es un animal
00:45:38
lado 1, lado 2, área
00:45:40
¿qué es esto?
00:45:43
es un procedimiento
00:45:50
me espero que sea un procedimiento
00:45:52
no estoy guardando nada de esto
00:45:54
Entonces probablemente es un procedimiento
00:45:57
Puede ser una función
00:45:59
Voy a mirarlo
00:46:00
Voy a mirar aquí
00:46:02
Pinta bonito
00:46:04
Pinta bonito
00:46:05
Efectivamente es void
00:46:08
Por lo tanto es un procedimiento
00:46:09
Que recibe un entero, otro entero
00:46:12
Y otro entero
00:46:15
Int B y R
00:46:15
Que si os fijáis
00:46:18
Se corresponderán con
00:46:20
Donde está pinta bonito
00:46:22
Con el lado, lado y el área
00:46:23
Y escribe
00:46:26
En un marco
00:46:28
Magnífico y muy bonito
00:46:32
¿Vale?
00:46:34
El rectángulo de lados
00:46:35
A
00:46:37
Y B
00:46:38
Lo que tú me has pasado
00:46:41
Tiene área R
00:46:43
¿Si o no?
00:46:45
Y el resultado es esta cosa aquí
00:46:50
Esta es la primera función
00:46:52
¿Vale?
00:46:58
Dame el primer lado y luego leo un número
00:47:00
Llamo otra vez la misma función
00:47:03
Pero con un mensaje distinto
00:47:05
Y dice, dame el otro lado del rectángulo
00:47:07
Y leo, hago la operación
00:47:09
No se ve nada porque no imprime nada
00:47:11
Y luego llamo pinta bonito
00:47:13
Me hace estos dos bonitos marcos
00:47:14
Y escribe el rectángulo de lado
00:47:17
4 y 6
00:47:19
Tiene área 24
00:47:21
Ahora
00:47:22
En vez de todo este código
00:47:26
En el main
00:47:28
Tengo un main
00:47:30
Mucho más
00:47:31
Leíble
00:47:33
Más escueto
00:47:35
Más sencillo
00:47:37
¿Vale?
00:47:38
Donde además entiendo lo que estoy haciendo
00:47:39
Creo un escáner, leo un número
00:47:42
Leo un número
00:47:44
Si esto fuera español
00:47:45
No entendería mejor
00:47:47
Leo un número, leo otro número
00:47:48
Calculo el área y pinto bonito
00:47:50
El resultado
00:47:51
Entiendo lo que estoy haciendo
00:47:52
¿Sí o no?
00:47:54
¿Dudas?
00:47:58
¿Preguntas?
00:48:00
Esto ya hemos dicho, parámetros formales y parámetros actuales
00:48:01
Entonces aquí yo tengo dos tipos de parámetros
00:48:10
Los verditos son parámetros formales
00:48:12
Y los azulitos son parámetros actuales
00:48:16
¿Cuál es la diferencia?
00:48:20
Los parámetros formales son los que uso abstractamente
00:48:21
Dentro de los métodos, de las funciones, de los procedimientos
00:48:26
MSG, aquí digo, escribe MSG
00:48:31
¿Cuánto vale MSG?
00:48:34
No, me da igual
00:48:36
A mí me habrán dado un string
00:48:37
Pues ese string lo imprimes en pantalla
00:48:39
Sea cual sea
00:48:42
¿Vale?
00:48:43
Es formal porque no sé su valor
00:48:44
Pero lo uso porque sé su tipo
00:48:47
Entonces, si sé su tipo
00:48:50
Sé cómo lo puedo utilizar
00:48:51
¿Vale?
00:48:53
Si es un string
00:48:54
Puedo preguntar, por ejemplo
00:48:55
¿Cuánto es largo este string?
00:48:56
Con MSG.length
00:48:58
¿Sí?
00:49:00
Puedo acceder a uno de sus carácter
00:49:01
Haciendo msg.cherat de 0
00:49:06
Por ejemplo, lo puedo utilizar como cualquier string
00:49:11
¿Cuál es efectivamente ese string? No lo sé
00:49:13
No lo sabré nunca hasta el momento en que me llamen
00:49:16
¿Sí?
00:49:20
Entonces lo uso de forma abstracta aquí
00:49:23
O aquí, ¿vale? Estos son todos parámetros formales
00:49:25
En el momento de la llamada, se hace una asociación entre el parámetro formal y su valor actual, que es esto.
00:49:29
Cuando yo hago esta llamada aquí, la primera, asigno a MSG el valor, dame el primer lado del rectángulo.
00:49:41
Y a teclado, lo que hay adentro de la variable S, que es este objeto de aquí, Scanner.
00:49:50
Entonces, en esta ejecución, en esta llamada
00:49:59
MSG vale, dame el primer lado del rectángulo
00:50:05
Y Scanner vale este objeto de aquí
00:50:09
Y ahora los uso
00:50:11
Cuando vuelvo a llamarlo, fijaos que el parámetro actual ha cambiado
00:50:12
Ahora, siempre aquí se llama MSG
00:50:17
El parámetro formal no cambia
00:50:19
Pero ahora tiene asociado este valor y no el otro
00:50:21
¿Dudas?
00:50:25
Entonces
00:50:28
Estos
00:50:30
Cuando son dentro de una
00:50:32
De una declaración
00:50:35
De una función
00:50:37
Método, procedimiento
00:50:39
Lo que sea, se llaman formales
00:50:41
Cuando en vez son
00:50:43
En la llamada, lo que se pasan
00:50:45
Son parámetros actuales
00:50:47
Que son los que, cuyo valor
00:50:48
Se asocia a los parámetros
00:50:50
Formales del método que estoy llamando
00:50:53
¿Dudas?
00:50:55
Y aquí el caveat de turno, ¿vale?
00:51:03
Funciones y procedimientos son propiedad de programación estructurada.
00:51:05
En Java se suele hablar más bien de métodos.
00:51:08
Sin embargo, el concepto de método está vinculado a la programación orientada a objetos.
00:51:11
En particular, al concepto de clase de objeto, ¿vale?
00:51:15
Por lo tanto, lo que hemos visto ahora, como es Java y Java orientado a objetos, son métodos, ¿vale?
00:51:18
Pero nosotros lo hemos llamado función y procedimientos, ¿vale?
00:51:23
Pero la idea es parecida, ¿vale?
00:51:29
Varias veces lo hemos hablado.
00:51:32
También otro caveat es que
00:51:33
Nosotros utilizamos mucho el static
00:51:35
Y no entendemos que es el static
00:51:38
Porque no entendemos la diferencia entre clase y objeto
00:51:39
¿Vale? No la saben
00:51:42
Por lo tanto, este static
00:51:43
¿Por qué está allí? Ni idea
00:51:45
Vendrá un momento en que este static
00:51:47
Desaparecerá, ¿vale?
00:51:49
Y veremos por qué
00:51:51
Y se acabó
00:51:52
- Idioma/s:
- Autor/es:
- Stefano Chiesa
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento - No comercial
- Visualizaciones:
- 38
- Fecha:
- 18 de noviembre de 2022 - 13:36
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 52′
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 201.74 MBytes