20241114 ProgrEstruct-Funciones_ejer_1 - 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:
Pues venga, el ejercicio es hacer una función
00:00:00
Luego esa función si queremos probar si funciona
00:00:05
Pues tendremos ya que desde un main llamarla, claro
00:00:07
Pero el ejercicio es hacer la función
00:00:09
Venga, pues la función necesitamos
00:00:12
Parámetros que recibe en caso de que reciba alguno
00:00:15
Tipo de dato que retorna si es que retorna alguno
00:00:19
Y luego ya lo que hace
00:00:23
Vale, pues a esta función le vamos a pasar dos números enteros
00:00:25
y que hace, muestra por consola
00:00:28
cosas, entonces como muestra por consola
00:00:31
cosas, no devuelve nada en realidad
00:00:33
porque el objetivo de la función
00:00:35
es ya mostrar directamente por consola
00:00:37
no devuelve, entonces tipo de retorno
00:00:39
void, porque no devuelve nada
00:00:41
parámetros, dos
00:00:43
números enteros
00:00:45
nombre, pues elegimos un nombre
00:00:47
pues mostrar
00:00:49
números, cualquier cosa
00:00:51
pues venga, entonces la función
00:00:52
sabemos que tenemos que ponerle
00:00:55
un static delante, sí o sí.
00:00:57
Por ahora
00:01:01
tenemos que poner un static delante, sí o sí.
00:01:01
Aunque no entendamos por qué.
00:01:04
Valor que va a devolver
00:01:06
la función. Ya hemos dicho, no me
00:01:07
devuelve nada. No es que sea una función que
00:01:09
diga, devuélveme la suma de todos los
00:01:11
números comprendidos entre dos que yo te dé
00:01:13
o devuélveme no sé qué.
00:01:15
Yo estoy poniendo public static porque así la puedo
00:01:17
llamar desde otros. Ah, bueno, sí.
00:01:19
¿Vale? Como nosotros hasta ahora lo estamos llamando solamente
00:01:22
desde el main, pero si quisieras llamarlo desde otro
00:01:23
de fuera del paquete. No entendía muy bien
00:01:25
Sí, eso ya lo veremos
00:01:27
cuando veamos. Necesitas que sea público para llamarla
00:01:30
desde fuera del paquete.
00:01:32
Desde el mismo paquete no.
00:01:34
Desde una clase distinta en el mismo paquete no.
00:01:36
Claro, entonces sí.
00:01:40
Tiene que ser público.
00:01:41
Y tener el public delante.
00:01:43
No vale con que sea public aquí si no hay public ahí arriba.
00:01:44
Vale. Pero bueno, eso ya explicaremos
00:01:47
por qué y a qué se debe.
00:01:48
Vale. Entonces,
00:01:51
hemos dicho que no va a devolver nada porque va a mostrar
00:01:52
por consola. Pues ya nos adelantamos
00:01:54
y void, venga vamos a llamarla
00:01:57
mostrar secuencia porque va a mostrar la secuencia
00:02:00
entre dos extremos
00:02:03
y ahora que recibe
00:02:04
los dos extremos de la secuencia
00:02:06
que va a mostrar
00:02:08
pues venga
00:02:09
el numerito 1 y el
00:02:12
numerito 2
00:02:14
la lista de parámetros de la función
00:02:15
puede ser tan larga como a uno le
00:02:18
de la gana o como uno necesite
00:02:20
siempre y cuando estén todos
00:02:22
separados por comas
00:02:24
vale
00:02:25
hay otra manera de expresar la lista
00:02:27
de parámetros que se incorporó a partir de cierta
00:02:30
versión de Java, por si la veis
00:02:32
alguna vez, con tres puntos, pero bueno
00:02:34
esa no la mencionamos porque
00:02:36
liamos y tampoco se usa tanto
00:02:38
entonces ahora ya podemos hacer el código
00:02:40
el código que va a hacer, mostrar todos
00:02:46
los números entre N1 y N2
00:02:48
bueno, pues esto
00:02:50
ya directamente que plantaríais aquí
00:02:52
un bucle for
00:02:54
un bucle for donde aprovechamos la variable índice
00:02:58
para que esa variable índice arranque desde n1 y acabe en n2
00:03:01
y uso esa variable índice para mostrar
00:03:06
y ya está, perdón, 0 no, n1
00:03:08
entonces jugamos con los límites del for
00:03:16
en la medida en la que nos interesa
00:03:25
aquí nos interesa decir, oye, el primero es l1
00:03:27
voy incrementando de 1 en 1 y el segundo es n2
00:03:30
pues ya está, juego con esos límites para hacer lo que sea
00:03:33
En este caso, lo que queremos hacer es
00:03:36
Mostrarlo sin más
00:03:39
Pues ya está
00:03:41
Ya, ya, ya
00:03:42
Bueno, sí, pero vamos
00:03:49
¿Vale?
00:03:50
Entonces esto es lo que se nos podría ocurrir
00:03:52
Pues ya está, un for, jugamos con el índice
00:03:54
Ya está, empieza valiendo en e1
00:03:57
Se va incrementando
00:03:58
Y mientras no haya llegado en e2, lo mostramos
00:03:59
Y ya está
00:04:02
Y nada más
00:04:04
entonces
00:04:05
te lo quería preguntar, porque no lo he probado
00:04:07
si cambio una variable dentro de ese
00:04:09
pero como no retorno nada, la variable
00:04:11
original no se toca, ¿no?
00:04:12
no, no, no, no, no
00:04:14
no, no, no, ahora vamos a hacer el ejemplo
00:04:16
claro, por ejemplo
00:04:19
vale, bueno, antes de hacer
00:04:20
ese ejemplo, ¿esto está claro?
00:04:23
está claro, ¿no? entonces ahora llevamos a la función
00:04:25
a la función, ¿cómo la llamaríamos?
00:04:27
pues con su nombre, como siempre
00:04:29
pero ahora hay que pasarle unos valores
00:04:31
concretos
00:04:33
¿vale? pues por ejemplo
00:04:33
si le pasamos el 6 y le pasamos el 12
00:04:36
pues está claro que esta
00:04:38
función va a
00:04:40
mostrar todos los
00:04:42
números entre 6 y 12
00:04:44
¿vale? y podría hacer
00:04:45
más cosas, podría pues en lugar de mostrar
00:04:48
los números, pues a lo mejor hacer
00:04:50
la suma, pues nada, haríamos aquí
00:04:52
la suma acumulativa y devolveríamos la suma
00:04:54
lo que fuera, ya está
00:04:56
¿vale? entonces en relación a la
00:04:57
pregunta que
00:05:00
que hacías tú
00:05:01
claro, sí, sí, no, pero
00:05:03
vale, es que eso tiene que ver
00:05:06
con paso por valor y referencia de objetos
00:05:08
entonces ya insistiremos en ello
00:05:10
cuando veamos objetos, pero
00:05:12
sí que se puede responder
00:05:14
a tu pregunta
00:05:16
entonces, vamos a
00:05:17
la pregunta que ha hecho Juanjo
00:05:20
es, claro, yo aquí
00:05:22
le paso, sí, sí, sí
00:05:24
sí, va a poner una función
00:05:27
específica para
00:05:28
La pregunta que ha hecho Juanjo
00:05:29
Yo tengo una variable
00:05:32
Y hago aquí una función
00:05:33
A la que le paso un parámetro n
00:05:34
Y ahora aquí hago
00:05:46
n igual a 8
00:05:48
Por ejemplo
00:05:51
¿Vale? Y mi función termina
00:05:52
Vale, imagina, entonces le voy a pasar aquí
00:05:54
Una variable, un valor
00:05:56
Le paso un valor
00:05:58
¿Vale? Y a ese valor n
00:05:59
Que le he pasado le pongo a 8
00:06:02
Y luego hago con él lo que sea, vamos a suponer que lo mostramos
00:06:04
Por ejemplo
00:06:06
Y aquí se verá el 8
00:06:07
Es evidente que ahí veremos el 8
00:06:10
Entonces vamos a poner aquí dentro de la función
00:06:12
Dentro de la función
00:06:15
Vale, entonces ahora
00:06:20
Vamos a llamar aquí a la función pasándole esta variable
00:06:28
La función se llama cambiarNumero
00:06:31
Más liso, pues no lo tiene más liso
00:06:35
No pillo nada
00:06:44
Vale, entonces vamos a llamar a cambianúmero
00:06:48
Pasándole esta variable
00:06:52
Esta variable que tiene el valor 9
00:06:53
Dentro de la función
00:06:55
Ponemos a 8
00:06:57
Mostramos y ahora vamos a mostrar
00:06:59
Vamos a mostrar lo que vale n
00:07:01
Aquí después
00:07:04
Vamos a mostrar el valor de n
00:07:04
Vamos a poner aquí fuera de la función
00:07:10
Fuera de la función
00:07:11
Vale, a ver
00:07:16
Esto es importante
00:07:20
Para que uno, pues el programa
00:07:21
No haga cosas que no espera
00:07:24
Vale, entonces, ¿entendéis lo que estoy haciendo?
00:07:25
He creado una función
00:07:28
Cambia número, que recibe un parámetro
00:07:30
A través de este
00:07:32
De esta variable de aquí, recibe un parámetro
00:07:33
Que hace la función dentro
00:07:36
Este parámetro que ha recibido
00:07:38
Lo pone a 8 y ahora muestra su valor
00:07:40
Dentro de la función su valor
00:07:42
Vale, yo llamo aquí a la función
00:07:44
Pasándole un valor entero
00:07:46
Pues este en particular
00:07:47
Le paso este
00:07:49
Y ahora, una vez que esta función ha terminado
00:07:50
Voy a llamar al valor de n
00:07:54
Vale
00:07:57
¿Qué creéis que va a mostrar aquí?
00:07:58
9
00:08:01
¿9 u 8?
00:08:02
9
00:08:03
Todo el mundo cree que 9
00:08:04
dentro de la función 8
00:08:07
y fuera de la función 9
00:08:20
efectivamente, a ver
00:08:21
¿cómo funciona el paso de parámetros
00:08:23
en funciones?
00:08:26
importante que lo entendáis porque si no
00:08:28
el programa puede hacer cosas que no esperáis
00:08:29
que haga y no sabéis por qué
00:08:32
¿cómo funciona?
00:08:33
vamos a ver
00:08:35
cuando uno declara una función
00:08:36
aquí indicamos
00:08:39
que tiene que recibir un valor
00:08:41
lo indicamos de esta manera
00:08:42
pero lo que recibe
00:08:44
es el valor
00:08:46
no recibe la caja entera
00:08:47
para trabajar con ella
00:08:50
recibe el valor
00:08:51
entonces vamos a verlo en la pizarra
00:08:53
para que quede
00:08:56
vale, vamos a hacer esa función que hemos hecho antes
00:08:56
teníamos cambia número
00:09:16
int n
00:09:18
entonces cuando llamamos
00:09:18
desde nuestro main
00:09:21
nuestro main pues tenía
00:09:22
int n igual a 9
00:09:24
y luego ya llamábamos
00:09:27
a cambia número
00:09:29
pasándole n
00:09:33
¿vale?
00:09:34
esto es lo que está en nuestro main
00:09:36
esto es lo que está en nuestro main ¿verdad?
00:09:38
una variable que le ponemos a 9
00:09:41
y le pasamos el valor
00:09:42
y llamamos a esta función
00:09:44
¿vale? pues ¿qué se hace cuando se hace
00:09:45
una llamada a una función pasándole un valor?
00:09:48
bueno pues a cambia número
00:09:51
a cambio de número, nosotros tenemos aquí está claro en el main nuestro
00:09:52
en este main tenemos una cajita que se llama n
00:09:56
eso ya lo sabemos porque eso es lo que hacemos cuando declaramos una variable
00:10:01
cuando declaramos una variable hacemos que aparezca en memoria
00:10:04
una cajita con nombre n y en esa cajita ya se van dando
00:10:08
los valores que vaya siendo necesario, en este caso le hemos dado el 9
00:10:12
pues con esta sentencia de aquí
00:10:16
con esta sentencia de declaración
00:10:19
int n igual a 9 lo que hemos hecho es esto
00:10:23
crear la caja, ponerle el nombre n
00:10:25
y pasarle 9
00:10:28
ahora, ¿qué hacemos cuando llegamos a la función?
00:10:29
cuando llegamos a la función, cambia número
00:10:32
pues entonces
00:10:34
la máquina virtual
00:10:35
salta al código que hay aquí
00:10:37
que el código que hay aquí es este
00:10:39
salta al código que hay aquí
00:10:48
¿y qué es lo que le pasa a este código?
00:10:49
¿qué es lo que le pasa?
00:10:52
no le pasa a la caja
00:10:53
no le pasa la caja, saca el valor
00:10:54
saca el valor 9
00:10:56
y se lo pasa a la función
00:10:58
y le dice, oye
00:11:00
créate tú una caja temporal
00:11:02
que llames como se ponga ahí, como tú quieras
00:11:04
porque ya sabemos que esta variable
00:11:07
este nombre se puede llamar como uno quisiera
00:11:08
entonces le dice, oye, créate tú
00:11:10
una caja temporal, llámala como quieras
00:11:12
una caja temporal, en este caso la estoy llamando n
00:11:14
créate tú una caja temporal
00:11:16
porque en esa caja local
00:11:18
tuya, temporal tuya
00:11:20
te voy a pasar el numerito este
00:11:22
de aquí, entonces
00:11:25
el numerito
00:11:26
es el que se pasa aquí
00:11:28
a esta caja temporal de aquí, el 9
00:11:30
entonces
00:11:33
en un código como este tenemos dos
00:11:34
cajas, la de la clase
00:11:37
main, la del método main
00:11:39
la n que tiene el 9
00:11:41
y ahora cuando hemos llamado a la función
00:11:42
cada una de estas
00:11:45
es una cajita o una variable
00:11:46
local suya, que desaparece
00:11:48
en cuanto la función termina, es una variable
00:11:51
local suya, entonces
00:11:52
esta función durante el tiempo que
00:11:54
se está ejecutando tiene su propia variable
00:11:56
local n, y que ha
00:11:58
ocurrido cuando la hemos llamado
00:12:00
que se ha inicializado con
00:12:02
este valor, si le hubiéramos
00:12:04
dado aquí 10 en vez de n
00:12:07
pues esta variable local se habría inicializado
00:12:08
con 10, depende
00:12:11
esta variable local que crea
00:12:12
esta función a la que llama
00:12:15
n, se inicializa
00:12:17
con el número que vemos aquí, pero
00:12:19
tenemos dos variables separadas una es la de mi clase main las que están en main que están ahí
00:12:20
todas con sus valores y luego cada vez que se llama una función se crean tantas variables locales como
00:12:25
haya en parámetros tantas y son sus propias variables locales y esas variables locales se
00:12:32
llenan con los valores que le demos aquí entonces cuando hemos hecho un igual a 8 el 8 se ha colocado
00:12:38
en esta variable local de ahí se ha colocado ahí
00:12:45
pero sin embargo
00:12:49
cuando ya hemos salido
00:12:52
cuando ya hemos vuelto aquí
00:12:53
esta variable local ya ha desaparecido
00:12:55
cuando ya hemos vuelto aquí esa variable ha desaparecido
00:12:57
y ha quedado esta
00:12:59
y esta sigue teniendo el valor que tenía
00:13:00
el 9, ¿vale?
00:13:03
sigue teniendo el valor que tenía
00:13:06
¿vale? entonces, un segundo
00:13:07
dos minutos para verlo con otro ejemplo
00:13:10
que quede claro, que no os enfriéis
00:13:12
y ya paramos, ¿vale?
00:13:13
vamos a verlo con otro ejemplo
00:13:15
y luego ya paramos
00:13:17
para que no
00:13:19
os enfriéis ahora que lo tenéis
00:13:20
¿y el programa a la hora de ejecutarse
00:13:23
cuenta con las funciones
00:13:24
para guardar RAM?
00:13:27
no, no es que cuenta
00:13:31
a ver, el proceso tendrá
00:13:32
el sistema operativo, su planificador de procesos
00:13:35
tendrá una RAM y la irá llenando
00:13:37
hasta que se acabe
00:13:39
depende de la RAM que tenga el equipo
00:13:40
¿no hay tres programas?
00:13:42
¿Se declaran las variables para dejar el espacio para el programa?
00:13:44
¿Se declaran las variables para que el programa tenga el espacio?
00:13:47
No, a ver.
00:13:50
¿En teoría?
00:13:51
No, no, porque es que sobre todo en un programa orientado a objetos
00:13:52
es que no sabes cuántos objetos van a aparecer.
00:13:55
Entonces el proceso tendrá su rama asociada y se va de forma dinámica para el programa.
00:13:58
¿Vale? Entonces si me escucháis y os concentráis, paramos antes.
00:14:03
Otro ejemplo de esto mismo.
00:14:08
Imaginaos que tenemos una función
00:14:10
Que la
00:14:12
Imaginaos que la llamamos
00:14:14
Intercambia
00:14:16
Por ejemplo
00:14:18
Y yo le paso
00:14:19
X
00:14:21
Imaginaos que tenemos esta función
00:14:22
X e Y, por ejemplo
00:14:29
¿Y qué vamos a hacer?
00:14:32
Vamos a intercambiar estos dos valores
00:14:33
Vamos a hacer un código que intercambie estos dos valores
00:14:35
Por ejemplo
00:14:38
¿Vale?
00:14:38
esto, nada, devuelvo y voy
00:14:40
vamos a hacer un código que intercambie estos dos
00:14:42
vale, pues entonces este código
00:14:44
pues ya sabemos como lo haríamos
00:14:46
int aus igual a x
00:14:47
x igual a y
00:14:50
e y igual a
00:14:53
aus, ¿no?
00:14:57
¿vale?
00:15:01
entonces
00:15:03
¿qué ocurre cuando esta función se le llama?
00:15:03
cuando esta función es llamada
00:15:07
desde cualquier sitio
00:15:08
Esta función automáticamente crea dos variables locales x e y
00:15:10
Dos variables locales x e y
00:15:17
Entonces tenéis que ver los parámetros de una función
00:15:19
Los parámetros como variables locales suyas
00:15:24
Tenéis que verlos como variables locales suyas
00:15:26
Entonces esta función en el momento en que es llamada
00:15:29
Crea dos variables locales x e y
00:15:32
Y trabaja con ellas
00:15:35
¿qué ocurre cuando la función ya termina?
00:15:37
estas variables locales
00:15:41
han desaparecido
00:15:43
¿vale? luego los parámetros
00:15:44
de una función son variables locales suyas
00:15:46
que se crean en el momento
00:15:49
en que entramos en la función
00:15:50
se trabaja con ellas y luego
00:15:52
desaparecen, son variables locales
00:15:54
¿vale? entonces ¿qué ocurre
00:15:57
si ahora llamáramos a esta función
00:15:58
desde un main cualquiera?
00:16:00
pues imaginaos que ahora tenemos un main
00:16:04
Int x igual a 7, int y igual a 9, y ahora llamamos a intercambia, llamamos a intercambia pasándole x e y, vale, pues entonces cuando hacemos esta llamada, lo que estamos pasando a la función intercambia son solo estos valores, estamos diciendo, oye función, cuando te crees tú tu variable local x y tu variable local y,
00:16:06
porque recuerdo, los parámetros de una función
00:16:36
son variables que se crean en ese momento
00:16:38
y son locales a la función
00:16:40
pues estamos diciendo, oye, cuando te crees tú
00:16:41
tu propia variable local x
00:16:44
y tu propia variable local y
00:16:46
inicializa x con este valor que yo te doy
00:16:48
que resulta que es 7
00:16:51
e inicializa y con este valor
00:16:52
que yo te doy aquí
00:16:55
que resulta que es 9
00:16:56
como si yo le diera 11 y 13
00:16:57
le estaríamos diciendo, oye, cuando te crees
00:17:00
tu propia variable local x
00:17:02
y te crees tu propia variable local y
00:17:04
inicializa la x con el 11
00:17:06
y la y con el 13
00:17:09
es decir, lo que pasamos aquí
00:17:11
son solamente
00:17:13
los valores con los que inicializamos
00:17:15
las variables locales
00:17:17
que se crean cuando entramos en la función
00:17:19
¿vale?
00:17:21
entonces cuando esta función ha terminado
00:17:23
x e y
00:17:25
las variables del main
00:17:26
no se han enterado de nada de lo que ha pasado
00:17:28
no se han enterado de nada
00:17:30
porque con quien ha trabajado la función
00:17:31
es con las variables locales suyas
00:17:33
que ha creado
00:17:36
y lo que pasamos aquí
00:17:37
son sólo valores
00:17:39
para inicializar esas variables locales
00:17:41
sólo pasamos valores
00:17:43
no pasamos la variable, la caja entera
00:17:44
porque si pasáramos
00:17:47
la caja entera, todo lo que
00:17:49
hiciéramos aquí, luego se vería
00:17:51
al salir, pero es que no pasamos
00:17:53
la caja entera, pasamos
00:17:55
dos valores que inicializan
00:17:57
las cajitas locales
00:17:59
y cuando la función termina
00:18:01
estas cajitas locales han desaparecido
00:18:03
la función habrá devuelto un valor
00:18:05
o lo que sea, pero las cajitas locales
00:18:08
x y y han desaparecido
00:18:10
¿vale? entonces por eso
00:18:12
se dice que el paso
00:18:14
de parámetros a
00:18:15
funciones es por valor
00:18:18
se llama así, por valor, porque lo que
00:18:19
se pasa es el valor, no se pasa la caja entera
00:18:22
¿vale? se pasa
00:18:24
el valor, paso el valor de
00:18:25
x para tu cajita local y paso
00:18:28
el valor de y para tu cajita local
00:18:30
se pasa el valor
00:18:31
entonces a veces sería útil
00:18:33
pasar la caja entera
00:18:37
sería utilísimo pasar la caja entera
00:18:39
oye, ya que haces cosas
00:18:41
con lo que yo te paso
00:18:43
que eso que haces
00:18:44
afecte ya al programa
00:18:45
ojalá pudiera yo pasarte la caja entera
00:18:47
pero en cualquier caso
00:18:49
sí, podríamos devolver los valores
00:18:55
y luego asignarlos
00:18:57
ahora mismo no tendríamos
00:18:59
o sea, devolver un array con dos valores
00:19:01
y asignarlos
00:19:03
pero ni siquiera hace falta
00:19:03
o sea, hay una manera de
00:19:07
oye, mira, te voy a pasar la caja
00:19:09
entera, entera, te paso la caja entera
00:19:11
y así todas las operaciones que
00:19:13
hagas no van a ser con
00:19:15
copias locales, sino con
00:19:17
cajas enteras, pero pasar la caja
00:19:19
entera significa pasarlo en
00:19:21
modo objeto
00:19:23
entonces, cuando veamos objetos
00:19:23
veremos cómo puedo pasar
00:19:26
yo la caja enterita para que todo lo que haga
00:19:29
aquí dentro
00:19:31
se refleje
00:19:31
en el mail
00:19:33
porque al haber pasado
00:19:34
el contenedor
00:19:35
si yo trabajo
00:19:36
con este contenedor
00:19:37
aquí dentro
00:19:38
lo que haga
00:19:39
se va a reflejar
00:19:39
pero con lo que
00:19:40
estamos haciendo
00:19:41
nosotros hasta ahora
00:19:42
lo que estamos creando
00:19:43
es siempre
00:19:44
cajitas locales
00:19:45
variables locales
00:19:47
y pasamos el valor
00:19:48
cuando esta función
00:19:49
ha terminado
00:19:51
eso ha desaparecido
00:19:51
¿vale?
00:19:53
por eso se llama
00:19:54
paso por valor
00:19:54
y lo otro se llama
00:19:55
paso por referencia
00:19:56
pero bueno
00:19:56
vale, ahora sí que
00:19:57
paramos entonces
00:19:58
Justo, un objeto es una dirección
00:19:59
Entonces le pasas la dirección
00:20:03
Entonces te da igual llegar a esa dirección
00:20:04
Desde una función que desde aquí
00:20:06
O vas al mismo lado
00:20:08
Es justo eso, claro
00:20:09
Venga, pues
00:20:11
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 12
- Fecha:
- 17 de noviembre de 2024 - 17:29
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 20′ 14″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 69.91 MBytes