Java Básico 2 - 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:
Voy a grabar esta clase, por lo tanto, si habláis, me dais vuestra autorización a grabar vuestra voz. Dicho esto, segunda parte del Java básico. Hasta ahora nosotros hemos visto variables, hemos visto cómo leer de teclado, cómo escribir en pantalla y poco más.
00:00:00
Algunos operadores, suma, resta y división. Vamos a añadir más elementos para poder hacer más ejercicios, ejercicios más distintos y empezar un poquito a acercarnos a lo que es la parte interesante de este primer trimestre, que son el control del flujo de información, que son if, while, iterativos, condicionales y llamadas de métodos.
00:00:16
¿Sí? Entonces, lo que vamos a ver hoy son muchas cosillas, ¿vale?
00:00:44
Nosotros hemos visto las variables. ¿Qué es una variable?
00:00:49
Es un trozo de memoria donde dentro le pongo un valor.
00:00:52
Este valor está asociado con un tipo, solo puede tener un determinado tipo.
00:00:56
Puede variar este valor.
00:01:00
Sí. Y en cualquier momento puede decir int edad es igual a 10.
00:01:04
Y mañana es mi cumpleaños y pongo edad es igual a edad más 1.
00:01:10
Pues ya está. Ahora tengo 11 dentro de él.
00:01:14
Se llama variable porque este trozo de memoria está allí, nadie me lo toca, nadie lo modifica, pero en cualquier momento yo puedo cambiar esto.
00:01:16
Hay situaciones, hay contextos dentro de mis programas y mis sistemas en el que yo podría crear un trozo de memoria diciendo,
00:01:27
mira, yo aquí dentro te meto un valor que te pongo al principio y quiero que este valor no cambie nunca jamás.
00:01:34
De una ejecución a otra
00:01:42
Podría hasta variar
00:01:46
Yo podría decir, vale, este es un juego
00:01:47
Dime el número de jugadores
00:01:49
¿Cuánto hay? Tres, vale, a partir de ahora
00:01:51
Para esta sesión hay tres jugadores
00:01:53
La próxima vez cuando juego
00:01:55
Digo, ahora hay siete jugadores, vale, perfecto
00:01:57
En esta partida hay siete jugadores
00:01:59
Pero no cambiarán nunca hasta que
00:02:01
No reinicie el juego, ¿sí?
00:02:03
Por ejemplo, estas no se llaman
00:02:05
Variables, sino se llaman
00:02:07
Constantes, ¿vale? Por ejemplo
00:02:09
el pi griego
00:02:11
es una constante
00:02:13
¿por qué? porque no vale
00:02:16
¿vale?
00:02:18
¿cómo se define? exactamente
00:02:20
como una variable
00:02:22
solo que le ponemos
00:02:24
delante la palabra reservada
00:02:26
final, como decir, este es tu valor
00:02:28
final, no vas a cambiar
00:02:30
nunca, ¿vale?
00:02:32
entonces, final double pi
00:02:34
es igual a
00:02:36
pues me crea un trozo de memoria
00:02:37
pone dentro este valor, ese trozo de memoria se referencia como
00:02:41
con la palabra pi, ¿vale? pi
00:02:45
pero ya no puedo cambiarlo, no puedo hacer después
00:02:48
pi es igual a 3, me va a dar un error, me dice
00:02:53
no, no lo puedes modificar, si le quito el final, sí, puede hacer lo que me la haga
00:02:56
pero con el final, una vez definido, es eso para siempre
00:03:01
¿ok? para diferenciarlas
00:03:04
De las variables, las constantes van todas en mayúsculo.
00:03:09
El nombre de la variable se pone entera en mayúsculo.
00:03:15
Por ejemplo, en el ejercicio que hemos hecho antes, ¿esto qué será?
00:03:19
Una constante.
00:03:27
¿De qué clase? ¿Dónde es definida esta clase?
00:03:28
¿Dónde está definida esta constante?
00:03:31
En la clase math.
00:03:35
Si yo me voy a la clase math.java y voy a leer el código de math.java, allí dentro encontraré una línea que pone final double p es igual a 3,14, bla, bla, bla.
00:03:36
¿Entiendes?
00:03:52
O por ejemplo, final int max-usuarios, veis, todo en mayúscula, es igual a 300.
00:03:57
Eso quiere decir que mi sistema es máximo 300 usuarios.
00:04:04
Y eso no cambiará nunca.
00:04:07
se escribe en mayúscula
00:04:08
porque así yo cuando leo
00:04:11
un nombre, más o menos sé
00:04:12
de qué estoy hablando
00:04:15
empieza por mayúscula, pero el resto es minúscula
00:04:16
posiblemente es un objeto, como string
00:04:19
como scanner
00:04:21
es todo minúsculo
00:04:22
probablemente es o una variable
00:04:24
o un método
00:04:27
todavía no lo hemos visto, hemos visto main
00:04:28
todo mayúsculo
00:04:30
pues eso no lo está
00:04:33
entonces, ¿es necesario
00:04:34
que sea así? No. Podéis hacer lo que os da la gana. ¿Todos los que
00:04:37
programan en Java hacen así? Sí. Por lo tanto, si no lo hacéis, la gente
00:04:41
que programa en Java os dirá que lo se ha escrito mal.
00:04:45
Una constante no puede cambiar su valor. El identificador
00:04:50
de una constante suele ir en mayúsculas.
00:04:53
Tema, concepto, abstracto
00:04:59
y teórico. ¿Vale?
00:05:02
el ámbito de una variable
00:05:06
o de una constante
00:05:08
un elemento de estos que creo
00:05:09
hasta ahora
00:05:12
en inglés se llama scope
00:05:12
¿vale?
00:05:15
¿qué es el ámbito de una variable?
00:05:17
es donde existe esta variable
00:05:19
la variable
00:05:22
existe en el bloque
00:05:24
en que la creo
00:05:26
¿qué era un bloque?
00:05:27
¿os acordáis los delimitadores de bloque?
00:05:30
cuando vimos los delimitadores
00:05:37
como la tercera transparencia del Java Básico 1, vimos delimitador de bloque.
00:05:38
¿Qué era el delimitador de bloque?
00:05:43
La llave.
00:05:46
Se marca que aquí empezó un bloque de código, aquí acaba un bloque de código.
00:05:48
Llave abierta, llave cerrada.
00:05:53
Pues si yo declaro una variable aquí dentro, esta variable tiene sentido, existe dentro de este bloque.
00:05:55
Si salgo de este bloque, esta variable ya no existe.
00:06:03
por ahora es que me cuentas dentro de un rato tendrá sentido pero acordados si yo te abro abro
00:06:06
una llave declaró una variable si cierro esa llave no puedo volver a utilizar esa variable
00:06:15
ya no existe fuera de ese modo puede ser sensible sólo dentro del bloque es decir entre estas cosas
00:06:21
aquí vale en el que ha sido definida el mismo nombre de otra declarada del mismo ámbito vale
00:06:30
si yo hago int edad es igual a 3 y ahora hago int edad es igual a 4, pues él colapsa, porque dice
00:06:35
no, dentro de un bloque o tú defines una variable con un nombre en un bloque, pues dentro de este
00:06:42
bloque no puede haber otra variable que tenga el mismo nombre. En un bloque distinto quizás sí,
00:06:49
pero dentro de este bloque no. Si se declara una variable en un ámbito más interno,
00:06:54
no se podrá acceder a la misma
00:07:04
desde un ámbito más externo.
00:07:06
Sin embargo, desde un ámbito más interno
00:07:07
sí se puede acceder a las variables externas.
00:07:10
¿Qué quiere decir?
00:07:12
Mirad esta cosa de aquí.
00:07:14
¿Aquí cuántos bloques hay?
00:07:16
Dos.
00:07:18
Uno que es este de aquí, más externo,
00:07:19
y un bloque interno.
00:07:22
Si yo hago int a es igual a 3,
00:07:25
este a existe en el bloque externo.
00:07:28
Sí.
00:07:32
¿Existe en el bloque interno? Sí, también, porque ésta dejará de existir cuando salgo de este bloque.
00:07:32
Por lo tanto, todos los bloques que están dentro tienen ésta. Por lo tanto, si yo aquí dentro hago
00:07:41
int b es igual a, funciona perfectamente. Ahora, imaginaos esta otra cosa. ¿Cuántos bloques hay aquí?
00:07:47
siempre 2, ¿vale? Abro el primer bloque, abro el segundo bloque y declaro la variable int a es
00:07:55
igual a 3 dentro del bloque interno y luego intento utilizarlo en el bloque externo. Esto
00:08:04
me da un error, me dice no sé qué es a. Imaginaos aquí, hago un bloque y digo int a es igual a 3
00:08:13
y luego creo otro bloque dentro
00:08:34
que digo int b es igual a
00:08:38
ningún problema
00:08:40
¿vale? no me da errores
00:08:42
se puede hacer
00:08:44
si yo aquí hago
00:08:45
int x es igual a
00:08:47
a más 3 funciona
00:08:51
¿por qué no?
00:08:52
pero si lo he declarado aquí
00:08:56
¿por qué no funciona?
00:08:57
porque estoy fuera de este bloque
00:08:59
el bloque donde se ha declarado
00:09:01
ha acabado aquí. Y por lo tanto
00:09:03
aquí A no existe.
00:09:05
¿Cuánto vale aquí?
00:09:16
Y he entrado aquí dentro, he creado A
00:09:19
¿Vale?
00:09:27
He dado 3. Cuando he llegado aquí
00:09:29
A ha desaparecido.
00:09:32
Ya no existe.
00:09:34
Y he creado otro trozo de memoria que se
00:09:35
llama A donde le he puesto 7.
00:09:37
Son dos variables distintas.
00:09:41
Si yo muevo esta línea
00:09:44
aquí. ¿Funciona?
00:09:45
Sí.
00:09:48
Porque ahora yo he definido en el bloque este de aquí, el bloque del main, he definido la variable A.
00:09:57
Y cuando intento volver a definir A en un bloque más interno, la variable A ya existe.
00:10:05
Y no puedo declarar dos variables en el mismo ámbito que se llamen igual.
00:10:13
¿Se entiende?
00:10:20
¿Se le quitará a Selim?
00:10:21
sí, claro, pero entonces
00:10:22
lo que sería, no estaría
00:10:25
declarando otras variables
00:10:27
o si pusiera
00:10:29
pusiera double, funcionaría
00:10:31
¿está la variable?
00:10:33
no puedo tener
00:10:38
dos variables que se llamen
00:10:39
igual dentro del
00:10:41
mismo ámbito, y me da igual
00:10:43
yo no te he hablado de tipo, te he hablado
00:10:45
del nombre, vale, no se puede
00:10:47
yo no puedo poner aquí scanner A
00:10:49
no puedo poner aquí double A
00:10:51
o boolean A, pues que ya existe.
00:10:53
Entonces, A no lo puede usar hasta que acabe el bloque.
00:10:57
Cuando acabe el bloque, si lo quiero reutilizar en otro bloque, ¿por qué no?
00:11:00
¿Ve? No se suele hacer.
00:11:05
¿Dudas?
00:11:08
¿Entiende el ámbito de una variable?
00:11:10
Es donde existe esta variable.
00:11:12
Existe dentro del bloque en la que la hemos definido
00:11:14
y normalmente por debajo de donde se define.
00:11:19
O sea, por arriba de donde se define no existe.
00:11:22
El discurso que si yo esto lo bajo abajo, funciona porque cuando llego aquí, A no existe, entonces la puedo crear.
00:11:25
Y cuando llego aquí, esta A desaparece, entonces cuando vuelvo a recrearla, pues sigue sin existir y la puedo recrear.
00:11:37
Ahora, esta A y esta A no tienen nada que ver, son trozos de memoria separados.
00:11:46
Lo que hago en esta A no es lo mismo lo que hago en esta A.
00:11:52
Son dos cosas completamente distintas.
00:11:56
Por eso situaciones de este estilo no se suelen hacer.
00:11:59
No se suelen llamar las mismas variables iguales porque luego te confundes.
00:12:02
Llámala A1 y A2 si no tienes tantas.
00:12:08
¿Sí?
00:12:13
¿Dudas sobre el ámbito de la variable?
00:12:17
Lo mismo vale para las constantes.
00:12:18
¿Dónde dejó la constante?
00:12:20
Dentro de ese bloque existe.
00:12:21
dudas
00:12:22
clase ámbito
00:12:24
que está mal porque debe ser colar mayúscula
00:12:29
este es el main, creo la
00:12:31
x, creo la q
00:12:33
interso más x más q lo puedo hacer
00:12:35
porque x existe
00:12:37
en todo este bloque aquí y q
00:12:39
existe en este bloque aquí, por lo tanto
00:12:41
lo puedo hacer, si salgo fuera
00:12:43
y digo dime cuánto vale x
00:12:45
pues valdrá, existirá porque x
00:12:47
vale, existe
00:12:49
también en este bloque
00:12:51
dudas
00:12:52
Expresiones son un conjunto de tokens que el programa podrá resolver en tiempo de ejecución a un valor concreto, ¿vale?
00:12:58
Lo que decimos a la derecha del igual va a una expresión.
00:13:05
Esta expresión es un conjunto de sumas, restas, operaciones y cosas por el estilo.
00:13:09
Lo que hace el programa es pillar toda esa expresión, evaluarla y de allí sacar un valor.
00:13:14
Y ese es el valor de la expresión.
00:13:21
Y ese valor tendrá un tipo, ¿vale?
00:13:24
Si el tipo coincide con una variable
00:13:26
Puedo guardar ese valor en esa variable
00:13:28
Si no, no
00:13:32
Si el resultado de mi expresión es un booleano
00:13:32
Y yo tengo un int x
00:13:37
Pues no puedo guardar el booleano dentro de un int x
00:13:38
Pero si la expresión al final me da un entero
00:13:41
Y tengo un int x
00:13:44
Pues puedo guardar este valor ahí
00:13:45
La expresión más simple consiste de un literal
00:13:47
O sea, tres es una expresión
00:13:51
comillas, gato, comillas
00:13:53
es una expresión
00:13:56
es un literal, lo vimos la semana pasada
00:13:57
que eran los literales
00:14:01
otro tipo
00:14:02
de expresión habitual es un identificador
00:14:04
de variable, también una variable
00:14:06
puede ser una expresión
00:14:08
una expresión
00:14:10
¿vale?
00:14:12
aquí, esta es una expresión
00:14:16
esta es una expresión
00:14:18
sería una expresión, pero B no existe. ¿Qué error me da?
00:14:22
B cannot be resolved to a variable. No puedo pillar B y decir qué variable es.
00:14:34
No puedo resolverla a una variable. No puedo decir, ah, B es esta variable de aquí.
00:14:43
No me has dicho que es B. Me tienes que decir que es B antes.
00:14:48
lo he dicho aquí. Sí, pero en un bloque interno y desde esta paréntesis de aquí, b no existe.
00:14:52
Y si quisiera usarla, pues pillo esta, la pongo aquí fuera, le doy un valor inicial, aquí lo cambio a y ahora sí que me existe.
00:15:00
Porque ahora la he declarado en el bloque externo y entonces existe aquí y sigue existiendo aquí.
00:15:11
dejará de existir cuando salgo de este bloc.
00:15:21
¿Entiendes? Sí, vale.
00:15:25
Operadores, ¿vale?
00:15:34
Son símbolos que representan algún tipo de operación.
00:15:36
Hay varios tipos de operaciones distintas.
00:15:40
Nosotros conocemos típicamente las aritméticas y ya las hemos usado.
00:15:43
Summa, resta, división y multiplicación.
00:15:46
La única que ha un poquito molesta es la división.
00:15:48
Todos los demás son bastante fáciles.
00:15:51
Pero hay otros tipos de operaciones.
00:15:53
hay las lógicas, que nos sirven para crear expresiones, ¿vale?
00:15:55
2 más 3 es una expresión, 3 más saldo es una expresión, saldo más incentivos es una expresión,
00:16:02
saldo dividido por 2 es lo que sale, más 1000 es lo que sale, módulo 10 es una expresión.
00:16:09
Ahí es el módulo, cierra el módulo.
00:16:15
El resto de la división entera.
00:16:19
Agrupación. El operador de agrupación son las paréntesis.
00:16:25
¿Vale? Me sirven para situaciones como estas, para saber qué se ejecuta antes y qué después.
00:16:28
¿Vale? Hay dos opciones, tenéis dos opciones.
00:16:35
O sabéis de memoria esta tabla, que os dice qué operadores se ejecutan antes que otros,
00:16:38
o usáis las paréntesis.
00:16:49
Elegid vosotros.
00:16:52
Y yo uso las paréntesis.
00:16:54
Clasificación de operadores
00:16:55
¿Vale? Por el número de expresión
00:17:00
O por la posición que ocupan de esto
00:17:02
¿Vale? Si yo hablo de los operadores
00:17:04
Sean aritméticos
00:17:06
Sean lógicos y cosas por el estilo
00:17:08
Puedo agruparlos, puedo definirlos
00:17:10
De alguna forma ¿Vale?
00:17:12
Si son monarios o unarios
00:17:14
Yo suelo usar unarios
00:17:16
Son operadores
00:17:18
Que solo reciben un parámetro
00:17:20
Como por ejemplo
00:17:22
Menos uno
00:17:24
Menos 1, ¿cuántos parámetros reciben?
00:17:26
Solo el 1.
00:17:28
¿Vale?
00:17:29
Y lo que te está diciendo es, invértele el signo a ese 1.
00:17:29
Si 1 es positivo, menos 1 es negativo.
00:17:34
¿Entiendes?
00:17:41
Eso sería un ario, porque recibe un solo elemento.
00:17:42
Nosotros estamos más acostumbrados a los binarios, ¿vale?
00:17:52
Que reciben 2, como 3 más 2.
00:17:55
El operador más recibe dos elementos.
00:17:59
Necesita dos operandos para poder operar.
00:18:03
¿Sí?
00:18:07
El operador es el más.
00:18:07
El más es un operador binario.
00:18:09
¿Por qué?
00:18:11
Porque recibe dos valores y hace algo con estos dos valores.
00:18:11
El operador de concatenación.
00:18:16
¿Cuál es?
00:18:19
El más.
00:18:22
¿Y cómo es?
00:18:23
¿Unario, binario?
00:18:24
Binario también.
00:18:27
es
00:18:29
el string que tienes a la izquierda
00:18:30
pégale detrás el string que tienes
00:18:33
a la derecha
00:18:35
¿sí? ¿dudas?
00:18:36
y luego está
00:18:41
el operador ternario
00:18:41
que sostancialmente es sólo esto
00:18:42
y sólo veremos esto
00:18:44
pero, bueno, existe
00:18:46
el operador ternario es un operador que recibe
00:18:48
tres cosas
00:18:50
¿vale?
00:18:53
y esto es lo más parecido
00:18:54
a un if
00:18:57
sin que sea un if.
00:18:58
Esto no es un if.
00:19:00
¿Vale?
00:19:03
Nosotros lo usaremos if, como if,
00:19:04
hasta que veamos los if
00:19:06
que son de verdad, pero el if
00:19:08
es más potente que esta cosa.
00:19:10
Esta es una expresión.
00:19:12
El if no es una expresión.
00:19:14
¿Vale?
00:19:17
¿Qué es esto? Me dice, mira,
00:19:17
es este operador aquí, este operador aquí.
00:19:20
¿Vale? Interrogación
00:19:22
y dos puntos. Y recibe
00:19:24
tres cosas. Esto
00:19:26
esto y esto. Por eso es ternario. ¿Cómo funciona? Es una pregunta. Dice, ¿esta cosa de aquí es
00:19:27
verdadera? Si es verdadera, mi valor es esto. Si es falsa, mi valor es esto. Si el número vale 5,
00:19:38
esta expresión, ¿cuánto vale?
00:19:52
4.7
00:19:56
y si NUM en vez es 10
00:19:57
¿cuánto vale? 4.7
00:20:00
y si NUM es 130
00:20:06
4.7
00:20:08
y si NUM es 4.7
00:20:12
pues siempre 4.7
00:20:14
y si NUM es 3
00:20:17
porque esto
00:20:20
es el operador de igualdad
00:20:24
y dice, si NUM
00:20:25
es exactamente
00:20:28
3 es, entonces
00:20:29
yo, todo esto
00:20:33
vale 3,4.
00:20:35
Sin embargo, si no es 3,
00:20:38
todo esto vale 4,6.
00:20:42
Entonces, es en un cierto sentido
00:20:45
el primer
00:20:46
prototipo de condicional que yo tengo.
00:20:48
Aquí puedo hacerme una pregunta
00:20:53
en base a lo que hay aquí dentro, decidir si
00:20:55
si el resultado es uno u otro.
00:20:59
Es como la suma.
00:21:03
5 más 3, ¿no es así? 5 más 3, pero
00:21:05
si la luna es llena, entonces vale 7
00:21:07
y si no, vale
00:21:09
5 más 3, 8.
00:21:10
Siempre.
00:21:13
Sin embargo, este de aquí es,
00:21:15
dependiendo de esta cosa de aquí,
00:21:17
que será un... ¿Qué tipo tiene
00:21:19
esta parte de aquí?
00:21:21
Esta es una expresión aritmética
00:21:27
y el resultado de esto es un número.
00:21:30
Esa es una operación booleana.
00:21:36
Aquí, el resultado de esto tiene que ser o true o false.
00:21:41
Si el resultado de este es true, entonces me das esto.
00:21:46
Si el resultado de este es false, entonces me das esto.
00:21:50
Estos dos señores tienen que tener el mismo tipo.
00:21:55
Si he usado double, tiene que ser double. Si he usado int, int. Si string, string.
00:22:00
Puedo usar lo que me da la gana, pero tienen que ser iguales.
00:22:04
¿Veis?
00:22:07
Por hacer un secado.
00:22:10
Pero, más que esto de aquí, que ahora lo volveremos a ver, el operador ternario,
00:22:13
este operador ternario de aquí, es, cuando yo tengo un operador,
00:22:18
te puedo decir, oye, mira, te estás equivocando, este operador es un ario.
00:22:22
¿Qué quiere decir?
00:22:25
Que solo se usa para un elemento.
00:22:26
O no, mira, que estás usando la forma, pero como un aria, pero en realidad es binaria.
00:22:30
¿Qué te estoy diciendo? Oye, que te falta un operando. ¿Entiendes?
00:22:34
Esto es sólo para clasificación. Existen operadores unarios,
00:22:41
existen operadores binarios, existen operadores ternarios.
00:22:44
Típicamente nosotros usaremos... Nosotros usaremos como operador unario también el
00:22:48
NOT. Esto cambia el valor de verdad a lo que viene después.
00:23:00
Por ejemplo, ¿cuánto vale todo esto?
00:23:08
¿3 es igual a 5?
00:23:19
No.
00:23:23
Esto sería falso.
00:23:24
Este operador de aquí, que es un ario,
00:23:27
esto se aplica a un solo elemento, que es este de aquí,
00:23:30
lo que haría es negar lo que es esto.
00:23:33
Por lo tanto, todo esto es...
00:23:35
Volveremos sobre eso.
00:23:40
¿Vale?
00:23:42
O, en vez de mirar cuántos operadores, cuántos operandos pilla,
00:23:46
puedo clasificar los operadores en base a dónde se ponen.
00:23:51
Entonces son o prefijos, o posfijos, o infijos.
00:23:57
¿Vale?
00:24:02
Prefijos, el operador va antes del operando.
00:24:03
Posfijo, el operador va después del operando.
00:24:08
Y infijo va en el medio de los operandos.
00:24:12
Por ejemplo, menos uno, el menos,
00:24:15
es prefijos, posfijos o infijos.
00:24:18
prefijo, ¿vale? En 2 más saldo, entonces el más, infirmo, ¿vale? El, creo que lo hemos visto una vez,
00:24:21
me equivoco, no lo sé, el operador este de aquí que hace 5a es igual a 5a, a más más.
00:24:32
No hemos visto esto
00:24:49
Visto nunca
00:24:51
Esto es equivalente a decir
00:24:54
A es igual a A más 1
00:24:56
Hacer esto
00:24:59
O hacer esto
00:25:04
Es exactamente lo mismo
00:25:06
Suma 1
00:25:08
A esa variable
00:25:10
Y lo verbo guardar en esa variable
00:25:12
¿Ok?
00:25:14
Esto es un operador
00:25:16
Infijo, prefijo, posfijo
00:25:17
Postfijo
00:25:22
porque viene después
00:25:24
unario, binario, ternario
00:25:26
unario
00:25:28
unario, pues fijo
00:25:30
existe también el mas-masa
00:25:32
pero lo dejamos en otro
00:25:36
compuesto
00:25:38
no se suele usar nunca
00:25:39
antes hace la suma y luego lo usa
00:25:41
entonces cuando lo usas
00:25:47
dentro de cosas así puede variar
00:25:49
pero se suele utilizar el mas-mas
00:25:50
¿dudas?
00:25:52
¿sí?
00:25:57
Preguntas, aquí, esto es solo nombres, para que ellos digan a veces,
00:25:58
mira que esto es un operador infijo, y tú entiendas qué quiere decir.
00:26:05
Tipos de expresiones, vale, nosotros, el tipo de datos que devuelve una expresión
00:26:11
dependerá del tipo de la expresión involucrada, vale, lo que decíamos, un int más int, el resultado es?
00:26:18
int
00:26:23
int por double
00:26:25
el resultado es
00:26:28
int dividido int
00:26:29
string más int
00:26:31
pero double más string
00:26:35
string también
00:26:39
¿sí?
00:26:42
entonces, la operación
00:26:44
si yo tengo una expresión grande así
00:26:46
me meto allí y puedo calcular
00:26:48
y saber que toda esta expresión
00:26:50
tiene un tipo
00:26:52
en algunos
00:26:53
casos, y esta es una parte
00:27:02
importante
00:27:04
se pueden hacer
00:27:05
conversiones
00:27:07
o sea, hay conversiones
00:27:09
que están
00:27:12
admitidas y conversiones
00:27:14
que no
00:27:16
por ejemplo, nosotros hemos visto algunas
00:27:16
si yo hago
00:27:19
double x es igual a 3
00:27:20
punto y coma
00:27:23
Funciona. Pero ¿3 qué tipo tiene? Int. ¿Y lo puedo guardar en un double?
00:27:24
Sin problema, porque int ocupa cuántos bytes. ¿Y double?
00:27:36
Entonces, en un espacio de memoria de 8 puedo guardar todo lo que se hace en un
00:27:49
espacio de una molécula. Todos los enteros se pueden representar como double. Al revés,
00:27:54
puede hacer int x es igual a 3.5. ¿Por qué no? Porque no todos los doubles, que yo pueda hacer
00:28:02
2 elevado a la 64, 2 a la 64 distintos, double distintos, ¿vale? Pero puede hacer solo 2 a la 32
00:28:15
distintos enteros. Entonces hay double que no podría hacer como entero, ¿entiendes? Entonces no le gusta.
00:28:32
cuando quiero hacer este tipo de
00:28:41
conversiones
00:28:45
hay conversiones
00:28:45
automáticas, o sea implícitas
00:28:48
¿vale? es decir
00:28:51
que si dos tipos
00:28:53
son compatibles
00:28:55
lo intentamos
00:28:56
por ejemplo, imaginaos que yo
00:29:00
tengo float n1 es igual a
00:29:05
3.4, aquí debería poner una f
00:29:07
¿vale?
00:29:09
y esto sería double
00:29:10
double n2, n2 igual a n1. ¿Funciona? Sí, sin ningún problema, porque un float son
00:29:12
cuatro bytes, un double son ocho bytes, son tipos compatibles porque son
00:29:21
numéricos y todos los float se pueden representar como double. Entonces no me
00:29:25
pide nada Java, me dice vale, aceptado. ¿Entiendes? Cuando hace así es una
00:29:31
conversión automática. Como cuando hago double x es igual a 3. Está haciendo una conversión
00:29:40
automática desde entero a double sin pedirme permiso y sin pedirme autorización. Dice no te
00:29:47
preocupes que lo hago yo porque no pierdo precisión. En esta operación, en esta conversión, no vas a
00:29:53
perder ningún dato. El dato que tú me hayas puesto se va a mantener exactamente igual en esta nueva
00:30:01
variable en este nuevo tipo no te preocupes me encargo yo que no pase nada si puedo hacer esto
00:30:09
ni te pido el permiso es una conversión automática una conversión implícita
00:30:15
luego estaba el casting o sea la conversión explícita es decir oye mira yo quiero hacer
00:30:22
una operación y esta operación no es válida yo sé que si tú haces estas operaciones hay
00:30:30
casos en que puede ser que pierdas algo. Aún así, yo, programador, te digo, sí Java, lo sé, no te
00:30:37
preocupes, tú hazlo. Entonces, se lo digo. Por ejemplo, si tengo un double e intento ahora meter
00:30:49
este double en un float, esto no funciona. Porque un double tiene 8 bits, es representado en 8 bits,
00:31:01
y yo estoy intentando decir, oye mira, ponmelo en un espacio de solo 4 bits. Entonces podría ser que
00:31:09
pierda algo de precisión, pierda algunos datos infinitesimales pequeñitos, se pierda. Y yo no
00:31:14
quiero. El Java me dice, no se puede hacer. A menos que yo no le diga explícitamente,
00:31:22
hace un casting explícito
00:31:30
entonces, él sabe
00:31:32
que no debería hacerlo, pero
00:31:34
como el programador está diciendo
00:31:36
explícitamente, tranquilo
00:31:38
yo lo sé
00:31:40
entonces dice, vale, si luego
00:31:42
habrá problemas, porque en verdad
00:31:44
no era 3,4, era 3,4
00:31:46
y al pasarlo a float, has perdido este 1 aquí, el problema es tuyo, porque tú has dicho de hacerlo.
00:31:48
Como por ejemplo, puedo yo convertir un double en un entero. Claramente estoy perdiendo toda la
00:32:03
parte decimal, pero a lo mejor es lo que quiero. Yo quiero la parte entera de un número. Pues lo
00:32:11
Lo converto entero y lo pillo.
00:32:16
Está.
00:32:18
Es en fácil.
00:32:19
Y luego está el tercer tipo de conversiones,
00:32:20
que es, estas no las puedes hacer.
00:32:26
Bajo ningún concepto.
00:32:28
Esto no se hace.
00:32:30
Como por ejemplo, yo tengo el nombre Pepe
00:32:31
e intento hacer Pepe menos n.
00:32:34
String menos 4, ¿qué quiere decir?
00:32:39
No lo sé.
00:32:42
¿Vale?
00:32:44
Debería convertir esto en un número
00:32:45
para poder hacer esta operación.
00:32:47
Y no lo voy a hacer porque no lo sé hacer.
00:32:49
No sé convertir una string a un número.
00:32:51
Por lo tanto, no se puede hacer esta cosa.
00:32:54
Esto es entre tipos incompatibles o entre tipos compatibles,
00:32:59
pero perdiendo precisiones y casting explícito.
00:33:03
Yo tengo un entero, lo intento poner en un byte.
00:33:06
El entero son cuatro bytes.
00:33:09
El byte es un byte solo.
00:33:10
Si no hago casting explícito, me va a decir, no, no puede ser.
00:33:13
Vamos a probarlos.
00:33:17
por ejemplo
00:33:18
por ejemplo
00:33:23
pongo una
00:33:28
int
00:33:30
x es
00:33:31
igual a
00:33:33
doble
00:33:35
x es igual a
00:33:37
esto funciona
00:33:40
si, que tipo de
00:33:41
conversión es
00:33:44
automática o implícita
00:33:45
vale, no
00:33:48
pierdo algo, no
00:33:50
vale
00:33:52
porque todos los enteros se pueden representar
00:33:53
como double, no ha perdido nada
00:33:55
a revés
00:33:57
int x2
00:33:59
es igual a 10
00:34:01
no
00:34:02
double
00:34:05
int y2
00:34:06
es igual a x2
00:34:12
¿cuántas conversiones hay?
00:34:13
dos conversiones, ¿de qué tipo?
00:34:26
una
00:34:30
¿aquí o no?
00:34:30
conversión. ¿Vale? ¿Que es una conversión de qué tipo? Implícita.
00:34:38
Tengo un int y lo estoy transformando en un double.
00:34:44
Ningún problema. Pero cuando ahora esté double, porque ahora es un double, porque x2
00:34:47
contiene double, no obstante dentro tenga un int, porque al fin y al cabo tiene un int,
00:34:54
pero ahora su tipo es double.
00:34:58
Lo intento poner dentro de un int, no funciona.
00:35:00
vamos a hacer una cosa
00:35:03
que hay
00:35:10
tres
00:35:28
tres
00:35:31
no
00:35:32
porque lo he hecho
00:35:33
lo he puesto fuera del main
00:35:37
lo he puesto fuera del main
00:35:39
ahí
00:35:42
a ver
00:35:46
vale, entonces
00:35:48
imaginámonos
00:35:50
que yo quiera hacer esto
00:35:52
¿cómo puedo hacer para forzar que lo haga?
00:35:55
¿Qué le pongo aquí? ¿Cómo? ¿Veis que ahora me deja?
00:35:58
Este es un casting explícito.
00:36:07
Estoy diciendo, yo lo sé que no lo podría hacer, pero hazlo.
00:36:12
Y pongamos esto. ¿Qué me escribe?
00:36:17
Bien. A ver. ¿Esto funciona?
00:36:22
que me escribe
00:36:29
veis que en este paso
00:36:31
de aquí he perdido toda la parte
00:36:35
decimal
00:36:37
entiende
00:36:38
aquí con esto
00:36:46
puedo hacer varias
00:36:50
conversiones, nos servirá más adelante
00:36:52
pero para que
00:36:54
sepáis que se puede hacer
00:36:56
operadores, estos los conocemos
00:36:57
más menos por
00:37:01
dividido y módulo
00:37:03
esto ya los hemos visto
00:37:05
¿Sí? Más operadores tenemos los lógicos, los comparación, el ternario condicional, que es el que hemos visto antes, eso de la interrelación en dos puntos, y estas cosas de aquí que probablemente no veremos.
00:37:06
¿Vale? A nivel de bit. Son cosas más avanzadas que se usan relativamente poco en lo que hacemos nosotros.
00:37:21
La lógica booleana es
00:37:28
Estos dos son todos operadores de true y false
00:37:32
¿Vale?
00:37:36
O sea que los lógicos y los de comparación
00:37:37
Me sirven para que haya un resultado de verdadero o falso
00:37:40
Es lo que usaremos luego en la condición
00:37:43
Tanto aquí en el eternario condicional
00:37:46
Como en el condicional verdadero que es el if
00:37:49
Como en el why
00:37:52
¿Vale?
00:37:53
esta parte de aquí será una parte
00:37:54
interesante e importante
00:37:56
porque nos permitirá
00:37:58
establecer condiciones de verdad
00:38:00
si esto es verdadero o falso
00:38:02
si es verdadero hace una cosa, si es falso hace otra cosa
00:38:04
mientras esto sea verdadero
00:38:06
sigue haciendo una cosa, cuando esto se vuelva
00:38:08
falso pues sal
00:38:10
comprueba si este número
00:38:11
es mayor que otro, entonces haz algo
00:38:14
si es menor haz otra cosa
00:38:16
por ejemplo para ordenar números
00:38:18
para saber
00:38:20
si el DNI
00:38:23
que has puesto es el correcto
00:38:25
si la password que has puesto es la correcta
00:38:27
y todo esto
00:38:29
creo que
00:38:29
ya estamos
00:38:33
llegando al final, mañana
00:38:34
vemos estos operadores de aquí
00:38:41
y luego empezamos
00:38:43
a hacer ejercicios
00:38:45
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Autor/es:
- Stefano Chiesa
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento - No comercial
- Visualizaciones:
- 4
- Fecha:
- 29 de septiembre de 2026 - 14:18
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 38′ 51″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 107.52 MBytes