Este aparece como el paso previo a programar y consiste en adaptar nuestra forma de razonar para poder resolver un problema lógico.
Tiene 4 etapas:
- 🔨Descomposición: desarticular el problema en parte más pequeñas.
- 📉Patrón: buscar similitudes o series que se repiten
- 🎨Abstracción: simplificar eliminando datos irrelevantes.
- 🏃Algoritmo: pasos ordenados necesarios para la solución del problema.
¿Cómo se aplica a un problema concreto?
- Analizar el problema o desafío.
- Tomar decisiones.
- La solución no es única.
Es la representación gráfica de un algoritmo o proceso. Nos permite establecer los pasos para realizar una tarea o proceso.
Se trata de los diferentes estilos de usar la programación para resolver un problema.
Se caracteriza por contar con una sucesión de instrucciones claramente definidas. El código fuente de los lenguajes imperativos encadena instrucciones una detrás de otra que determinan lo que debe hacer el ordenador en cada momento para alcanzar un resultado deseado. Los valores utilizados en las variables se modifican durante la ejecución del programa. Ver más
Tiene 3 enfoques principales:
El flujo de control se define mediante bucles anidados, condicionales y subrutinas.
Se basa en un número muy reducido de expresiones repetidas las cuales se engloban en procedimientos o funciones y se llaman según la necesidad de ejecución.
Se divide el programa en módulos o subprogramas, haciéndolo más legible y manejable. Es una evolución de la programación estructurada. Cada uno de los componentes de programa se diseñan, desarrollan y prueban con total independencia los unos de los otros.
En pocas palabras, programación declarativa consiste en decirle a un programa lo que tiene que hacer en lugar de decirle cómo debería hacerlo. Este enfoque implica proporcionar un lenguaje específico de dominio (DSL) para expresar lo que el usuario quiere. El DSL resguarda a los usuarios de construcciones de bajo nivel, al tiempo que materializa el estado final deseado. Ver más.
Gira en torno al qué, no al cómo: se trabaja de forma descriptiva, estableciendo relaciones entre entidades, lo que obliga a los que los lenguaje tengan un alto nivel de abstracción. Este paradigma se basa en la fórmula "algoritmos = lógica + control" (la llamada Ecuación Informal de Kowalski), lo que significa que un algoritmo se crea especificando conocimiento mediante axiomas (lógica) y el problema se resuelve mediante un mecanismo de inferencia que actúa sobre el mismo (control). Ver más.
La programación funcional se caracteriza por dividir la mayor cantidad posible de tareas en funciones, de esta forma estas tareas pueden ser usadas por otras funciones con diferentes objetivos. En este estilo de programación las funciones son ciudadanas de primera clase, porque sus expresiones pueden ser asignadas a variables como se haría con cualquier otro valor; además de que pueden crearse funciones de orden superior. Ver más
Se construyen modelos que representan objetos de forma similar a cómo lo haríamos en la vida real. Dichos objetos tienen características (atributos) y comportamientos (métodos). Permite separar y jerarquizar los componentes de un programa.
Se basa en observar cambios en el flujo de datos (según los eventos que ocurren) y reaccionar o tomar acciones de acuerdo al cambio recibido.
Deben ser:
- Responsivos
- Resilientes
- Elásticos
- Orientados a mensajes
Las variables son espacios de memoria en la computadora donde podemos almacenar distintos tipos de datos.
En JavaScript exiten tres formas de definir una variable:
- var: Es una forma poco usada actualmente. Las variables tiene un scope global y por tanto utilizar el mismo nombre para una variable definida con var hará que se pisen los valores entre sí. Se puede redefinir y modificar.
- let: Tiene un scope o alcance de bloque. Se puede modificar pero no redeclarar.
- const: Tiene un scope de bloque. No se puede modificar ni redeclarar.
Como buena práctica se recomienda:
- Usar camelCase para nombrar las variables.
- Usar MAYÚSCULAS con guiones bajos entre palabras para declarar constantes.
Los tipos de datos le permiten a JavaScript conocer las características y funcionalidades que estarán disponibles para ese dato.
- number
- string
- boolean
- undefined
- null
- NaN
- Object literal
- Array
Los operadores nos permiten manipular el valor de las variables, realizar operaciones y comparar sus valores. Los operadores aritméticos siempre devolverán el resultado numérico de la operación que se esté realizando. Los operadores de comparación siempre devolverán un booleano, es decir, true o false, como resultado.
Existen diferentes tipos de operadores en JavaScript, entre esos están:
- De asignación: (=)
- Aritméticos: (+,-,*,/,++,--,%)
- De concatenación (símbolo + usado entre strings)
- De comparación (>,>=,<,<=)
- De comparación simple (==, !=)
- De comparación estricta (===, !==)
- Lógicos (&&, ||)
Permiten combinar valores booleanos y retornan también un valor booleano
- AND (&&): todos los valores deben evaluar como
true
para que el resultado seatrue
. - OR (||): al menos un valor debe evaluar como
true
para que el resultado seatrue
. - NOT (!): niega la condición, si era
true
seráfalse
y viceversa.
Una función es un bloque de código que nos permite agrupar una funcionalidad para usarla todas las veces que necesitemos. Normalmente, realiza una tarea específica y retorna un valor como resultado.
Existen dos formas de declarar las funciones. Declarándolas y expresándolas. Ambos tipos son muy similares pero presentando diferencias con respecto al Hoisting. Los componentes de una función son:
- Palabra reservada (function)
- Nombre de la función
- Parámetros
- Cuerpo
- Retorno (con la palabra clave return)
Usan la estructura básica y pueden llevar un nombre luego de la palabra reservada function.
function saludar(nombre) {
return `Hola, ${nombre}`;
}
Se asignan como valor a una variable. No tienen nombre en sí, son funciones anónimas.
const = function(nombre) {
return `Hola, ${nombre}`;
}
Podemos imaginar las funciones como si fueran máquinas. Durante la declaración nos ocupamos de construir la máquina y durante la invocación la ponemos a funcionar.
A tener en cuenta:
- En caso que la función tenga parámetros, se deben pasar lo argumentos en el orden correcto.
- Es posible utilizar valores por defecto en caso de obviar algún parámetros.:point_down:
function saludar(nombre = 'visitante',
apellido = 'anónimo') {
return 'Hola ' + nombre + ' ' + apellido;
}
Llamamos parámetros a las variables que escribimos cuando definimos la función. Llamamos argumentos a los valores que enviamos cuando invocamos la función.
El scope o ámbito se refiere al alcance que tiene una variable, es decir, desde dónde podemos acceder a ella. En JavaScript los scopes son definidos principalmente por las funciones.
Las variables con scope global pueden ser accedidas desde cualquier parte del programa. Deben ser definidas fuera de función.
Las variables con scope local sólo son accedidas dentro del bloque de código o función donde fueron definidas.
Corresponden a una manera más resumida de escribir las típicas funciones. Vinieron con la versión ES6 de 2015. Algunas de sus particularidades son:
- No utilizan la palabra function. En su lugar utilizan el operador arrow (fat arrow).
- Debe ser guardadas como valores de variables
- Cuando tienen un único parámetro no es necesario encerrarlo en paréntesis.
- Si el cuerpo de la función se desarrolla en una sola línea se puedo obviar la palabra return.
- If
- Else/if
- Else
- If ternario
- Switch
Los ciclos nos permiten repetir instrucciones de manera sencilla. Podemos hacerlo una cantidad determinadas de veces o mientras se cumpla una condición.
Tiene tres partes. En el inicio, se define el valor inicial de nuestro contador. Luego en la condición se define el valor en el cual se debe detener la ejecución y por último, el modificador indica si el contador crece o decrece.
for (inicio; condición; modificador) {
//código que se ejecuta
}
Presenta una estructura similar al condicional if, usando una palabra reservada while y unos paréntesis que encierran una condición. El código dentro de las llaves se ejecutará hasta que la condición deje de cumplirse.
while (condición) {
//código que se ejecutará
//modificación de la condición
}
Similar al ciclo while pero siempre se ejecutará al menos una vez.
do {
//código que se ejecutará
//modificación de la condición
} while (condición)
Nos permiten generar una colección de datos ordenados.
Utilizamos corchetes [] para indicar el inicio y el fin de un array. Y usamos comas , para separar sus elementos. Dentro de un array, podemos almacenar la cantidad de elementos que queramos, sin importar el tipo de dato de cada uno. Es decir, podemos tener en un mismo array datos de tipo string, number, boolean y todos los demás.
Cada dato de un array ocupa una posición numerada conocida como índice. La primera posición de un array es siempre 0. Para acceder a un elemento puntual de un array, nombramos al array y, dentro de los corchetes, escribimos el índice al cual queremos acceder.
Otra propiedad útil de los arrays es su longitud, o cantidad de elementos. Podemos saber el número de elementos usando la propiedad length. Para acceder al total de elementos de un array, nombramos al array y, seguido de un punto, escribiremos la palabra length.
Un objeto es una estructura de datos que puede contener propiedades y métodos. Para crearlo usamos llave de apertura y de cierre {}.
let auto = {
patente : 'AC 134 DD',
};
Un objeto puede tener la cantidad de propiedades que queramos. Si hay más de una, las separamos con comas ,. Con la notación objeto.propiedad accedemos al valor de cada una de ellas.
Una propiedad puede almacenar cualquier tipo de dato. Si una propiedad almacena una función, diremos que es un método del objeto. Con una estructura similar a la de las funciones expresadas, vemos que se crean mediante el nombre del método, seguido de una función anónima. Para ejecutar un método de un objeto usamos la notación objeto.metodo(). Los paréntesis del final son los que hacen que el método se ejecute.
La palabra reservada this hace referencia al objeto en sí donde estamos parados. Es decir, el objeto en sí donde escribimos la palabra. Con la notación this.propiedad accedemos al valor de cada propiedad interna de ese objeto.
let tenista = {
nombre: 'Roger',
apellido: 'Federer',
saludar: function() {
return '¡Hola! Me llamo ' + this.nombre;
}
};
console.log(tenista.saludar()); // ¡Hola! Me llamo Roger