por Gilberto Pacheco Gallegos
Este sitio presenta contenido introductorio sobre JavaScript
Una vez concluidos estos temas, puedes continuar con https://gilpgpoojs.github.io para aprender sobre programación orientada a objetos en JavaScript.
Los temas de HTML, CSS y animaciones se han movido al sitio https://gilpgihc.github.io.
Puedes ver el listado de mis sitios educativos en https://gilpgcl.github.io.
Los siguientes controles te permitirán navegar por todo el contenido del sitio.
Oculta el menú de navegación.
Muestra el menú de navegación.
Regresa a la página anterior.
Avanza a la página siguiente.
En esta lección se introducen el lenguaje de programación JavaScript y los conceptos básicos para realizar un pequeño programa.
Lenguaje de programación que cumple con las reglas del estándar ECMAScript, que está definido en el siguiente sitio, que es bastante técnico y solo para los más rudos: https://www.ecma-international.org/publications/standards/Ecma-262.htm.
En 2022, la versión más usada es la edición 6, del año 2015, pero algunos navegadores y servidores incorporan caracterísiticas más nuevas.
string
Representa texto en JavaScript.
La palabra
string
,
es la traducción al inglés del término
cadena
.
JavaScript usa la codificación UTF-16 de Unicode, que está definida en https://unicode.org.
En JavaScript los textos se representan con secuencias de caracteres delimitadas por los siguientes símbolos:
' '
El delimitador es el símbolo
apóstrofo
('
).
En su interior puedes poner cualquier caracter, excepto apóstrofo y salto de línea.
" "
El delimitador es el símbolo
comillas
("
).
En su interior puedes poner cualquier caracter, excepto comillas y salto de línea.
Para agregar un emoji desde Windows solo tienes que presionar la tecla con el logotipo de Windows al mismo tiempo que el punto ( +. ) y aparece un cuadro de diálogo que te permite seleccionar un emoji.
"Hola pp"
'😁¡¡¡¡A sus órdenes jefecita!!!!'
Cadena sin caracteres, Se escribe
""
o
''
.
console.log
Muestra textos separados por coma
(,
)
en el dispositivo de salida de la aplicación.
Los textos del método se muestran sin los símbolos que los delimitan y separados por espacios.
A cada
console.log
le corresponde un renglón diferente.
Instrucción | Salida |
---|---|
|
Hola pp |
|
ggg 7!😁 |
En cada renglón, las instrucciones se ejecutan de izquierda a derecha.
Los renglones de instrucciones se ejecutan de arriba para abajo.
Opcionalmente se puede poner el símbolo punto y coma
(;
)
al final de una expresión; pero cuando se ponen 2 o más expresones en
un mismo renglón, este símbolo es obligatorio para separarlas.
p a u
En la próxima lección se explica con más detalle como funciona este código fuente.
En esta lección se definieron los siguientes conceptos:
JavaScript
El tipo string
El método console.log
El orden de ejecución de instrucciones
Una prueba de escritorio es la ejecucuión detallada y paso a paso de un programa.
En esta lección se muestra la prueba de escritorio del siguiente programa.
En el ejemplo que aparece más abajo, la columna de números no forma parte del código; solo sirve como referencia.
p a u
console.log("p")
1console.log("p"); console.log("a")
console.log("u")
1p
Se muestra el texto p en la consola.
console.log("a")
1console.log("p"); 2console.log("a")
console.log("u")
1p 2a
Se muestra el texto a en el siguiente renglón de la consola.
console.log("u")
1console.log("p"); 2console.log("a")
3console.log("u")
1p 2a 3u
Se muestra el texto u en el siguiente renglón de la consola.
Como no hay más instrucciones, termina la ejecución del programa.
En esta lección se revisan herramientas útiles cuando se programa.
Es el control de una prueba de escritorio usando una herramienta de desarrollo.
La página JavaScript Tutor del sitio Python Tutor permite editar y depurar programas en JavaScript. Su URL es: https://pythontutor.com/javascript.html.
Depura el ejemplo de la lección anterior con JavaScript Tutor.
El sitio GilPG Nod del permite editar y depurar programas en JavaScript. Su URL es: https://gilpgnod.github.io/. Para depurar, abre las herramientas de desarrollador, por ejemplo con botón derecho del mouse y luego inspeccionar, luego haz clic en el botón de ejecutar y podrás depurar paso a paso el programa.
Especificación de un algoritmo usando texto informal parecido al lenguaje humano.
Los pseudocódigos normalmente se usan como apoyo en el desarrollo de aplicaciones de cómputo.
El siguiente pseudocódigo representa el ejemplo de la lección anterior.
Especificación de un algoritmo usando dibujos con características bien definidas.
Los diagramas de flujo normalmente se usan como apoyo en el desarrollo de aplicaciones de cómputo.
Software para editar y depurar tanto pseudocódigo en español, como diagramas de flujo.
Tiene distintas presentaciones:
https://play.google.com/store/apps/details?id=pe.diegoveloper.pseudocode&hl=es
En esta lección se definieron los siguientes conceptos:
Depuración
Pseudocódigo
Diagrama de flujo
También se presentaron las siguientes herramientas:
En esta lección se presenta el concepto de variable y sus características.
Nombre que tiene un elemento de un programa y que no se puede repetir en ciertas partes del código.
Empezar con una letra
(a
–
z
o
A
–
Z
)
con o sin acentos (á, ñ, por ejemplo),
guion bajo (_
)
o
$
.
Los caracteres siguientes pueden ser cualquiera de los
anteriores o dígitos (0
–
9
).
Aunque JavaScript permite utilizar caracteres acentuados en los identificadores, algunas herramientas de desarrollo no manejan bien estos caracteres.
_nombre
__nombre
Nombre24
_
$
n123k_$K
TaChido
serenoMoreno
$priv
$123
h54
Aunque no es obligatorio, normalmente en JavaScript los identificadores se escriben en Camel Case, donde las mayúsculas se usan para simular el inicio de una palabra. Por ejemplo:
estasSonCuatroPalabras
.
Lugar en en la memoria de la computadora donde se almacena un dato que puede cambiar durante la ejecución de un programa.
Para usar una variable, primero hay que declararla con una instrucción como la siguiente:
let miNombre = "pp";
Se declaran con
let
o con
var
,
aunque se recomienda usar
let
.
Tienen asociado un
nombre,
con la estructura de un identificador y normalmente empieza con minúscula.
En este caso, la variable se llama
miNombre
.
Tienen asociado un valor, que es un dato, el cual puede
cambiar durante la ejecución del programa. En este caso el valor es
"pp"
.
El
operador de asignación
(=
)
sirve para cambiar el valor de una variable, perdiendo el valor anterior.
El operando del lado izquierdo siempre debe ser una variable.
Cuando el nombre de una variable no aparece a la izquierda del operador de asignación, se usa su valor.
pp qk
pp qk
let miNombre = "pp"
1let miNombre = "pp"
console.log(miNombre)
miNombre = "qk"
console.log(miNombre)
1miNombre | 1"pp" |
---|
Se define y crea la variable
miNombre
en la memoria de la computadora con el valor
"pp"
.
console.log(miNombre)
1let miNombre = "pp"
2console.log(miNombre)
miNombre = "qk"
console.log(miNombre)
1miNombre | 1"pp" |
---|
2miNombre → "pp"
2pp
Muestra en consola el valor sin comillas de la variable
miNombre
que es
pp
.
miNombre = "qk"
1let miNombre = "pp"
2console.log(miNombre)
3miNombre = "qk"
console.log(miNombre)
1miNombre | 1 3"qk" |
---|
2miNombre → "pp"
2pp
Asigna a la variable miNombre el nuevo valor
"pp"
.
El valor anterior se descarta.
console.log(miNombre)
1let miNombre = "pp"
2console.log(miNombre)
3miNombre = "qk"
4console.log(miNombre)
1miNombre | 1 3"qk" |
---|
2miNombre → "pp"
miNombre → "qk"
2pp 4qk
Muestra en consola el valor sin comillas de la variable
miNombre
que es
qk
.
Como no hay más instrucciones, termina la ejecución del programa.
hola adios gg gg
let m = "hola"
1let m = "hola"
let x = "adios"
console.log(m)
console.log(x)
m = "gg"
x = m
console.log(m)
console.log(x)
1m | 1"hola" |
---|
Se define y crea la variable
m
en la memoria de la computadora con el valor
"hola"
.
let x = "adios"
1let m = "hola"
2let x = "adios"
console.log(m)
console.log(x)
m = "gg"
x = m
console.log(m)
console.log(x)
1m | 1"hola" |
---|---|
2x | 2"adios" |
Se define y crea la variable
x
en la memoria de la computadora con el valor
"adios"
.
console.log(m)
1let m = "hola"
2let x = "adios"
3console.log(m)
console.log(x)
m = "gg"
x = m
console.log(m)
console.log(x)
1m | 1"hola" |
---|---|
2x | 2"adios" |
3m → "hola"
3hola
Muestra en consola el valor sin comillas de la variable
m
que es
hola
.
console.log(x)
1let m = "hola"
2let x = "adios"
3console.log(m)
4console.log(x)
m = "gg"
x = m
console.log(m)
console.log(x)
1m | 1"hola" |
---|---|
2x | 2"adios" |
3m → "hola"
4x → "adios"
3hola 4adios
Muestra en consola el valor sin comillas de la variable
x
que es
adios
.
m = "gg"
1let m = "hola"
2let x = "adios"
3console.log(m)
4console.log(x)
5m = "gg"
x = m
console.log(m)
console.log(x)
1m |
1 5"gg" |
---|---|
2x | 2"adios" |
3m → "hola"
4x → "adios"
3hola 4adios
Asigna a la variable m el nuevo valor
"gg"
.
El valor anterior se descarta.
x = m
1let m = "hola"
2let x = "adios"
3console.log(m)
4console.log(x)
5m = "gg"
6x = m
console.log(m)
console.log(x)
1m |
1 5"gg" |
---|---|
2x |
2 6"gg" |
3m → "hola"
4x → "adios"
6x = m
x = "gg"
3hola 4adios
Asigna a la variable
x
el valor de la variable
m,
que es
"gg"
.
El valor anterior se descarta.
console.log(m)
1let m = "hola"
2let x = "adios"
3console.log(m)
4console.log(x)
5m = "gg"
6x = m
7console.log(m)
console.log(x)
1m |
1 5"gg" |
---|---|
2x |
2 6"gg" |
3m → "hola"
4x → "adios"
6x = m
x = "gg"
7m → "gg"
3hola 4adios 7gg
Muestra en consola el valor sin comillas de la variable
m
que es
gg
.
console.log(m)
1let m = "hola"
2let x = "adios"
3console.log(m)
4console.log(x)
5m = "gg"
6x = m
7console.log(m)
8console.log(x)
1m |
1 5"gg" |
---|---|
2x |
2 6"gg" |
3m → "hola"
4x → "adios"
6x = m
x = "gg"
7m → "gg"
8x → "gg"
3hola 4adios 7gg 8gg
Muestra en consola el valor sin comillas de la variable
x
que es
gg
.
Como no hay más instrucciones, termina la ejecución del programa.
El texto de una cadena es fijo. Si en su interior aparece el nombre de una variable, no se modifica. Observa el siguiente ejemplo:
a
Es similar a una variable, pero su valor no puede cambiar una vez asignado.
Normalmente el nombre se escribe en mayúsculas, usando guión bajo
(_
)
para separar palabras.
Se declaran con
const
.
3.14 PI_REDONDEADO
TypeError: Assignment to constant variable.
Las variables o constantes declaradas en el mismo espacio no pueden tener el mismo nombre.
SyntaxError: Identifier 'a' has already been declared
Cuando tratas de usar una variable o una constante no definida, obtienes un mensaje de error y se aborta la ejecución del programa.
ReferenceError: B is not defined
question
Sirve para pedir datos.
JavaScript Tutor no permite programas que pidan datos.
El ejemplo que aparece después utiliza el sitio.
https://gilpgnod.github.io/,
que permite ejecutar y depurar programas que utilicen
await question
para pedir datos
y
await log
para mostrar los datos cuando se trabaja de forma interactiva.
El ambiente Node.js, que sirve para desarrollar aplicaciones de consola,
servidores web y programar dispositivos para IoT, puede usar la función
await question, pero primero tienes que importarla de la librería
readline
y usarla de una forma un poco diferente a como trabajamos en este sitio.
El proceso de información es la manera en que normalmente se utilizan los datos en el software. Normalmente consta de 3 pasos que se ejecutan uno tras otro:
Obtener los datos que se van a procesar.
Aplicar un mecanismo de transformación a los datos para obtener resultados, también conocidos como datos de salida.
Mostrar los resultados obtenidos. En algunos casos los datos de salida se almacenan en dispositivos externos a una computadora.
En esta lección se definieron los siguientes conceptos:
identificador
Variable
Constante
La función question
Proceso de información
En esta lección se presenta el concepto de variable y sus características.
Sección de código fuente que no es procesada y normalmente explica partes de un programa para que se entendan mejor.
Normalmente se colocan en la línea inmediatamente antes del texto que explican, aunque también se colocan al final del renglón que explican.
Empieza con el texto
//
y termina con el final de la línea.
Usan una sola línea hasta su final.
Hola pp t
Hola pp t
console.log("Hola", "pp")
// Muestra Hola pp
1console.log("Hola", "pp")
console.log("t") // Muestra t
1Hola pp
Se muestra el texto Hola pp en la consola.
console.log("t")
// Muestra Hola pp
1console.log("Hola", "pp")
2console.log("t") // Muestra t
1Hola pp
2t
Se muestra el texto t en el siguiente renglón de la consola.
Como no hay más instrucciones, termina la ejecución del programa.
Empieza con el texto
/*
y terminan con
*/
.
Usan una o más líneas.
Hola pp t bb
Hola pp t bb
console.log("Hola", "pp")
/* Muestra Hola pp */
1console.log("Hola", "pp")
console.log("t")/*Muestra t*/
/* Muestra
* bb */
console.log("bb")
1Hola pp
Se muestra el texto Hola pp en la consola.
console.log("t")
/* Muestra Hola pp */
1console.log("Hola", "pp")
2console.log("t")/*Muestra t*/
/* Muestra
* bb */
console.log("bb")
1Hola pp
2t
Se muestra el texto t en el siguiente renglón de la consola.
console.log("bb")
/* Muestra Hola pp */
1console.log("Hola", "pp")
2console.log("t")/*Muestra t*/
/* Muestra
* bb */
3console.log("bb")
1Hola pp
2t
3bb
Se muestra el texto bb en el siguiente renglón de la consola.
Como no hay más instrucciones, termina la ejecución del programa.
Comentario de una o más líneas que empieza con
/**
y explica la definición de un elemento del código.
También se le llama comentario de documentación.
Se coloca en la línea inmediatamente antes del texto que explica.
Cuando el nombre del elemento de código se escoge bien, el desarrollador puede decidir omitir la descripción en el comentario.
Algunas herramientas, como Visual Studio Code, pueden usar estos comentarios para detectar errores en el código.
El contendo de este tipo de comentarios debe seguir las reglas de:
https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html.
https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html.
https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html.
En esta lección se definieron los siguientes conceptos:
Comentario de una línea
Comentario de una o más líneas
Comentario JsDoc
En esta lección se presenta el concepto de bloques y sus características.
Listas de 0 o más instrucciones encerradas entre llaves
({}
).
Cuentan como una instrucción.
Se ejecutan siguiendo el mismo orden de ejecución de JavaScript.
Cuando en su interior se declara una variable con
const
o con
let
,
solo existe dentro del bloque donde se declara.
Una vez terminada la ejecución del bloque, todas las variables declaradas
con
const
o con
let
en su interior, son eliminadas.
Los bloques usan las variables o constantes declaradas fuera del bloque.
Las variables declaradas con
const
o con
let
dentro de un bloque ocultan a otras con el mismo nombre que estén
declaradas fuera del bloque.
z gg z z
Las variables declaradas con
const
o con
let
dentro de un bloque ocultan a otras con el mismo nombre que estén
declaradas fuera del bloque.
p gg p
En esta lección se definió el concepto de bloque y sus características.
En esta lección se presenta el tipo boolean y los operadores de comparación de textos.
a === b
Devuelve
true
si los dos operandos representan el mismo texto, considerando
mayúsculas y minúsculas; en otro caso, devuelve
false
.
false false true
a !== b
Devuelve
true
si los dos operandos representan textos diferentes, considerando mayúsculas
y minúsculas; en otro caso, devuelve
false
.
true true false
En esta lección se definieron los siguientes conceptos:
El operador de igualdad de textos a === b
El operador diferente de para textos a !== b
if
En esta lección se presenta la estructura de control
if
.
if
Permite usar el resultado de una condición lógica para controlar si un grupo de instrucciones debe o no ejecutarse.
Una forma de escribir esta estructura es la siguiente:
La condición es una expresión que nos proporciona un resultado booleano.
Como un bloque de instrucciones se considera una instrucción, también podemos escribir de la siguiente forma:
En las siguientes diapositivas se explica el funcionamiento de esta estructura.
if
es verdadera
Cuando la condición de
if
es verdadera, se realiza la instrucción o el bloque de instrucciones que
la estructura tiene asociada.
Posteriormente se ejecutan las instrucciones que vengan después de la estructura.
El que es 🍐, desespera. Tu fruta: pera
if
es falsa
Cuando la condición de
if
es false, se salta la instrucción o el bloque de instrucciones que
la estructura tiene asociada.
Posteriormente se ejecutan las instrucciones que vengan después de la estructura.
Tu fruta: fresa
La estructura
if
se puede resumir con la siguiente ilustración:
if
En esta lección se presenta el desarrollo de un programa que usa la estructura de control if.
Antes de empezar a programar, hay que organizar el trabajo, entender el problema a resolver y plantear una solución.
Hacer un programa que:
Pida al usuario la fruta que prefiere.
Si la fruta es
pera,
mostrar el mensaje:
El que es 🍐, desespera.
Mostrar la fruta introducida por el usuario.
Los escenarios son ejemplos con datos para mostrar el comportamiento que debe tener el programa.
Cuando el programa esté listo, se puede probar introduciendo los datos de entrada de cada escenario y el programa debe generar la salida correspondiente.
Imagína un diálogo en el cuál el programa inicia preguntando. Luego espera a que el usuario conteste y finalmente el programa muestra resultados.
if-else
En esta lección se presenta la estructura de control
if-else
.
if-else
Permite usar el resultado de una condición lógica para controlar si uno de 2 grupos de instrucciones debe ejecutarse.
Una forma de escribir esta estructura es la siguiente:
La condición es una expresión que nos proporciona un resultado booleano.
Como un bloque de instrucciones se considera una instrucción, también podemos escribir de la siguiente forma:
En las siguientes diapositivas se explica el funcionamiento de esta estructura.
if-else
es verdadera
Cuando la condición de
if
es verdadera, se realiza la instrucción o el bloque de instrucciones que
la estructura tiene después de la condición.
Posteriormente se ejecutan las instrucciones que vengan después de la estructura.
Bien. Adios.
if-else
es falsa
Cuando la condición de
if
es false, se realiza la instrucción o el bloque de instrucciones que
la estructura tiene después de la palabra reservada
else|
.
Posteriormente se ejecutan las instrucciones que vengan después de la estructura.
Mal. Adios.
La estructura
if-else
se puede resumir con la siguiente ilustración:
if-else
En esta lección se presenta el desarrollo de un programa que usa la estructura de control if-else.
Hacer un programa que muestre una adivinanza y pida al usuario que adivine; si adivina, muestra el mensaje Bien y si no, muestra Mal.
Agua pasa por mi casa, cate de mi corazón. Adivina (en minúsculas):
Agua pasa por mi casa, cate de mi corazón. Adivina (en minúsculas):
En esta lección se presenta la estructura de control condicional múltiple.
Usa 2 o más estructuras
if
unidas por palabras reservadas
else
.
Al revisar las condiciones una por una, desde el inicio, se ejecuta únicamente la primera instrucción o bloque de instrucciones cuya condición sea verdadera.
Posteriormente se ejecutan las instrucciones que vengan después de la estructura.
Una forma de escribir esta estructura es la siguiente:
También podemos escribir de la siguiente forma:
En las siguientes diapositivas se ejemplifica el funcionamiento de esta estructura.
Ariana Grande. Adios.
Bad Bunny. Adios.
Adios.
La estructura de control condicional múltiple se puede resumir con la siguiente ilustración:
En esta lección se presenta el desarrollo de un programa que usa la estructura de control condicional múltiple.
Hacer un programa que pida al usuario un género musical y recomiende un artista de ese género.
Recomiendo artistas por género. Selecciona: 1 Pop 2 Reguetón Introduce número:
Recomiendo artistas por género. Selecciona: 1 Pop 2 Reguetón Introduce número:
Recomiendo artistas por género. Selecciona: 1 Pop 2 Reguetón Introduce número:
En esta lección se presenta la estructura de control condicional múltiple con else.
Usa 2 o más estructuras
if
unidas por palabras reservadas
else
y al final hay una instrucción o bloque de instrucciones unida con
else
.
Al revisar las condiciones una por una, desde el inicio, se ejecuta únicamente la primera instrucción o bloque de instrucciones cuya condición sea verdadera.
Si ninguna condición es verdadera, se elecuta la instrucción o bloque de
instrucciones del último
else
.
Posteriormente se ejecutan las instrucciones que vengan después de la estructura.
Una forma de escribir esta estructura es la siguiente:
También podemos escribir de la siguiente forma:
En las siguientes diapositivas se ejemplifica el funcionamiento de esta estructura.
Ariana Grande. Adios.
Bad Bunny. Adios.
Opción incorrecta. Adios.
La estructura de control condicional múltiple con else se puede resumir con la siguiente ilustración:
En esta lección se presenta el desarrollo de un programa que usa la estructura de control condicional múltiple con else.
Hacer un programa que pida al usuario un género musical y recomiende un artista de ese género; si no tiene recomendaciones para dicho género, que muestre un mensaje indicando esta situación.
Recomiendo artistas por género. Selecciona: 1 Pop 2 Reguetón Introduce número:
Recomiendo artistas por género. Selecciona: 1 Pop 2 Reguetón Introduce número:
Recomiendo artistas por género. Selecciona: 1 Pop 2 Reguetón Introduce número:
En esta lección se presentan operadores de texto.
number
Representa números en JavaScript.
En JavaScript se usa el estándar IEEE 754 y en realidad son límites.
Incluye a los números que llevan punto decimal, como podrían ser
-1.8
,
1.0
,
0.999999999999999999999999
o
801.002
.
Incluye a los números enteros como
1
,
2
,
101
.
El valor
NaN
representa valores que no son un número; por ejemplo, los resultados
de
0 / 0
y
Math.sqrt(-1)
(la raíz cuadrada de -1).
Representación de números en notación científica.
a + b
Cuando uno de los 2 operandos del operador
+
es
string
,
se convierten los 2 operandos en texto y se juntan.
a += b
Equivale a
a = a + x;
pero se ejecuta más rápido.
Nota que el primer operando debe ser una variable.
hgg hgg2 hgg2.
Secuencia de caracteres delimitadas por el símbolo
acento invertido
(`
),
que se genera con Alt Gr+} en el teclado latinoamericano.
En su interior puedes poner cualquier caracter, excepto acento invertido.
Puede incluir saltos de línea.
En su interior puedes poner la secuencia
${}
,
que permite poner en el interior de las llaves una expresión,
cuyo resultado convertido a texto sustituye a toda esta secuencia.
Ejemplo de bb 288 de bb yy
a < b
Representa el orden natural de los datos. Si el valor a la izquierda
va antes que el de la derecha, el resultado es
true
;
en otro caso es
false
.
Entre 2 caracteres, el que tenga el menor código Unicode es el menor.
Entre 2 textos, el que aparezca primero en el diccionario es el menor.
En el ejemplo que sigue, el orden natural es:
"0" < "A" < "a" < "aa" < "ah" < "ai" < "b"
a > b
Representa el orden invertido de los datos. Si el valor a la izquierda
va después que el de la derecha, el resultado es
true
;
en otro caso es
false
.
Entre 2 caracteres, el que tenga el menor código Unicode es el menor.
Entre 2 textos, el que aparezca primero en el diccionario es el menor.
En el ejemplo que sigue, el orden natural es:
"aa" < "ah" < "ai"
a <= b
En el ejemplo que sigue, el orden natural es:
"aa" < "ah" < "ai"
a >= b
En el ejemplo que sigue, el orden natural es:
"aa" < "ah" < "ai"
Se revisaron los siguientes operadores sobre texto:
+
+=
`${}`
<
>
<=
>=
En esta lección se presentan los operadores lógicos.
a && b
Es el operador Y en corto circuito.
Si
a
se evalúa a
false
,
el resultado es
a
y no se evalúa
b
;
de lo contrario, el resultado es
b
.
a || b
Es el operador O en corto circuito.
Si
a
se evalúa a
true
,
el resultado es
a
y no se evalúa
b
;
de lo contrario, el resultado es
b
.
!a
Si
a
se evalúa a
true
,
el resultado es
false
;
de lo contrario, el resultado es
true
.
a ? b : c
Si
a
se evalúa a
true
,
el resultado es
b
;
de lo contrario, el resultado es
c
.
Se revisaron los siguientes operadores lógicos:
&&
||
!
?:
do-while
En esta lección se presenta la estructura de control
do-while
.
do-while
Usa la palabra reservada
do
seguida de una instrucción o bloque de instrucciones, seguida por la palabra
reservada
while
,
finalizando con una condición.
Una forma de escribir esta estructura es la siguiente:
También podemos escribir de la siguiente forma:
Para ejecutar, se siguen estos pasos:
Se ejecuta la instrucción o bloque de instrucciones.
Se evalúa la condición.
Si la condición y si evalúa a
false
,
se termina el ciclo y se continúa con las instrucciones que sigan después
de la estructura; pero si evalúa a
true
,
se regresa al punto 1 para ejecutar otra vez el bloque de instrucciones y
luego se pasa al punto 2 para evaluar la condición, para después ejecutar
otra vez este paso y las instrucciones aquí indicadas.
El bloque de instrucciones se ejecuta al menos una vez.
En la siguiente diapositiva se ejemplifica el funcionamiento de esta estructura.
do-while
h hh Adios.
La estructura de control
do-while
se puede resumir con la siguiente ilustración:
do-while
En esta lección se presenta el desarrollo de un programa que usa la estructura
de control do-while
.
Hacer un programa que pida de forma repetida al usuario seleccionar un género musical de una lista de opciones, mientras la opción seleccionada no sea ninguna de las opciones válidas.
Selecciona: 1 Pop 2 Reguetón Introduce número:
Selecciona: 1 Pop 2 Reguetón Introduce número:
Selecciona: 1 Pop 2 Reguetón Introduce número:
Selecciona: 1 Pop 2 Reguetón Introduce número:
Selecciona: 1 Pop 2 Reguetón Introduce número:
En esta lección se presentan operadores numéricos.
Los números a la izquierda son menores que los de la derecha.
0
Es el centro de la recta.
Number.MIN_VALUE
Es el valor positivo más cercano a 0; aproximadamente 5 × 10-324
-Number.MIN_VALUE
Es el valor negativo más cercano a 0; aproximadamente -5 × 10-324.
Number.MAX_SAFE_INTEGER
El entero más positivo n para el cual n y n + 1 se pueden representar como un número exacto. Su valor es 9007199254740991.
Number.MIN_SAFE_INTEGER
El entero más negativo n para el cual n y n - 1 se pueden representar como un número exacto. Su valor es -9007199254740991.
Number.MAX_VALUE
Es el valor numérico finito más positivo, aproximadamente 1.7976931348623157 × 10308.
-Number.MAX_VALUE
Es el valor numérico finito más negativo, aproximadamente -1.7976931348623157 × 10308.
Number.POSITIVE_INFINITY
Representa a todos los valores mayores que
Number.MAX_VALUE
.
Number.NEGATIVE_INFINITY
Representa a todos los valores menores que
-Number.MAX_VALUE
.
Aparte del operador de asignación
(=
),
hay otros operadores que permiten cambiar el valor de una variable.
También hay operadores de incremento y decremento en 1, pero son algo truculentos; es mejor usarlos solos, sin combinarlos con otros operadores.
El operador binario
<
representa el orden natural de los datos. Si el valor a la izquierda
va antes que el de la derecha, el resultado es
true
;
en otro caso es
false
.
El operador binario
>
representa el orden invertido de los datos. Si el valor a la izquierda
va después que el de la derecha, el resultado es
true
;
en otro caso es
false
.
En el ejemplo que sigue, el orden natural es:
0 < 3 < 8
En el ejemplo que sigue, el orden natural es:
0 < 3 < 8
Aquí se muestra el orden en que se ejecutan los operadores cuando se combinan en una expresión. Los que aparecen primero son los que se ejecutan primero.
Orden | Descripción | Asociatividad | Operador | ejempo |
---|---|---|---|---|
1 | agrupamiento | n/a | (…)
|
(2 + 3)
|
2 | miembro | izquierda a derecha | ….… |
a.b |
…[…]
|
a[0]
|
|||
new | n/a | new …(…)
|
new Clase(0)
|
|
invocación a función | izquierda a derecha | …(…)
|
fn(x)
|
|
3 | incremento sufijo | n/a | …++ |
a++ |
decremento sufijo | n/a | …-- |
a-- |
|
4 | incremento prefijo | n/a | ++… |
++a |
decremento prefijo | n/a | --… |
--a |
|
not lógico | derecha a izquierda | !… |
!a |
|
not a nivel de bits | derecha a izquierda | ~… |
~a |
|
+ unario | derecha a izquierda | +… |
+a |
|
negación unaria | derecha a izquierda | -… |
-a |
|
typeof | derecha a izquierda | typeof …
|
typeof a
|
|
void | derecha a izquierda | void …
|
void a
|
|
delete | derecha a izquierda | delete …
|
delete a.nombre
|
|
5 | exponenciación | n/a | … ** …
|
a ** b
|
6 | multiplicación | izquierda a derecha | … * … |
a * b |
división | izquierda a derecha | … / … |
a / b |
|
residuo | izquierda a derecha | … % … |
a % b |
|
7 | suma | izquierda a derecha | … + … |
a + b |
resta | izquierda a derecha | … - … |
a - b |
|
8 | corrimiento de bits | izquierda a derecha | … << …
|
a << b
|
… >> …
|
a >> b
|
|||
… >>> …
|
a >>> b
|
|||
9 | relacional | izquierda a derecha | … < …
|
a < b
|
… <= …
|
a <= b
|
|||
… > … |
a > b |
|||
… >= …
|
a >= b
|
|||
in | izquierda a derecha | … in …
|
"nombre" in a
|
|
instanceof | izquierda a derecha | … instanceof …
|
a instanceof Array
|
|
10 | igualdad | izquierda a derecha | … == …
|
a == b
|
… != …
|
a != b
|
|||
… === …
|
a === b
|
|||
… !== …
|
a !== b
|
|||
11 | and de bits | izquierda a derecha | … & …
|
a & b
|
12 | xor de bits | izquierda a derecha | … ^ … |
a ^ b |
13 | or de bits | izquierda a derecha | … | … |
a | b |
14 | and lógico | izquierda a derecha | … && …
|
a && b
|
15 | or lógico | izquierda a derecha | … || …
|
a || b
|
16 | condicional | derecha a izquierda | … ? … : …
|
a ? b : c
|
17 | asignación | derecha a izquierda | … = … |
a = b |
… += …
|
a += b
|
|||
… -= …
|
a -= b
|
|||
… *= …
|
a *= b
|
|||
… /= …
|
a /= b
|
|||
… %= …
|
a %= b
|
|||
… <<= …
|
a <<= b
|
|||
… >>= …
|
a >>= b
|
|||
… >>>= …
|
a >>>= b
|
|||
… &= …
|
a &= b
|
|||
… ^= …
|
a ^= b
|
|||
… |= …
|
a |= b
|
|||
18 | yield | derecha a izquierda | yield …
|
yield a
|
19 | coma | izquierda a derecha | … , … |
a , b |
Hay que aprender a estructurar las expresiones matemáticas en el lenguaje de programación.
x = (-b + Math.sqrt(b**2 - 4*a*c)) / (2*a)
y = ((y2 - y1) / (x2 - x1)) * (x - x1) + y1
El objeto
Math
.
Se revisaron los siguientes operadores sobre texto:
+
+=
`${}`
<
>
<=
>=
while
En esta lección se presenta la estructura de control
while
.
while
Usa la palabra reservada
while
,
seguida con una condición,
seguida de una instrucción o bloque de instrucciones.
Una forma de escribir esta estructura es la siguiente:
También podemos escribir de la siguiente forma:
Para ejecutar, se siguen estos pasos:
Se evalúa la condición. Si el resultado es
false
,
se termina el ciclo y se continúa con las instrucciones que sigan después
de la estructura; pero si evalúa a
true
,
pasa al siguiente punto para ejecutar la instrucción o bloque de
instrucciones.
Se ejecuta la instrucción o bloque de instrucciones.
Regresa a punto 1 para revisar la condición.
Es posible que la instrucción o bloque de instrucciones no se ejecute.
En las siguientes diapositivas se ejemplifica el funcionamiento de esta estructura.
while
ascendente1 2 3 Adios.
while
ascendente de 2 en 20 2 4 Adios.
while
descendente2 1 1 0 Adios.
while
descendente de 2 en 26 4 2 Adios.
while
cuyas instrucciones no se ejecutanAdios.
while
descendente mal diseñadowhile
ascendente mal diseñado
La estructura de control
while
se puede resumir con la siguiente ilustración:
for
En esta lección se presenta la estructura de control
for
.
for
Puede escribirse de cualquiera de estas 2 formas:
Equivale a la estructura de control:
La sección de inicialización crea variables que solo existen
durante la ejecución del ciclo
for
y se eliminan una vez
terminado.
La sección de paso cambia el valor de las variables para que
hacer que la condición esté cada vez más cerca de evaluar a
false
.
for
Hola. 4 5 6 Adios.
La estructura de control
for
se puede resumir con la siguiente ilustración:
switch
En esta lección se presenta la estructura de control
switch
.
switch
El switch es una alternativa a la condicional múltiple
que evalúa una expresión y si su resultado corresponde al valor que
aparece después de la palabra reservada
case
,
empieza a ejecutar las instrucciones que sigan después.
Una vez entrado en un caso, el
switch
continúa avanzando sin importar si invade otros casos, hasta
encontrar la palabra reservada
break
,
que nos saca de la estructura de control.
La siguiente figura representa el comportamiento de la estructura de
control switch
.
switch
switch-default
El switch-default es una alternativa a la condicional
múltiple con else, cuyo comportamiento es similar al del
switch
, donde
default
,
es una etiqueta más, que atrae a todos los casos que no correspondan
a ninguno de los
case
.
Una vez entrado en un caso, el
switch
continúa avanzando sin importar si invade otros casos, hasta
encontrar la palabra reservada
break
,
que nos saca de la estructura de control.
La siguiente figura representa el comportamiento de la estructura de
control switch-default
.
switch-default
El switch es una alternativa a la condicional múltiple
que evalúa una expresión y si su resultado corresponde al valor que
aparece después de la palabra reservada
case
,
empieza a ejecutar las instrucciones que sigan después.
El switch-default es una alternativa a la condicional
múltiple con else, cuyo comportamiento es similar al del
switch
, donde
default
,
es una etiqueta más, que atrae a todos los casos que no correspondan
a ninguno de los
case
.
Una vez entrado en un caso, el
switch
continúa avanzando sin importar si invade otros casos, hasta
encontrar la palabra reservada
break
,
que nos saca de la estructura de control.
En esta lección se presenta el concepto de función.
Secuencia de instrucciones que tiene asociado un nombre.
El nombre de una función es un identificador.
Una función se declara de una forma parecida a la siguiente:
Una función no se ejecuta ella misma.
Se usa una instrucción llamada invocación de función, que
consiste en el nombre de la función, seguida de paréntesis; por ejemplo, si
una función se llama
saluda
,
para hacer que se ejecute, hay que colocar la instrucción
saluda()
Antes de que una función se ejecute, se suspende lo que se estaba haciendo y se marca el punto donde se invocó, posteriormente, se ejecuta la función y al terminar, se regresa al punto de invocación y se continúa con la siguiente instrucción.
En JavaScript, las variables declarades en el mismo espacio que la declaración de una función, se pueden usar dentro de la función.
pp adios
pp qk adios
global-1 c2 global-2 c1-1 c2 c1-2 global-3
m1 1 3
13 ggg
18 6 33 65
hola -11 -60 mx 4
Invoca: 2, 3 Invoca: 1 , 3 Invoca: 0 , 3 Devuelve 3 Devuelve: 4 Devuelve: 5 5
En esta lección se definieron los siguientes conceptos:
Función.
Invocación de funciones más de una vez.
Funciones que invocan funciones.
Paso de parámetros.
Funciones con expresiones en los parámetros.
Funciones flecha.
Recursividad.
En esta lección se introduce el concepto de objeto y sus características básicas.
Los datos y funciones asociados con un objeto en JavaScript reciben el nombre de property o propiedad.
Las funciones asociadas con un objeto se llaman método.
Los datos asociados con un objeto en general se llaman atributo o campo.
Las propiedades de un objeto al momento de diseño deben ser
características directas del objeto, por ejemplo nombre
. No
es válido que describan características de otros objetos; por
ejemplo, si un objeto es una película, no es válido ponerle el
atributo .
nombreDelDirector
Hola. { nombre: 'pp', color: 'marrón', saluda: [Function] } pp marrón null
{ saludo: [Function], nombre: 'pp' } pp Bye
string
10 o true 1 5 HOLA MUNDO hola mundo la M la Mundo h Ajua Hola Mundo hAjuaHola Mundo
string
true 8 1000 8.00
string
a number
8 8 8 15 15 8.33
En esta lección se definieron los siguientes conceptos:
Creación de objetos paso a paso.
Literales de objeto.
Propiedades y métodos de
string
.
Conversión a
string
.
Conversión de
string
a
number
.
En esta lección se introduce el concepto clase.
class
Hola. Soy vl.
6
class Cl01
1 class Cl01 { constructor(b) { this.a = b } mensaje(c) { console.log(c + this.a) } } const a = new Cl01(4) a.mensaje(2)
1Cl01 | 11 |
---|
name | Cl01 |
---|
new
1 class Cl01 { constructor(b) { this.a = b } mensaje(c) { console.log(c + this.a) } } const a =2new Cl01(4) a.mensaje(2)
1Cl01 | 11 |
---|
name | Cl01 |
---|
Se crea un objeto de la clase Cl01, sin ninguna property y se le asigna un identificador, que en este caso es 2.
Cl01(4)
1 class Cl01 { constructor(b) { this.a = b } mensaje(c) { console.log(c + this.a) } } const a =2new3Cl01(4) a.mensaje(2)
1Cl01 | 11 |
---|---|
3congela |
name | Cl01 |
---|
3new Cl01(4)
2 Cl01(4)
constructor(b)
1 class Cl01 { 4 constructor(b) { this.a = b } mensaje(c) { console.log(c + this.a) } } const a =2new3Cl01(4) a.mensaje(2)
name | Cl01 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
this.a = b
1 class Cl01 { 4 constructor(b) { 5 this.a = b } mensaje(c) { console.log(c + this.a) } } const a =2new3Cl01(4) a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
}
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } mensaje(c) { console.log(c + this.a) } } const a =2new3Cl01(4) a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
Termina el registro de activación y devuelve el valor de this, que es 2.
new Cl01(4) → 2
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } mensaje(c) { console.log(c + this.a) } } const a =2new3Cl01(4)7→2 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
a = 2
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } mensaje(c) { console.log(c + this.a) } } 8 const a =2new3Cl01(4)7→2 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
Crea la constante de referencia a en el stack, cuyo valor es el devuelto por el constructor.
a.mensaje(2)
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } mensaje(c) { console.log(c + this.a) } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
a.mensaje
.
mensaje(c) {
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } 10 mensaje(c) { console.log(c + this.a) } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
10this.mensaje(c)
c + this.a
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } 10 mensaje(c) { console.log(11c + this.a) } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
10this.mensaje(c)
11c + this.a
2 + 4
6
console.log(c + this.a)
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } 10 mensaje(c) { 12 console.log(11c + this.a) } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
10this.mensaje(c)
11c + this.a
2 + 4
6
Se muestra el resultado de la expresión 11.
}
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } 10 mensaje(c) { 12 console.log(11c + this.a) 13 } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
10this.mensaje(c)
11c + this.a
2 + 4
6
1 class Cl01 { 4 constructor(b) { 5 this.a = b 6 } 10 mensaje(c) { 12 console.log(11c + this.a) 13 } } 8 const a =2new3Cl01(4)7→2 9 a.mensaje(2)14
name | Cl01 |
---|
5a | 54 |
---|
3new Cl01(4)
2 Cl01(4)
4this Cl01(b)
5this.a = b
2 .a = 4
9a.mensaje(2)
2.mensaje(2)
10this.mensaje(c)
11c + this.a
2 + 4
6
Descongela el último registro de activación congelado en el stack.
Como no hay más instrucciones, Elimina el registro de activación y termina el programa.
Hola. Clase QK. Hola. Instancia qkita1 Hola. Instancia qkita2
En JavaScript por el momento todos los miembros de una clase son públicos, pero se pueden usar convenciones para indicar niveles de acceso.
Como hay varias convenciones, usaremos las del compilador de TypeScript, que Visual Studio Code puede usar para validar el acceso.
@public
Es el valor predefinido e indica que el miembro puede usarse desde cualquier parte del código.
@private
_miembro
El miembro solo debe usarse dentro de la clase que lo define.
@protected
El miembro solo debe usarse dentro de la clase que lo define y subclases.
pp pp juega
En esta lección se definieron los siguientes conceptos:
class
Instancia de clase
Creación de instancia de clase
getter
setter
En esta lección se introduce el concepto de herencia.
4 -2 4 -2 8 8
Hola. Hola. Consola.
En esta lección se definieron los siguientes conceptos:
Coordinación de constructores en la herencia.
Sobrescritura de métodos en la herencia.
En esta lección se presenta el concepto de arreglo y la forma de procesarlo.
[ 'mx', 'my', 'mu' ] 3 mx my mu mx ho
mx my mu adios
for-of
mx my mu adios
for-each
mx my mu adios
[ Clao { a: -3 }, Clao { a: 4 }, Clao { a: 8 } ] -3 4 8
[ { a: -3 }, { a: 4 }, { a: 8 } ] -3 4 8
forEach
con objetos-3 4 8
map
filter
join
reduce
sort
Set
En esta lección se definieron los siguientes conceptos:
Arreglos básicos.
Uso de contadores para procesar arreglos.
La estructura
for-of
para procesar arreglos.
El método
forEach
de arreglos.
Arreglos de instancias de clases.
Arreglos de literales de objetos.
El método
forEach
de arreglos de objetos.
El método
map
.
El método
filter
.
El método
join
.
El método
reduce
.
El método
sort
.
Encadenamiento de métodos.
El tipo de datos
Set
.
En esta lección se presenta el concepto de polimorfismo.
En este ejemplo no se invoca el método en super; aunque es recomendable invocarlo, hay que estudiar bien la lógica del programa.
Adios Bye
Hola Hi
Hola Hi
Soy LeBron Encesto Soy Lionel Anoto gol
En esta lección se introdujeron los siguientes conceptos:
Polimorfismo con sobrescritura de métodos.
Polimorfismo con interfaces.
Polimorfismo con clases abstractas.
En esta lección se presenta el concepto de excepciones y como procesarlas.
throw
Cuando una instrucción no puede completarse por algún error, debe
abortar usando la instrucción
throw new Error(mensaje)
A este proceso se le llama Lanzar una excepción.
La instrución
Error: throw aborta el programa
Los errores generados por la instrucción
throw
pueden procesarse de varias formas que se verán a continuación.
try-catch
Para procesar los errores, la instrucción
throw
debe ejecutarse dentro de las llaves de
try
.
Si llega al final de las llaves de
try
sin lanzar ninguna excepción, se hace lo siguiente:
La cláusula
catch
y las
instrucciones para procesar la excepción
no se ejecutan.
Continua con las instrucciones que vengan después de la estructura
completa
try-catch
.
Si se lanza una excepción dentro de las llaves de
try
,
se hace lo siguiente:
Las restantes instrucciones hasta cerrar llaves no se ejecutan.
Se toma la excepción lanzada; a este proceso se le llama atrapar la excepción.
La excepción atrapada se pasa como parámetro a la cláusula
catch
el flujo normal se restablece y se ejecutan las
instrucciones para procesar la excepción.
Continua con las instrucciones que vengan después de la estructura
completa
try-catch
.
Ejecuta bien Continúa normal Intenta seguir Procesa el error: Fallo Adios
try-finally
Las instrucciones que están dentro de
finally
siempre se ejecutan.
Si llega al final de las llaves de
try
sin lanzar ninguna excepción, se hace lo siguiente:
Las
instrucciones que siempre se ejecutan
de la cláusula
finally
se ejecutan.
Continua con las instrucciones que vengan después de la estructura
completa
try-finally
.
Si se lanza una excepción dentro de las llaves de
try
,
se hace lo siguiente:
Las restantes instrucciones hasta cerrar llaves no se ejecutan.
Las
instrucciones que siempre se ejecutan
de la cláusula
finally
se ejecutan.
Continúa lanzando la excepción.
Sin error Si se ejecuta Continua sin falla Ejecuta con error
Error: A volar
try-catch-finally
Es una combinación de las 2 anteriores. Siempre restablece el fujo normal y
siempre se ejecutan las
instrucciones que siempre se ejecutan
de la cláusula
finally
Si llega al final de las llaves de
try
sin lanzar ninguna excepción, se hace lo siguiente:
La cláusula
catch
y las
instrucciones para procesar la excepción
no se ejecutan.
Continua con las
instrucciones que siempre se ejecutan
de la cláusula
finally
.
Continua con las instrucciones que vengan después de la estructura
completa
try-catch-finally
.
Si se lanza una excepción dentro de las llaves de
try
,
se hace lo siguiente:
Las restantes instrucciones hasta cerrar llaves no se ejecutan.
Se atrapa la excepción y se pasa como parámetro a la cláusula
catch
.
Se ejecutan las instrucciones para procesar la excepción. y el flujo normal se restablece.
Continua con las
instrucciones que siempre se ejecutan
de la cláusula
finally
.
Continua con las instrucciones que vengan después de la estructura
completa
try-catch-finally
.
Restablece Ouch finally se ejecuta Esto se realiza Try exitoso. finally se hace Esto se hace
Empezamos ¿Fallaremos? Fallamos Terminamos
En esta lección se presentaron los siguientes conceptos:
throw
.
try-catch
.
try-finally
.
try-catch-finally
.
try
anidado.
Formulario con excepciones.
En esta lección se presenta el concepto de promesa y como procesarla.
Éxito 1: Hola Fallo 2: ouch
async-await
Éxito 1: Hola Falló 2: ouch
Éxito 1 Hola Falló 2: ouch
Promise.all
Éxito 1: Éxito[a],Éxito[z],Éxito[b] Falló 2: Falla[]
En esta lección se revisaron los siguientes conceptos:
Promise.resolve
Promise.reject
async-await
Creación de promesas
Promise.all
En esta lección se presentan distintos tipos de asociaciones.
Una sonaja tiene como dueño a un bebé.
Una infante tiene muchos juguetes.
Un piloto pilotea un avión.
Un avión es piloteado por un piloto.
Un juguete2 pertenece a un infante2.
Un infante2 tiene muchos juguetes2.
Un usuario usa muchas computadoras.
Una computadora es usada por muchos usuarios.
Asociación binaria.
Un objeto se forma con partes independientes.
Asociación binaria.
Un objeto se forma con partes que no pueden existir sin el objeto principal.
En esta lección se revisaron los siguientes de asociaciones:
A uno.
A muchos.
Uno a uno
.
Uno a muchos
.
Muchos a muchos
.
Agregación.
Composición.
En esta lección se presenta el concepto de patrón de diseño y algunos ejemplos.
Técnicas para resolver un problema común en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
Un patrón de diseño resulta ser una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características:
Haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores.
Debe ser reutilizable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.
Un sitio donde vienen explicados los patrones de diseño es: https://www.oodesign.com/
Design Patterns. Elements of Reusable Object-Oriented Software - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Addison Wesley (GoF- Gang of Four)
Es un mecanismo para tener una sola instancia de una clase.
Es un mecanismo para crear objetos de una forma dinámica.
Es un mecanismo en el que el acceso a un objeto se hace usando otro objeto que lo representa.
Es un mecanismo para organizar programas que usan interfaces gráficas. Hay muchas versiones de este patrón.
En esta lección se revisaron los siguientes conceptos:
Patrón de diseño
El patrón singleton
El patrón factory.
El patrón proxy.
El patrón MVC.