Web Dev (Frontend)
¿Qué es la programación?
La programación es una de las maneras de comunicarnos con las computadoras y otros dispositivos electrónicos para decirles cómo deben comportarse.
Lo hacemos por medio de palabras y frases que tienen un propósito predefinido. Con ellas podemos crear instrucciones y manipular dispositivos o programas.
Cada lenguaje de programación define los aspectos que puede manipular de un sistema y las palabras que deben de usarse para dicho propósito, a esto le llamamos sintaxis.
Existe una gran cantidad de lenguajes que podemos usar para controlar lo que hace una computadora.
¿Qué es sintaxis?
En programación utilizamos código para decirle a los dispositivos qué tareas realizar.
Cada lenguaje de programación tiene un conjunto de reglas que dicta la validez de las instrucciones.
Dicho de otra manera, cada lenguaje decide qué palabras tienen qué significado y en qué orden deben ir para ser interpretadas correctamente por el dispositivo. A esto se le denomina sintaxis.
Analogía
En los lenguajes naturales, como el inglés o el español, tenemos estructuras de palabras con cierto significado como: saludos, preguntas, afirmaciones, etc.
En lenguajes de programación tenemos estructuras que definen comportamientos como: declaración de variables, ciclos, condicionales, etc.
Prácticamente aprender programación es como aprender idiomas, sólo que en lugar de usarlo para hablar con otras personas, lo usamos para hablar con dispositivos electrónicos, usualmente computadoras y celulares.
Al aprender un lenguaje es una buena idea enfocamos en las estructuras de palabras que podemos usar y el propósito de cada una de ellas.
Sobre el dominio de la sintaxis
Para dominar un lenguaje de programación, debemos saber usar las diferentes estructuras de código para crear los comportamientos que deseamos en un programa.
Una vez que dominemos alguno de ellos, aprender otro lenguaje no resulta tan complicado, ya que la mayoría comparten estructuras similares, sólo cambian las palabras usadas para crear los mismos comportamientos.
Por ejemplo, el siguiente código nos sirve para crear una función que imprime un mensaje a la consola en JavaScript:
function myFun() { console.log("Hello");}Y así se ve la misma función pero para Python:
def myFunc(): print("Hello")Como podemos ver, el patrón de la estructura de código es fácil de identificar incluso si hay algunas diferencias.
El código sólo es texto
De manera simplificada, el código sólo es texto que es interpretado por algún programa específico. Ese programa sabe qué hacer con la estructura del texto que le damos y le da vida a las aplicaciones que conocemos.
En el desarrollo web (por lo menos en el frontend), el programa que interpreta nuestros archivos es el navegador.
Los archivos que maneja son HTML, CSS y JavaScript, que usan las extensiones .html, .css y .js, respectivamente.
Para crear estos archivos podemos usar cualquier editor de texto que nos permita guardarlos con las extensiones necesarias.
Aunque utilizar una herramienta dedicada para crear código puede darnos algunas ventajas.
¿En dónde se usa la programación?
Áreas de trabajo
Existe una gran cantidad de áreas donde se puede utilizar la programación, algunas de ellas son:
Desarrollo Web
Es el diseño y construcción de sitios y aplicaciones web. Cubre todo, desde diseños de páginas simples hasta software complejo para empresas, con un enfoque en la arquitectura web, la interfaz de usuario y la experiencia del usuario.
Desarrollo de Juegos
El arte de crear experiencias de entretenimiento interactivo, que van desde juegos independientes hasta títulos AAA, involucrando la mecánica de juego, la narración de historias y el diseño de la interfaz de usuario.
Ciencias de la Computación
Es el estudio de las computadoras y los procesos algorítmicos, incluidos sus principios, sus diseños de hardware y software, sus aplicaciones y su impacto en la sociedad.
Ciencia de Datos
El campo que combina la experiencia en un dominio específico, habilidades de programación y conocimiento de matemáticas y estadísticas para extraer conocimientos significativos de los datos. Involucra análisis de datos, aprendizaje automático y modelado predictivo.
Aprendizaje Automático e IA
Desarrollo de algoritmos que pueden aprender y hacer predicciones sobre datos.
Computación Científica
Uso de capacidades de computación avanzadas para resolver problemas científicos complejos.
Finanzas y Comercio
Escritura de algoritmos para comercio automatizado o gestión de datos financieros.
Ciberseguridad
Protección de sistemas, redes y programas contra ataques digitales.
Robótica
Programación de robots para realizar diversas tareas.
Diseño Gráfico y Animación
Programación para diseño visual y gráficos en movimiento.
Bioinformática
Aplicación de herramientas y técnicas de informática para capturar e interpretar datos biológicos.
Procesamiento de Lenguaje Natural (PLN)
Permitir que las computadoras entiendan e interpreten el lenguaje humano.
Desarrollo de Herramientas
Creación de herramientas de software que ayudan en el desarrollo de software u otras tareas informáticas. Esto podría incluir compiladores, editores de texto, depuradores o cualquier software que facilite la realización de una tarea.
IoT (Internet de las Cosas)
Desarrollo de dispositivos interconectados que pueden recopilar e intercambiar datos. Involucra la programación para sensores, dispositivos portátiles, electrodomésticos inteligentes y otros dispositivos que contribuyen a ecosistemas inteligentes.
Mods de Juegos
Modificación de software de juegos para alterar cómo se juegan o se experimentan los juegos. Esto puede incluir cambios en niveles, personajes, objetos y también puede introducir nuevas mecánicas de juego o historias.
Música
La programación se puede utilizar para crear herramientas de producción de música digital, sintetizadores, algoritmos para componer música o incluso IA que puede realizar análisis o composición musical.
Desarrollo de Aplicaciones Móviles
Creación de aplicaciones para dispositivos móviles.
Sistemas Embebidos
Escritura de software para dispositivos que no se consideran tradicionalmente computadoras, como electrodomésticos, automóviles y cámaras.
Diseño de Experiencia de Usuario (UX)
Creación de software con un enfoque en la experiencia del usuario final.
Blockchain y Criptomoneda
Desarrollo de libros de contabilidad digitales descentralizados y monedas digitales.
Realidad Aumentada (AR) y Realidad Virtual (VR)
Creación de experiencias inmersivas para entretenimiento, educación y más.
Informática de la Salud
Desarrollo de sistemas para gestionar la información sanitaria.
Software Educativo
Desarrollo de plataformas de aprendizaje interactivo y herramientas educativas.
Redes Sociales y Comunicación
Creación de plataformas para la comunicación y el intercambio de contenido.
E-commerce
Desarrollo de mercados en línea y sitios web de venta al por menor.
Computación en la Nube
Construcción de servicios y aplicaciones que se ejecutan en servidores remotos y se acceden a través de internet.
Tecnología de Hogar Inteligente
Programación de dispositivos que automatizan tareas y aumentan la eficiencia de los entornos domésticos.
Drones y Tecnología Aérea
Desarrollo de software para vehículos aéreos no tripulados (UAV) para diversas aplicaciones.
Si alguna de estas áreas te llama la atención, no dudes en buscar más información al respecto.
¿Qué es Web Dev?
La expresión web dev viene del inglés web developer, que significa desarrollador web.
Un desarrollador web es una persona que crea sitios y aplicaciones mediante tecnologías creadas para navegar en internet.
Se divide principalmente en dos áreas:
- Frontend: Se encarga de lo que es visible para los usuarios. Como páginas, menús, botones, etc.
- Backend: Se encarga de la lógica de comunicación entre sistemas. Como bases de datos y otros servicios.
A la combinación de ambas áreas se le denomina Fullstack.
¿Cómo funciona la web?
Internet es una inmensa red de dispositivos que se comunican entre sí.
Dependiendo de su naturaleza pueden ser:
- Servidores
- Clientes
A los dispositivos se encargan de guardar y manejar la información que encontramos en sitios y aplicaciones web, en términos técnicos, los llamamos servidores.
Para acceder a dicha información podemos utilizar un navegador web. Este programa nos ayuda a pedir datos y archivos dentro la red, en términos técnicos, lo llamamos cliente.
Cuando visitamos un sitio web, el navegador envía un mensaje para conseguir archivos de un dispositivo específico dentro de esta red.
Una vez que el mensaje llega al destino, el servidor se encarga de mandar los datos y archivos correspondientes a nuestro navegador.
Y el navegador convierte esos archivos para mostrarlos de la manera a la que estamos acostumbrados.
A la parte del desarrollo web que está orientada a manejar lo que sucede en el cliente se le llama frontend.
A la parte que maneja lo que sucede en el servidor se le llama backend.
Cuando combinamos ambas prácticas se le denomina fullstack.
¿Qué es Frontend?
Frontend es el término que usamos para referirnos a la parte del desarrollo web que se encarga de la interfaz con la que interactúa el usuario.
En palabras simples: cómo se ve y cómo se siente una aplicación o sitio web.
Algunos de los recursos con los que trabajamos en esta rama son:
- HTML: Es un lenguaje que nos ayuda a crear y estructurar el contenido de la web.
- CSS: Es un lenguaje que nos deja a estilizar y diseñar dicho contenido.
- JavaScript: Es un lenguaje que nos permite añadir interactividad y comportamiento dinámico.
- Frameworks y bibliotecas: Son herramientas que facilitan el desarrollo del frontend.
- Diseño responsivo: Es un enfoque que asegura que la web se vea y funcione bien en diferentes dispositivos y tamaños de pantalla.
¿Qué necesitamos para aprender Frontend?
Aprender frontend es de las ramas de programación más amigables para principiantes por varias razones. Una de ellas es que no se necesitan programas muy pesados.
De hecho también se puede aprender y practicar sin necesidad de instalar nada en tu dispositivo.
Aquí vamos a ver algunas alternativas para aprender frontend:
Alternativa local
Le llamamos local porque vamos necesitar una computadora obligatoriamente, ya que vamos a estar creando y modificando archivos en nuestro dispositivo.
Para ello vamos a utilizar un editor de código: Usualmente VS Code, aunque hay más alternativas.
También vamos a utilizar diferentes herramientas para publicar nuestro trabajo en la web.
Ventajas
- El flujo de trabajo es más parecido al de un entorno profesional.
- Aprendemos lo que hace cada una de las herramientas y cómo utilizarlas de manera eficiente.
Desventajas
- Todo es más manual, por lo que nos va a llevar tiempo crear un entorno de trabajo.
- Publicar nuestros proyectos puede requerir más tiempo y esfuerzo.
Alternativa remota
Le llamamos remota porque las herramientas que vamos a utilizar forman parte de servicios en plataformas online.
Necesitamos un dispositivo que cuente con navegador de internet. Hoy en día casi cualquier dispositivo inteligente puede acceder a los sitios que vamos a utilizar para crear nuestros proyectos.
La experiencia puede variar dependiendo de tu dispositivo, por lo que es importante probar varias opciones antes de decidir cuál utilizar.
Algunas de las plataformas que podemos utilizar son:
Ventajas
- Podremos trabajar en proyectos que serán almacenados en la nube de manera automática, lo que nos permitirá cambiar alternar entre dispositivos sin problemas.
- Usualmente los proyectos ya estarán alojados en un enlace que puede ser visitado por todo el mundo. (Crear proyectos privados dependerá de la plataforma).
Desventajas
- Algunas plataformas empiezan a cobrar a partir de cierto número de proyectos.
- Algunas funcionalidades avanzadas no están disponibles en editores online.
- Si usamos un dispositivo móvil, la velocidad con la que podemos escribir código puede verse reducida.
A lo largo de este contenido usaremos la alternativa local. Si estás usando la alternativa remota y tienes problemas, puedes dejar un comentario en el artículo correspondiente.
Consigamos VS Code
🎬 Video
¿Dónde conseguirlo?
Vamos a dirigirnos al sitio oficial de Visual Studio Code
En la página principal encontraremos un botón para descargarlo.
Usualmente bajará la versión correcta para el sistema operativo que estemos usando (Windows, MacOs o Linux), pero también podemos escoger un instalador particular o versiones anteriores del programa si damos clic en la lista.
Instalación
La instalación es como cualquier otro programa.
Opciones de Windows
En Windows, uno de los últimos pasos del instalador se ve de esta manera:
Podemos marcar las dos casillas que dicen Add “Open with Code” para que nos aparezca este programa en el menú de clic derecho en el Explorador de Archivos.
Paseo por la interfaz
🎬 Video
Al iniciar
Cuando abrimos el programa por primera vez se ve de la siguiente manera:
Tiene una serie de guías que nos ayudan a aprender a usar y modificar el editor. Si quieres saltar este paso puedes dar clic en las palabras Mark Done (_Marcar como hecho).
Lo usual
Cuando abrimos el programa el resto de las veces podemos ver una pantalla como esta:
Si no queremos que se abra la pestaña de bienvenida por defecto, podemos desmarcar la casilla en la parte inferior.
Sobre las diferentes secciones
Barra de menús
En la parte superior tenemos la barra de menús.
Barra lateral
Del lado izquierdo tenemos la barra lateral o sidebar, aquí encontraremos diferentes botones que nos ayudarán a abrir paneles, cada uno con una tarea diferente.
De arriba hacia abajo, el primero es el explorador de archivos. Similar al que utiliza nuestro sistema operativo, pero podemos abrir, crear y modificar archivos directamente desde aquí.
El segundo es el panel de búsqueda. Nos ayuda a encontrar los diferentes archivos que coincidan con algún patrón de texto
El tercero es el control de código fuente, nos ayuda a gestionar el historial de archivos creado por el control de versiones (usualmente Git).
El siguiente es el panel de ejecución y depuración, nos ayuda a ejecutar algunos archivos y poder encontrar errores y comportamientos no deseados en algunos lenguajes
El último de esta sección es el panel de extensiones, nos ayuda a agregar funcionalidades a nuestro editor.
En la parte inferior de la misma barra podemos encontrar el menú de cuentas, nos sirve para iniciar sesión y poder guardar y sincronizar nuestros ajustes en otros dispositivos.
Y también el menú de gestión, donde podemos encontrar diferentes opciones para configurar el editor.
Sección principal
El resto de la interfaz es donde podremos ver los diferentes archivos que usemos en nuestros proyectos, se abrirán en forma de pestañas, como en un navegador. Podemos tener múltiples pestañas abiertas e incluso tenerlas lado a lado, o unas encima de otras.
Cambio de idioma
🎬 Video
Para cambiar el idioma debemos dirigirnos a la barra lateral y dar clic en el menú extensiones.
Se abrirá un nuevo panel, dentro de la barra de búsqueda debemos escribir spanish.
Usualmente la primera opción (Spanish Language Pack for VS Code) es la correcta, así que podemos dar clic en install (instalar).
Una vez instalado, en la parte inferior derecha nos aparecerá un mensaje para reiniciar el editor. Debemos dar clic en el botón azul.
Al reiniciar el programa, lo encontraremos en el nuevo idioma.
Para volver a cambiar el idioma podemos ir al menú Ver (View) > Paleta de comandos (Command Palette)
Escribir idioma (language) y seleccionar Configurar idioma de pantalla (Configure Display Language)
Aparecerá una lista de los lenguajes instalados y los lenguajes disponibles
Podemos seleccionar uno instalado o uno diferente para instalar la extensión correspondiente.
Sobre Live Server
Live Server es una extensión de VS Code que nos ayuda a ver nuestro sitio web sin tener que recargar el navegador cada que hagamos cambios. De esta manera podemos desarrollar a la par con lo que estamos viendo.
Instalación
Para instalarla, nos dirigimos a la barra lateral > extensiones y buscamos live server.
¿Cómo usar?
Para iniciar el servidor
Hay dos formas de ejecutar la extensión.
Una de ellas es estar en un archivo .html y dar clic derecho.
En el menú deberá aparecer Open with Live Server.
La otra opción es dar clic en la barra inferior, en el botón Go Live.
Cómo funciona
Una vez que iniciamos el servidor, se abrirá nuestro navegador en la dirección que por defecto nos da la extensión: http://127.0.0.1:5500
Ahora podemos cambiar el código y al guardar el archivo, los cambios se verán reflejados automáticamente en el navegador.
Para que la extensión funcione correctamente debemos tener por lo menos la etiqueta <body> dentro de nuestro archivo. Si no, nos aparecerá una advertencia.
Para detener el servidor
Para detener el servidor se hace de manera similar.
Podemos dar clic derecho y seleccionar Stop Live Server.
O podemos ir a la barra inferior y utilizar el botón que indica el puerto en el que está corriendo el servidor, usualmente Port: 5500.
Sobre Prettier
Prettier1 es una herramienta que nos ayuda a mantener el formato de nuestro código de manera consistente. Funciona en diferentes editores de código y para diferentes lenguajes.
En HTML nos ayuda a mantener una legibilidad más adecuada por medio de los saltos de línea y la indentación.
En CSS nos ayuda a espaciar correctamente los selectores y las reglas.
En JS nos ayuda a autocompletar el punto y coma, además de mantener los espacios consistentes.
Instalación
Podemos instalarla en VS Code como una extensión. Para ello podemos ir a la barra lateral > extensiones y buscar prettier.
Configuración
Cómo activarla
Vamos a las opciones de nuestro editor (podemos usar el atajo ctrl/cmd + ,), y buscamos formatter (formateador).
En la lista Default formatter vamos a seleccionar Prettier.
Cómo formatear automáticamente al guardar
Para un mejor flujo de trabajo, podemos hacer que este formateador funcione al momento de guardar nuestros archivos.
En la misma búsqueda de ajustes podemos encontrar la opción Format On Save (formatear al guardar), y la activamos.
Ahora cada que guardemos algún archivo de código que esté soportado por esta herramienta, cambiará el formato de manera automática.
Se puede configurar para seguir diferentes reglas de formato, aunque las reglas por defecto son suficiente para los principiantes.
Notas
Construyendo casas virtuales
Existe una analogía muy popular para explicar cómo funcionan las tres tecnologías básicas de la web:
Imaginemos que estamos construyendo una casa, sólo que en lugar de ser una casa en el mundo físico, lo haremos en el mundo digital.
Para hacerlo, utilizamos tres herramientas especiales llamadas HTML, CSS y JavaScript.
Cada una tiene un trabajo único que nos ayuda en la construcción de esta casa.
HTML: Los ladrillos
HTML es como los ladrillos de nuestra casa. Lo usamos para construir las partes de nuestra página web, como los párrafos de texto, las imágenes que vemos y los botones en donde hacemos clic.
Analogía
Es como decir, “aquí va una ventana, aquí una puerta”, etc.
CSS: La pintura y decoración
Una vez que tenemos los ladrillos (HTML), usamos CSS para hacer que nuestra casa se vea bonita. CSS es como la pintura y la decoración de nuestra casa en la web. Nos permite elegir colores, hacer que el texto sea más grande o más pequeño, y poner todo en el lugar correcto.
Analogía
Es como decidir de qué color pintar las paredes y dónde poner los muebles y la decoración.
JavaScript: La magia que hace que las cosas se muevan
JavaScript es como la magia que hace que las cosas en nuestra casa funcionen. Si queremos que algo se abra cuando hacemos clic, o que aparezca un mensaje, usamos JavaScript.
Analogía
Es como tener un interruptor que enciende las luces o un una llave que nos da agua cuando la abrimos.
Aprendamos HTML
Introducción
Son las siglas para HyperText Markup Language, o Lenguaje de Marcas de HiperTexto.
Es un lenguaje que nos sirve para crear el contenido y la estructura de una página web.
Anatomía de código HTML
Para poder utilizarlo, debemos aprender algunos conceptos.
Etiquetas y Elementos
El lenguaje está compuesto por segmentos de código a los cuales llamamos etiquetas. Una etiqueta sigue esta estructura:
<nombre>Es decir: signo <, nombre de la etiqueta, seguido del signo >.
Los nombres ya están predefinidos, y cada uno de ellos nos ayuda con tareas específicas, como mostrar texto, imágenes, videos, tablas, etc.1
Por ejemplo:
<body></body>… que nos ayuda a crear el cuerpo de la página.
La mayoría de las etiquetas deben venir en pares, donde a la primera la llamamos etiqueta de apertura y la segunda la llamamos etiqueta de cierre.
La etiqueta de cierre necesita una diagonal antes del nombre.
En medio de las dos podemos insertar contenido, por ejemplo; texto, más etiquetas, o una combinación de ambos.
<body> Contenido</body>A esta estructura le llamamos Elemento HTML.
Elementos vacíos
Existen Elementos que sólo necesitan la etiqueta de apertura, es decir, no pueden tener contenido. A este tipo de elementos se les considera elementos vacíos o de autocierre.
<br >Usualmente se le pone una diagonal después del nombre para hacer explícito que no puede tener contenido, pero deberían funcionar con o sin ella.
<br />Atributos
En la etiqueta de apertura de algunos elementos podemos encontrar segmentos de código a los que llamamos atributos. Nos ayudan a definir ciertos comportamientos de las etiquetas:2
<div style="color:blue;">Texto</div>En este caso estamos cambiando el aspecto del texto mostrado.
La estructura de los atributos es nombre="valor". En el ejemplo anterior style es el atributo definido y color:blue; es el valor.
Atributos globales
Existen atributos que pueden ser usados en todas las etiquetas, algunos ejemplos son: style, class y id. A estos los llamamos atributos globales.
Atributos particulares
También existen atributos que sólo se pueden usar en ciertas etiquetas, por ejemplo:
<a href="https://www.google.com/" target="_blank">Ir a Google</a>Esta etiqueta nos ayuda a agregar links o enlaces. En este caso tenemos una etiqueta con dos atributos: href y target, el primero le indica a dónde redirigirnos cuando le damos clic.
El segundo le indica que dicho enlace debe abrirse en una nueva pestaña.
Algunas etiquetas necesitan de ciertos atributos para funcionar correctamente. En el ejemplo anterior, href es uno de ellos, ya que si no hay enlace, la etiqueta sólo mostrará texto y no podrá redirigirnos a ningún lado.
Otro ejemplo es:
<img src="https://placebear.com/200/300" /><img> la etiqueta que nos ayuda a mostrar imágenes, donde src es similar a href. Siendo que le indica de dónde conseguir la imagen a mostrar.
Estructura básica de un documento HTML
Al usar un editor de código como VS Code, tenemos acceso a algunos atajos para generar código base para algunos proyectos. Si creamos un archivo HTML y utilizamos el autocompletado ! obtendremos el siguiente código:
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body></body></html><!DOCTYPE html> Indica que el tipo de documento será de tipo html. Con este código está implícito que usaremos la última versión del lenguaje.
Existen otros tipos de documento y versiones de HTML que podemos usar, pero para hacer proyectos web con las características más recientes del lenguaje podemos dejar la línea generada.
El segundo elemento es <html>, debemos incluir el resto de etiquetas para generar una página. Por defecto incluye el atributo lang="es", que le indica que el contenido será Aquí tenemos que insertar dos elementos más.
<head> es donde van las etiquetas con información importante para el navegador.
<body> es donde va el contenido que verá el usuario.
<meta charset="UTF-8" /> indica que usaremos uno de los sistemas de codificación de caracteres más usados en la web. Esto nos ayuda a evitar conflictos de visualización y compatibilidad con usuarios que visitan nuestra página desde otros países o utilizan otro lenguaje en su navegador.
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> nos ayuda a hacer que la pantalla se adapte a diferentes tamaños de dispositivos móviles para que el contenido no aparezca demasiado pequeño ni demasiado grande.
<title> nos ayuda a darle un nombre a la pestaña, lo cual también sirve cuando agregamos la página a marcadores.
Notas
-
Lista de Elementos HTML.
-
Lista de Atributos
Etiquetas básicas de contenido
Cuando recién comenzamos a aprender HTML, las etiquetas que más nos van a servir, además de las etiquetas para la estructura básica de un documento1, son las siguientes.
Comentario
Nos ayuda a evitar que algunas líneas de texto sean interpretadas como código, de esta manera podemos dejar mensajes o recordatorios para nosotros mismos u otros desarrolladores.
<!-- Esto es un comentario --><!-- Esto no se mostrará al usuario en la página web -->Títulos o encabezados
Las etiquetas heading, por título o encabezado. Van de <h1> a <h6>.
Nos ayudan a dividir los temas y subtemas de nuestra página. Son como títulos y subtítulos en un libro de texto.
<h1>Título 1</h1><h2>Título 2</h2><h3>Título 3</h3><h4>Título 4</h4><h5>Título 5</h5><h6>Título 6</h6>Párrafo
La etiqueta <p>, por paragraph (párrafo) nos ayuda a agregar bloques de texto.
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p><p> Maiores perspiciatis accusantium dolorum deleniti ducimus modi eum. Assumenda, itaque?</p><p> Dolorem pariatur repellat explicabo consectetur id itaque architecto corrupti velit fuga recusandae!</p>Lista desordenada
la etiqueta <ul>, por unordered list o lista desordenada, nos ayuda a mostrar elementos usando viñetas.
<ul> <li>Elemento A</li> <li>Elemento B</li> <li>Elemento C</li></ul>Elemento de lista
Para poder usar las listas correctamente se debe usar el elemento <li>, por list item o elemento de lista, por cada artículo que queramos agregar a la lista.
Lista ordenada
la etiqueta <ol>, por ordered list o lista ordenada, nos ayuda a mostrar elementos de forma numerada. También hace uso de los elementos <li>.
<ol> <li>Elemento A</li> <li>Elemento B</li> <li>Elemento C</li></ol>Salto de línea
La etiqueta <br>, por line break o salto de línea, nos ayuda a crear un espacio entre bloques de contenido.
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p><br /><p> Dolorem pariatur repellat explicabo consectetur id itaque architecto corrupti velit fuga recusandae!</p>Regla horizontal
La etiqueta <hr>, por horizontal rule o regla horizontal, nos ayuda a crear una línea de separación en el contenido.
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p><hr /><p> Dolorem pariatur repellat explicabo consectetur id itaque architecto corrupti velit fuga recusandae!</p>Ancla (enlace)
La etiqueta <a>, por anchor o ancla, nos ayuda a crear enlaces a otras páginas y secciones. Necesita el atributo href donde el valor es el link a donde queremos que nos lleve.
Este es el ejemplo más básico:
<a href="https://iniz.lol">Ir a mis redes sociales</a>Opcionalmente podemos agregar target="_blank" para hacer que el enlace se abra en una nueva pestaña.
<a href="https://iniz.lol" target="_blank">Ir a mis redes sociales</a>Imagen
La etiqueta <img>, por image o imagen, nos ayuda a mostrar imágenes en el documento. Necesita el atributo src donde el valor debe ser la dirección donde se encuentra alojado el archivo. Opcionalmente se puede poner el atributo alt donde el valor debe ser una descripción de la imagen. Nos ayuda cuando la imagen no carga y para los usuarios con lector de pantalla activado.
<img src="https://placebear.com/200/300" alt="Foto de dos osos" />División
La etiqueta <div>, por division o división, nos ayuda a crear separaciones en el contenido, usualmente para agregar estilos a bloques de contenido que están relacionados visualmente.
<div style="color: orange"> <h1>Título</h1> <p>Contenido</p> <p>Contenido</p></div>Abarcar
La etiqueta <span> o abarcar es similar a div. Sólo que nos ayuda a agrupar frases o palabras en un renglón para hacer separaciones, en lugar de hacerlo por bloques.
<p>Contenido <span style="color: pink">con estilo</span></p>Notas
Ejercicio - Hagamos un periódico
La apariencia por defecto del HTML no es muy estética, se parece más a lo que veríamos en un periódico local. Donde la estructura sólo son encabezados, párrafos y algunas imágenes. Usaremos esto a nuestro favor para crear nuestro propio periódico.
Repasemos lo que aprendimos
Recordemos que las etiquetas que vimos hasta ahora son:
- Comentario
<!-- --> - Títulos o encabezados
<h1>-<h6> - Párrafo
<p> - Lista ordenada
<ol> - Lista desordenada
<ul> - Elemento de lista
<li> - Salto de línea
<br> - Regla horizontal
<hr> - Ancla (enlace)
<a> - Imagen
<img> - División
<div> - Abarcar
<span>
Estas no son las únicas etiquetas existentes, si sabes usar otras que no estén en esta lista puedes agregarlas a tu proyecto. Más adelante aprenderemos sobre otras etiquetas útiles.
Evita poner información sensible si es que piensas publicar tu proyecto en línea.
No olvides que…
Puedes checar el siguiente ejemplo para darte una idea:
Aquí hay una versión más pequeña del mismo ejemplo:
Aprendamos CSS
Cuando creamos código HTML, el navegador se encarga de darle una apariencia por defecto, la cual no es muy llamativa.
Para cambiar esto, el lenguaje CSS nos ayuda a darle estilo a los diferentes elementos que componen nuestro sitio web.
CSS viene del inglés Cascading Style Sheets u Hojas de Estilo en Cascada.
Una de las formas de agregar estilos a nuestros elementos HTML es desde la etiqueta de apertura, utilizando el atributo style. Dentro podemos escribir una o más reglas de CSS.
<p style="color:pink;">Contenido</p>Anatomía de reglas CSS
Las reglas están compuestas por una propiedad y un valor, entre ellos deben existir el símbolo dos puntos (:), y al final debe ir el símbolo punto y coma (;).
propiedad: valor;En el ejemplo inicial tenemos un estilo con una sola propiedad:
color, que tiene el valorpink.
Aunque en realidad podemos usar varias propiedades dentro style, por ejemplo:
<p style="color:pink;font-size:32px;">Contenido</p>Esta vez agregamos dos propiedades, cada una con su propio valor.
Sobre los valores
Los valores que podemos usar dependen de cada propiedad1.
Por ejemplo:color, acepta diferentes formatos de color:
- Colores nombrados (como
pink) - Colores hexadecimales (como
#ffc0cb) - Colores RGB (como
rgb(255, 192, 203)) - Entre otros
color: pink;color: #ffc0cb;color: rgb(255, 192, 203);Otro ejemplo sería font-size, que acepta diferentes formatos de tamaños o medidas:
- Tamaños en pixels (como
32px) - Tamaños en medidas relativas (como
2rem) - Tamaños en medidas de fuente (como
large) - Entre otros
font-size: 32px;font-size: 2rem;font-size: large;Existe una gran cantidad de propiedades2. Dependiendo del sitio donde consultes el número puede variar pero son cientos de ellas.
Notas
Propiedades básicas CSS
Existe una gran variedad de propiedades que pueden ser usadas para cambiar el aspecto de los elementos de nuestra página. Aquí hay una pequeña lista de las más sencillas de utilizar y que provocan grandes cambios:
color
Cambia el color del texto del elemento:
<p style="color:red;">Texto</p>Acepta valores de tipo <color>1.
background-color
Cambia el color de fondo del elemento:
<p style="background-color:royalblue;">Texto</p>Acepta valores de tipo <color>1.
font-family
Cambia la familia de fuente/tipografía:
<p style="font-family:monospace;">Texto</p>Acepta valores de tipo <string>2, eso quiere decir que podemos usar cualquier texto, aunque los valores siempre deben pertenecer a una familia de fuente.
Podemos probar con algunos valores genéricos:
serifsans-serifmonospacecursive
En otro artículo aprenderemos a usar fuentes personalizadas
font-size
Cambia el tamaño de la letra:
<p style="font-size: 32px;">Texto</p>Acepta valores de diferentes tipos, algunos de ellos son <absolute-size>3 y <length>4.
Podemos probar con algunos valores de tipo <absolute-size> como:
xx-small(extra extra chico)x-small(extra chico)small(chico)medium(mediano)large(grande)x-large(extra grande)xx-large(extra extra grande)
Y algunos de tipo <length> como:
px(pixeles)cm(centímetros)mm(milímetros)in(pulgadas)%(porcentajes)- Entre otros
text-align
Cambia la alineación de texto:
<p style="text-align:center;">Texto</p>Los valores más comunes son:
left(izquierda) es el valor por defectoright(derecha)center(centrado)justify(justificado)
border
Cambia el borde del elemento:
<p style="border:1px solid black;">Texto</p>Está dividido en tres partes:
border-width: indica el ancho del bordeborder-style: indica el estilo del bordeborder-color: indica el color del borde
En el ejemplo anterior, el borde tiene un ancho de 1px, un estilo solid (sólido) y un color con valor black (negro).
Para el ancho podemos usar valores de medidas34.
Para el estilo del borde podemos usar:
solid(sólido)dashed(discontinuo)dotted(punteado)double(doble)groove(acanalado)ridge(cuadrado)inset(insertado)outset(insertado)
Y para el color podemos usar valores de color1.
En otro artículo aprenderemos las formas de usar los valores de esta propiedad
margin
Cambia el espacio entre el elemento actual y los elementos consecuentes:
<p style="margin:12px;border:1px solid black;">Texto</p><p>Texto</p>En este ejemplo agregamos el borde para hacer más evidente el espacio entre los elementos.
Podemos usar valores de medidas3.
En otro artículo aprenderemos las formas de usar los valores de esta propiedad
padding
Cambia el espacio entre el contenido del elemento y el borde:
<p style="padding:12px;border:1px solid black;">Texto</p><p>Texto</p>Podemos usar valores de medidas34.
En otro artículo aprenderemos las formas de usar los valores de esta propiedad
width
Cambia el ancho del elemento:
<p style="width:50%;border:1px solid black;">Texto</p><p style="border:1px solid black">Texto</p>Podemos usar valores de medidas34.
height
Cambia la altura del elemento:
<p style="height:40px;border:1px solid black;">Texto</p><p style="border:1px solid black">Texto</p>Podemos usar valores de medidas34.
Con estas reglas podemos comenzar a crear algunos cambios interesantes en nuestros proyectos.
Notas
Colores nombrados
En CSS, cuando utilizamos una propiedad como background-color podemos colocar valores del tipo <color>1.
Existen diferentes alternativas, algunas de ellas son:
- por palabras reservadas o nombres
- por notación hexadecimal2
- por notaciones de espacio de color
El concepto colores nombrados hace referencia a los colores que están asociados con palabras en lugar de códigos o funciones. Existen alrededor de 150 palabras que hacen referencia a colores3:
Puedes dar clic en cualquier elemento para copiar el color en tu portapapeles.
Algunas de ellas son sinónimos, es decir, son el mismo color pero escrito de diferente manera:
- Aqua / Cyan
- Fuchsia / Magenta
- DarkGray / DarkGrey
- DarkSlateGray / DarkSlateGrey
- DimGray / DimGrey
- LightGray / LightGrey
- LightSlateGray / LightSlateGrey
- Gray / Grey
- SlateGray / SlateGrey
Además de estas palabras, también podemos encontrar transparent para crear transparencia y currentColor que nos ayuda a heredar el color de elementos superiores en la jerarquía de elementos.
Los nombres no son sensibles a mayúsculas y minúsculas. Por lo que podemos
escribir DarkGray, DARKGRAY o darkgray y funcionará de la misma manera.
Notas
Formatos de color más comunes
En CSS existen diferentes formas de especificar un color. Las más comunes son:
- Colores nombrados
- Hexadecimal
- RGB
- RGBA
- HSL
- HSLA
Colores nombrados
Los colores nombrados son valores predefinidos que utilizan nombres de colores en inglés, como red, blue, green, etc.
Usualmente esta es la primera forma en la que aprendemos a utilizar valores de tipo <color> ya que se encuentran en la lista de autocompletado de VS Code. Podemos encontrar la lista completa aquí: Colores nombrados.
Hexadecimal
Es un formato que utiliza valores del sistema hexadecimal para especificar colores.
El sistema hexadecimal utiliza 16 símbolos para contar: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f. Donde el valor mínimo es 0 y el máximo es f.
Los colores que usan 6 valores o tres pares de valores son los más comunes:
#RRGGBB- El primer par de valores indica la cantidad de rojo (Red)
- El segundo par de valores indica la cantidad de verde (Green)
- El tercer par de valores indica la cantidad de azul (Blue)
Por ejemplo:
#ff0000Sería un color completamente rojo:
También podemos encontrarlo en formato de 8 valores o 4 pares, donde el último par indica la opacidad del color:
#RRGGBBAADonde A es el valor Alpha o la opacidad.
Por ejemplo:
#ff000080Sería un color completamente rojo con una opacidad hexadecimal de 80 que es equivalente a 50%.
Y también podemos encontrarlo en formato de 3 valores:
#RGBQue en realidad se vuelve un equivalente a repetir el valor en cada color.
Por ejemplo:
#0f0Es equivalente a:
#00ff00Y:
#abcEs equivalente a:
#aabbccEstos valores no son sensibles a mayúsculas y minúsculas por lo que se usar
tanto f00 como F00
RGB y RGBA
RGB y RGBA son formatos que utilizan una función para especificar colores.
En este artículo veremos la versión moderna de rgb() que nos permite poner diferentes tipos de valores para cada color y opacidad.
Con números
La sintaxis es la siguiente:
rgb(R G B)Donde:
Res el valor de rojo (red)Ges el valor de verde (green)Bes el valor de azul (blue)
Y podemos usar valores del 0 al 255 para cada color.
La versión más reciente de esta función debe hacer separaciones entre los valores usando espacios en lugar de comas
Por ejemplo:
rgb(0 0 255)Adicionalmente, podemos usar valores de 0 a 1 para la opacidad añadiendo una diagonal seguida del valor:
rgb(R G B / A)Por ejemplo:
rgba(0 0 255 / 0.5)Con porcentajes
También podemos usar porcentajes para especificar los valores.
rgb(30% 20% 50%)Incluyendo la opacidad:
rgb(30% 20% 50% / 50%)Incluso podemos combinar la notación de porcentajes con la de números:
rgb(0 30% 255 / 80%)Sobre las funciones de legado
Anteriormente las funciones RGB estaban divididas entre rgb() y rgba(), los valores tenían que estar separados por comas y no se podían combinar números con porcentajes.
En la versión actual de rgb() debemos usar espacios para separar los valores y podemos agregar la opacidad dentro de la misma función sin problema así como combinar números con porcentajes.
HSL y HSLA
HSL y HSLA también son formatos que utilizan una función para especificar colores.
Y de igual manera tienen una versión moderna que nos permite agregar opacidad de manera opcional.
La sintaxis es la siguiente:
hsl(H S L / A)Donde:
Hes el valor del tono (Hue)Ses el valor de la saturación (Saturation)Les el valor de la luminosidad (Lightness)/ Aes la opacidad (Alpha). Es un valor opcional.
H acepta valores de tipo <number> o <angle>. Es decir, números del 0 al 360, o valores en grados, vueltas, etc.
S acepta valores de tipo <percentage>. Es decir, porcentajes del 0% al 100%. Si olvidamos el % se seguirá interpretando como porcentaje.
L también acepta valores de tipo <percentage>.
A acepta valores de tipo <alpha-value>, que en realidad sólo son valores del 0 al 1 o del 0% al 100%.
Por ejemplo:
hsl(0 100% 50%)Formas de agregar estilos
Estilos en línea
Hasta este punto la única forma que conocemos de utilizar estilos es por medio del atributo style en la etiqueta de apertura de algún elemento.
<p style="color:tomato;">Contenido</p>A este método se le conoce como estilos en línea.
Pero existen otros dos métodos que nos pueden ayudar a separar mejor los estilos del contenido para mejorar la legibilidad del código y su mantenimiento.
Para poder utilizarlos, debemos aprender un concepto al que llamamos selectores.
Sobre selectores
Nos ayudan a seleccionar los elementos que serán afectados por las reglas CSS que escribimos. Tienen la siguiente forma:
selector { propiedad: valor:}Por ahora veremos los selectores más sencillos…
Etiquetas
Estos selectores por medio del nombre de alguna etiqueta, lo que afectará a todas las etiquetas de ese tipo:
Por ejemplo:
<p>Contenido A</p><p>Contenido B</p><p>Contenido C</p><p>Contenido D</p>p { color: tomato; background-color: silver; padding: 4px; border-radius: 4px;}ID
Cuando sólo queremos estilizar un elemento específico, podemos utilizar el atributo id con un valor arbitrario.
En este caso, uno de los párrafos tiene el identificador un-identificador, el cual podemos usar para seleccionarlo con CSS.
<p>Contenido A</p><p id="un-identificador">Contenido B</p><p>Contenido C</p><p>Contenido D</p>Para seleccionar un ID, debemos utilizar el símbolo #, seguido del nombre del identificador.
#un-identificador { color: forestgreen;}Class
Es un atributo que nos permite agregar una lista de identificadores al elemento. Similar a id, pero podemos tener múltiples clases y cada clase puede estar en múltiples elementos.
<p>Contenido A</p><p id="un-identificador">Contenido B</p><p class="una-clase">Contenido C</p><p class="una-clase otra-clase">Contenido D</p>Para seleccionar por medio de clases, tenemos que utilizar el punto ., seguido del nombre del identificador.
.una-clase { color: slateblue;}.otra-clase { background-color: gold;}Estilos internos
La segunda forma de agregar estilos es por medio de la etiqueta <style>. Esta debe de ir dentro de la cabeza del documento.
Aquí podemos agregar los selectores y reglas que necesitemos.
<html> <head> <style> p { color: tomato; background-color: silver; padding: 4px; border-radius: 4px; } #un-identificador { color: forestgreen; } .una-clase { color: slateblue; } .otra-clase { background-color: gold; } </style> </head> <body> <p>Contenido A</p> <p id="un-identificador">Contenido B</p> <p class="una-clase">Contenido C</p> <p class="una-clase otra-clase">Contenido D</p> </body></html>De esta forma es más fácil diferenciar el contenido de los estilos.
Estilos externos
Para este método debemos crear un nuevo archivo con la extensión .css.
p { color: tomato; background-color: silver; padding: 4px; border-radius: 4px;}#un-identificador { color: forestgreen;}.una-clase { color: slateblue;}.otra-clase { background-color: gold;}Dentro del documento HTML debemos utilizar una etiqueta link con relación stylesheet y haciendo referencia al nombre del archivo CSS.
<html> <head> <link rel="stylesheet" href="style.css" /> </head> <body> <p>Contenido A</p> <p id="un-identificador">Contenido B</p> <p class="una-clase">Contenido C</p> <p class="una-clase otra-clase">Contenido D</p> </body></html>¿Cómo agregar comentarios en CSS?
Cada lenguaje tiene su forma de crear comentarios para que agreguemos mensajes en nuestro código.
De esa manera pueden ser leídos por los desarrolladores e ignorados por el intérprete del lenguaje.
En CSS debemos encerrar el texto entre /* */:
/* Mi comentario */Incluso podemos utilizar múltiples líneas:
/* Mi comentariode varias líneaspara mejorarel ejemplo */Y también podemos ponerlos casi en cualquier parte de nuestro código:
body /* selecciona el cuerpo del documento */ { margin: 0; /* quita el margen por defecto*/ color/* cambia el color del texto en toda la página */: #1b1b1b /* color oscuro en hexadecimal*/;}Sólo debemos asegurarnos de no interrumpir el nombre de algún selector, propiedad o valor.
Vamos a replicarlo
Hasta ahora hemos aprendido cómo utilizar algunas de las propiedades básicas de CSS, como lo son:
colorbackground-colorfont-familyfont-sizetext-alignbordermarginpaddingwidthheight
Ejercicio 1
Tratemos de replicar este ejemplo. Se trata de un título con una fuente diferente.
¿Qué reglas de CSS crees que debamos usar?
Ver respuesta
<h1>Un título con otra font</h1>h1{ font-family: Arial, sans-serif;}Ejercicio 2
Este ejercicio solo consta de un elemento con algunas reglas CSS.
¿Qué reglas de CSS crees que debamos usar?
Ver respuesta
<div></div>div{ width: 100px; height:100px; background-color:aquamarine;}Ejercicio 3
Este ejercicio consta de dos párrafos y sólo una propiedad de CSS.
¿Qué regla crees que debamos usar?
Ver respuesta
<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Dolorem repellendus cumque delectus officia mollitia eligendi doloribus expedita dolore maiores in temporibus, molestias est dolores, quidem nam facilis nulla. Excepturi, molestiae!</p><p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Dolorem repellendus cumque delectus officia mollitia eligendi doloribus expedita dolore maiores in temporibus, molestias est dolores, quidem nam facilis nulla. Excepturi, molestiae!</p>p{ font-size: 12px;}Ejercicio 4
Este ejercicio consta de tres párrafos y algunas clases. Editamos la misma propiedad para cada clase pero con diferentes valores.
Ver respuesta
<p class="izquierda">Alineado a la izquierda</p><p class="centro">Alineado al centro</p><p class="derecha">Alineado a la derecha</p>.izquierda{ text-align: left;}.centro{ text-align: center;}.derecha{ text-align: right;}Ejercicio 5
Este ejercicio utiliza 3 etiquetas <span> y algunas reglas de CSS. La más importante es margin. Las demás sólo existen para hacer este concepto más evidente.
Ver respuesta
<span>Uno</span><span>Dos</span><span>Tres</span>span { background-color: black; color: white; margin: 20px; padding: 4px 8px;}Ejercicio 6
Este ejercicio modifica un gran número de propiedades. Tratemos de averiguar cuáles son. Usamos 6 reglas en total.
Ver respuesta
Este tendrás que hacerlo por tu cuenta. Sube tu solución a alguna plataforma y deja el link en los comentarios.
¿Cómo subir mi página a un enlace real? | GitHub
Una vez que tenemos los archivos de nuestra página, podemos crear una cuenta en GitHub.
¿Qué es GitHub?
Esta es una plataforma de almacenamiento en la nube dedicada a desarrolladores. Ofrece una gran cantidad de servicios, entre ellos, alojar nuestros archivos en un servidor para que puedan ser consumidos como una página web.
¿Cómo creamos un nuevo proyecto
Cuando creamos una cuenta nueva, la página de inicio nos mostrará un botón para crear un nuevo proyecto, aunque el término que utilizamos es repositorio.
Otra alternativa es dirigirnos al botón de nuestro perfil y seleccionar Your repositories (Tus repositorios). Aquí podremos encontrar el botón para crear uno nuevo.
Nos aparecerá un formulario. El primer campo es para seleccionar el nombre de nuestro proyecto.
No podemos usar espacios ni caracteres especiales, ya que terminarán siendo parte del enlace generado.
Dentro de las opciones podremos elegir entre un proyecto público o un proyecto privado. Al usar el servicio gratuito sólo podemos crear páginas a partir de proyectos públicos.
El código de los proyectos públicos, como su nombre lo indica, está abierto a todo el mundo, así que no deberíamos poner información sensible en ellos.
El resto de los campos no los usaremos por ahora. Y le damos crear.
Dentro del repositorio
Nos enviará a la página de nuestro proyecto, aquí buscaremos el mensaje azul, y la sección que dice Upload existing files o Subir archivos existentes.
En esta pantalla podemos seleccionar o arrastrar los archivos y carpetas que conforman nuestro proyecto. Debajo aparecerá un formulario con dos campos, por ahora los dejaremos vacíos y publicaremos los nuevos archivos.
Una vez que suban los archivos, podremos ir a la barra superior que contiene diferentes menús. Seleccionaremos Settings o Ajustes. En la nueva pantalla iremos a la columna de la izquierda y buscaremos Pages o Páginas. En este panel buscaremos la sección Branch o Rama, y cambiaremos los ajustes de None a Main.
Esperamos unos minutos y recargamos la página. Hasta arriba del panel encontraremos el enlace a nuestra página.
Resolviendo algunos problemas
Me sale el error 404
Cuando usamos servicios de alojamiento debemos asegurarnos de seguir las convenciones o configuración necesaria para que nuestra página se vea correctamente.
En el caso de GitHub Pages, existen dos maneras.
Usando index.html en la raíz
Debemos asegurarnos de que al subir el proyecto, la ruta del archivo que queremos usar como página de inicio está en la raíz del proyecto y se llama index.html.
Cuando subimos una carpeta completa, la plataforma crea una ruta con el nombre de la carpeta. Por ejemplo: mi-proyecto/index.html.
Podemos subir los archivos que están dentro de mi-proyecto en lugar de la carpeta completa para resolver el problema.
Usando docs en los ajustes
Otra forma es subir la carpeta completa, pero renombrándola a docs. Y en los ajustes de Pages, seleccionar docs en lugar de /root.
¿Qué es el Control de Versiones?
El control de versiones es una herramienta que nos ayuda a crear un historial de archivos.
Trabajando sin control de versiones
Cuando trabajamos en proyectos donde cambiamos el contenido constantemente usualmente tenemos dos alternativas:
- Sobre-escribir archivos, lo cual vuelve irrecuperable versiones anteriores
- Duplicar el archivo y cambiar el nombre de alguno (el clásico
archivo-final2-definitivo.html)
Lo cual puede desencadenar en más problemas. Especialmente en programación.
Como hacemos cambios constantemente esta herramienta nos ayuda a guardar dichos cambios. Así podemos preservar el nombre original de los archivos y las diferentes versiones.
También podemos volver a estados anteriores de nuestro código por si algo sale mal.
E incluso nos ayuda a trabajar en equipo y de manera remota, manteniendo los cambios que hacen las diferentes personas y dándonos una forma de resolver conflictos por si dos o más personas editan un mismo archivo.
Analogía
Imagina que tienes una caja donde guardas dibujos.
Cada vez que terminas un dibujo, lo pones en la caja. Si luego haces un cambio en ese dibujo, en vez de borrar lo que ya hiciste, haces una copia nueva con los cambios y también la pones en la caja.
Así, tienes todas las versiones de tu dibujo.
En el control de versiones de computadoras, hacemos algo similar con los archivos donde escribimos código para programas.
Cuando empezamos un proyecto, creamos una “caja” especial (en realidad, una carpeta en la computadora) donde guardamos todos los archivos del proyecto.
Control de Versiones con GitHub Desktop
Una de las maneras más sencillas de aprender sobre el Control de Versiones de manera práctica es usando GitHub Desktop.
Esta es una herramienta que liga el programa Git con una interfaz gráfica para simplificar las tareas del control de versiones.
Instalación y uso
Podemos dirigirnos a la página oficial para descargar el instalador de esta herramienta.
Una vez descargado e instalado, lo abrimos y podemos encontrar una pantalla como esta:
Si no tenemos cuenta de GitHub podemos dar click en Skip this step (Saltar este paso).
Si tenemos cuenta, podemos ligarla.
Una vez que entremos aparecerá este menú:
Aquí tenemos diferentes opciones:
- Clone (Clonar)
- Create New Repository (Crear Nuevo Repositorio)
- Add Existing Repository (Agregar Repositorio Existente)
En este ejemplo vamos a crear un nuevo repositorio.
Nos va a aparecer este menú:
- Name (Nombre)
- Description (Descripción)
- Local path (Ruta local)
- README (Inicializar con README)
- Git ignore (Ignorar git)
- License (Licencia)
El único campo obligatorio es el nombre (Name) y la ruta donde se va a guardar. Podemos dejar la ruta por defecto.
Aparecerá este menú:
Aquí se creó automáticamente un archivo llamado .gitattributes.
Ahora podemos abrir este proyecto utilizando el atajo de teclado Ctrl + Shift + A.
Y agregar un nuevo archivo a nuestra carpeta. En este caso vamos a agregar index.html con el siguiente código:
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Mi página</title> </head> <body> <h1>Mi página</h1> </body></html>Devuelta en GitHub Desktop aparecerá una nueva selección con el archivo creado.
Este nos indica que se agregó este archivo y que lo podemos guardar en un punto en el historial.
Para hacerlo debemos agregar en la parte inferior una descripción sobre los nuevos archivos.
Dicha descripción servirá para identificar esos cambios en el historial.
Ahora podemos dar clic en el botón Commit to main para agregarlo.
En la parte superior de este panel podemos encontrar otra pestaña llamada History. Aquí podemos encontrar el historial de cambios a lo largo de la vida de nuestro proyecto.
Dando clic en cada uno de los pasos, aparecerá la lista de archivos cambiados.
Podemos ir agregando o quitando código o archivos a nuestro proyecto para crear nuevos puntos de recuperación en el historial.
Por ejemplo, agregamos un párrafo al contenido del html y ligamos un archivo de estilos css.
Le damos una descripción y lo agregamos al historial
También podemos eliminar partes del código e incluso archivos y nos aparecerá en los cambios generados para crear un nuevo punto en el historial.
Sobre fuentes
Cuando queremos cambiar el aspecto de nuestro sitio web, una de las formas más fáciles es modificando la fuente o tipografía.
Por ejemplo, este sitio está usando la fuente por defecto:
Mientas que este, está usando la regla:
body { font-family: "Franklin Gothic Medium", "Arial Narrow", Arial, sans-serif;}De esta manera, con una sola regla de CSS, podemos mejorar su apariencia considerablemente.
Cómo usar font-family
Cuando usamos la propiedad font-family tenemos que usar múltiples nombres de fuente separados por comas. Esto se debe a que algunos sistemas pueden no tener la tipografía necesaria y deben de tener configurado un respaldo.
Esto se debe a que el navegador tratará de utilizar la primera fuente en la lista. Si no está disponible tratará de usar la siguiente, y así sucesivamente.
Es decir que en font-family: "Franklin Gothic Medium", "Arial Narrow", Arial, sans-serif, la prioridad va en cascada:
- Franklin Gothic Medium
- Arial Narrow
- Arial
- sans-serif
Cuando el nombre de la tipografía es más de una palabra, tenemos que usar dobles comillas para encerrarlo.
Si es una sola palabra, o el nombre no tiene espacios, puede ser escrito sin comillas.
Fuentes por defecto
Es recomendable poner una tipografía genérica como último respaldo.
Los nombres que podemos usar son:
- serif
- sans-serif
- monospace
- cursive
- fantasy
- system-ui
- ui-serif
- ui-sans-serif
- ui-monospace
- ui-rounded
- math
- fangsong
Fuentes de internet
Una de las maneras más comunes de usar tipografías distintas a las por defecto es por medio de servicios web. El más popular es Google Fonts.
Para usar una fuente de este sitio, debemos seleccionarla:
Dar clic en Obtener fuente (Get font)
Obtener código
En la pestaña de web, nos dará el código necesario para agregar y usar dicha fuente.
Existen dos métodos
<link>
Podemos agregar el código de etiquetas <link> en la cabeza de nuestro documento.
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Mi primera página</title> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet" /> </head> <body> <h1>Mi primera página</h1> <p> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Adipisci quos quasi facilis itaque eligendi fugit nesciunt explicabo quas alias excepturi nulla vero possimus veniam pariatur laborum qui, quaerat laboriosam tenetur! </p> </body></html>Y agregar la regla de CSS en los elementos donde la vayamos a utilizar.
body { font-family: "Roboto", sans-serif;}@import
Podemos dar clic en el método @import y copiar el código generado:
Debemos pegarlo en la cabeza de nuestro documento y agregar la regla de CSS en los elementos donde la vayamos a utilizar.
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Mi primera página</title> <style> @import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap");
body { font-family: "Roboto", sans-serif; } </style> </head> <body> <h1>Mi primera página</h1> <p> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Adipisci quos quasi facilis itaque eligendi fugit nesciunt explicabo quas alias excepturi nulla vero possimus veniam pariatur laborum qui, quaerat laboriosam tenetur! </p> </body></html>Alternativamente, podemos deshacernos de las etiquetas <style> y pegar el @import en nuestro propio archivo .css.
Así se vería nuestro ejemplo usando cualquiera de los dos métodos:
Sobre el modelo de caja
El modelo de caja es un concepto de CSS que nos explica parte de la naturaleza de los elementos HTML.
Nos dice que todos los elementos son rectángulos (o cajas) que podemos distribuir de diferentes maneras:
- Unas encima de otras
- Unas al lado de otras
- Unas dentro de otras
Donde cada caja cuenta con las siguientes 4 propiedades:
- content (contenido)1
- padding (espaciado)
- border (borde)
- margin (margen)
Content
El contenido es lo que va entre la etiqueta de apertura y la etiqueta de cierre.
La mayoría de las veces se trata de texto…
<p>Aquí hay texto</p>…aunque en otras ocasiones se trata de más etiquetas, o una combinación ambos.
<p>Aquí hay <strong>más</strong> texto</p>Padding
El padding o espaciado, es el espacio que se encuentra entre el contenido y el borde. Para entender mejor esto, primero agreguemos CSS que nos ayude a visualizar el borde…
<p style="border:1px solid black">Aquí hay texto</p>… ahora agreguemos el padding…
<p style="padding:20px;border:1px solid black">Aquí hay texto</p>De esta manera es más evidente ver qué tipo de espacio estamos insertando.
Border
Es lo que envuelve al contenido y al espaciado, también lo podemos estilizar de diferentes maneras.
<p style="border:4px dashed black">Aquí hay texto</p>Margin
El margen es el espacio entre un elemento y los elementos que están a su alrededor.
<p style="margin:20px;border:1px solid black">Aquí hay texto</p><p style="border:1px solid black">Aquí hay texto</p>Notas
Etiquetas de bloque y en línea
Las diferentes etiquetas tienen un comportamiento por defecto. Algunas de ellas se distribuyen de manera apilada, es decir, de arriba hacia abajo, como una torre.
<p>Uno</p><p>Dos</p><p>Tres</p>Mientras que hay algunas que se distribuyen a lo largo del mismo renglón.
<span>Uno</span><span>Dos</span><span>Tres</span>Este comportamiento se debe a un concepto llamado nivel.
La forma de cambiarlo es mediante la propiedad display. Los valores más comunes son block, lo que hace que se ordenen en pila. E inline lo que hace que se ordenen sobre el mismo renglón.
Algunas etiquetas que están a nivel de bloque son:
<h1>-<h6><p><div><hr><ol><ul><li>
Algunas etiquetas que están a nivel en línea son:
<a><br><button><em><img><span>
A pesar de que los navegadores le dan uno de estos comportamientos a las diferentes etiquetas, podemos cambiarlo con CSS.
<span>Uno</span><span>Dos</span><span>Tres</span><style> span { display: block; }</style>Tablas en HTML
Existen algunas etiquetas básicas que podemos usar para crear tablas.
<table>: Table o tabla.
<tr>: Table Row o fila de tabla
<td>: Table Data o dato de tabla
Estructura básica de una tabla
Utilizamos <table> para definir la existencia de una tabla, <tr> para crear filas dentro de ella, y <td> para segmentar dichas filas.
<table> <tr> <td>Celda (1,1)</td> <td>Celda (1,2)</td> <td>Celda (1,3)</td> </tr> <tr> <td>Celda (2,1)</td> <td>Celda (2,2)</td> <td>Celda (2,3)</td> </tr> <tr> <td>Celda (3,1)</td> <td>Celda (3,2)</td> <td>Celda (3,3)</td> </tr></table>Agregando encabezados
Si queremos agregar títulos a las columnas podemos crear una fila inicial y segmentarla con etiquetas <th> en lugar de etiquetas <td>.
<table> <tr> <th>Encabezado 1</th> <th>Encabezado 2</th> <th>Encabezado 3</th> </tr> <!-- Datos de la tabla --></table>Dándole un título
Si queremos agregar un texto para titular nuestra tabla, podemos usar la etiqueta <caption>.
<table> <caption> Título </caption> <!-- Encabezado de la tabla --> <!-- Datos de la tabla --></table>Agregando el pie de tabla
Habrá algunas ocasiones donde tengamos que crear una última fila para crear un resumen o un total del contenido de la tabla. Lo podemos hacer con <tfoot>.
<table> <!-- Resto de la tabla --> <tfoot> <tr> <td>Sección de pie 1</td> <td>Sección de pie 2</td> <td>Sección de pie 3</td> </tr> </tfoot></table>Sobre HTML semántico
Para mejorar la accesibilidad y legibilidad de la tabla, podemos utilizar adicionalmente las etiquetas <thead> y <tbody>.
Colocaremos la fila de encabezados dentro de <thead> y el contenido de la tabla dentro de etiquetas <tbody> (puede haber más de una sección), por último debe estar <tfoot>.
Así tendremos una estructura similar a esta:
<table> <caption> <!-- Título --> </caption> <thead> <!-- Fila de encabezados --> </thead> <tbody> <!-- Filas de contenido --> </tbody> <tbody> <!-- Filas de contenido --> </tbody> <tfoot> <!-- Fila de pie --> </tfoot></table>Usemos todo al mismo tiempo
Un ejemplo real podría verse de la siguiente manera:
<table> <caption> Reporte de Ventas </caption> <thead> <tr> <th>Producto</th> <th>Cantidad</th> <th>Costo</th> </tr> </thead> <tbody> <tr> <td>Producto A</td> <td>40</td> <td>$400</td> </tr> <tr> <td>Producto B</td> <td>30</td> <td>$300</td> </tr> <tr> <td>Producto C</td> <td>10</td> <td>$500</td> </tr> </tbody> <tfoot> <tr> <td>Total</td> <td>80</td> <td>$1200</td> </tr> </tfoot></table>Y para mejorar su visualización podríamos agregar un par de estilos
table { border-collapse: collapse;}caption { margin: 8px 0;}td,th { border: 1px solid black; text-align: center; padding: 2px 4px;}Enlaces a secciones y páginas internas
Secciones dentro de una página
Existen enlaces que nos pueden desplazar dentro de una misma página.
Lo podemos hacer agregando un atributo id al elemento al que nos queremos desplazar.
Y usar el atributo href de un link (<a>) usando la notación: #id.
<a href="#mi-elemento">Desplazar a elemento</a>
<!-- Más contenido-->
<div id="mi-elemento">Desplázame hasta aquí</div>Aquí hay un ejemplo funcional:
Enlaces a páginas internas
Un sitio web puede estar compuesto de diferentes rutas. Usualmente la página de inicio se encuentra en la raíz del proyecto, y su ruta se considera: /.
Aunque podemos tener estructuras más elaboradas.
En este ejemplo tenemos la siguiente estructura:
📦mi-sitio ┣ 📂primer-nivel ┃ ┣ 📂segundo-nivel ┃ ┃ ┗ 📜index.html ┃ ┗ 📜index.html ┣ 📜index.html ┗ 📜otra-ruta.htmlAquí está el proyecto práctico:
Debemos notar los diferentes archivos y los valores utilizados en los diferentes href.
Introducción a JavaScript para web
Video
Una vez que aprendemos conceptos básicos de HTML y CSS, podemos comenzar a aprender el lenguaje de programación JavaScript. Esto nos ayudará a crear páginas dinámicas.
Por ahora veamos un ejemplo de lo que puede hacer:
Teniendo este código como base
<!doctype html><html lang="es"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Mi sitio web</title> </head> <body> <h1>Mi sitio web</h1> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure voluptate officiis ullam eum labore distinctio veritatis, blanditiis natus molestiae velit laborum, ut aspernatur explicabo est id excepturi amet aliquid expedita! </p> </body></html>La forma más sencilla de usarlo en nuestro sitio es por medio de la etiqueta <script>. Hay varias formas de usarla, por ahora sólo escribiremos el código de JavaScript entre dos etiquetas.
Colócalas después del párrafo y antes del cierre de </body>.
<script> <!-- JavaScript aquí --></script>Ahora agreguemos nuestra primera línea de código:
console.log("Hola mundo");La página se debería ver exactamente igual que antes, este código sólo imprime un mensaje a consola.
Para ver su efecto debemos abrir las herramientas de desarrollador de nuestro navegador (el atajo de teclado es F12)
Ahora vamos a la pestaña Console o Consola y deberíamos ver el mensaje “Hola mundo”.
De esta manera nos aseguramos que el script está funcionando.
Demostrando su uso
Trata copiando el siguiente código en tu script para ver algunos cambios en tu página:
const p = document.querySelector("p");p.textContent = "Hola mundo";p.style.color = "red";
const el = document.createElement("p");el.textContent = "Creado con programación";document.body.appendChild(el);En este caso el párrafo que habíamos creado ya no contiene el texto original, ahora tiene el mensaje “Hola mundo” y está de color rojo.
También agregamos un nuevo párrafo que fue creado con programación.
Estos son usos sencillos, pero podemos hacer cosas más interesantes con este lenguaje.
Algunas de las tareas que podemos realizar con él son:
- Crear y eliminar elementos en nuestro documento
- Cambiar el contenido de los elementos
- Cambiar los estilos de los elementos
- Interactuar con el usuario mediante eventos (como clics, teclas o movimientos del mouse)
- Recolectar datos mediante formularios
- Comunicarse con servidores
Entre otras cosas.
Gran parte de los sitios que visitamos en internet usan este lenguaje para darnos la funcionalidad a la que estamos acostumbrados.
Un poco de historia sobre JavaScript
JavaScript es un lenguaje de programación que usamos principalmente para crear interactividad y dinamismo en nuestros sitios web. Nos permite crear comportamientos complejos como interactuar con el usuario, enviar y recibir datos mediante formularios, actualizar el contenido de la página en tiempo real, etc.
El lenguaje fue creado por Brendan Eich en 1995 cuando trabajaba para Netscape, quienes crearon uno de los navegadores más usados cuando comenzó la web. A Eich le tomó 10 días crear la primera versión del lenguaje a la cual llamaron Mocha, luego LiveScript y finalmente JavaScript para tratar de absorber parte de la popularidad del lenguaje Java que era muy sonado en esos días.
Eventualmente el lenguaje se convirtió en una parte fundamental del desarrollo web y fue estandarizado por la Asociación Europea de Fabricantes de Computadoras (ECMA) en 1997.
A lo largo de los años el lenguaje ha sido actualizado para mejorar su funcionalidad y la versión más actual se le conoce como ES6.
Hoy en día existen herramientas que nos ayudan a usar JavaScript más allá del navegador para realizar distintas tareas como la creación de servidores, modificación de archivos, automatización de tareas, etc.
Formas de agregar scripts
Existen dos formas principales de agregar scripts a nuestro proyecto web: Interno y Externo.
Scripts internos
Este método se refiere a usar la etiqueta <script> y colocar el código dentro de ella:
<script> console.log("Un mensaje en consola");</script>Podemos colocar esta etiqueta en diferentes partes del documento, por ejemplo en la cabeza (<head>) o en alguna parte del cuerpo (<body>).
Cuando usamos este método hay que tener cuidado ya que el lugar donde coloquemos el script puede influir en los resultados.
Sobre el orden de ejecución
El código es interpretado por el navegador de arriba hacia abajo, por lo tanto, tratar de manipular un elemento que todavía no existe provocará que el script no se ejecute correctamente.
El siguiente es un script que debería cambiar el mensaje dentro del párrafo de Mi párrafo a Actualizado mediante código.
<body> <script> document.querySelector("p").textContent("Actualizado mediante código"); </script> <p>Mi párrafo</p></body>Como puedes ver no surtió efecto. Esto se debe a que el párrafo es creado hasta después del script y por lo tanto no puede ser encontrado.
Usualmente colocamos el script justo antes del cierre del cuerpo </body>. Así nos aseguramos de que todos los demás elementos ya hayan cargado.
<body> <p>Mi párrafo</p> <script> document.querySelector("p").textContent("Actualizado mediante código"); </script></body>Sobre el uso en <head>
También podemos colocar el script en la etiqueta <head>, y a pesar de que puede suceder el mismo problema, podemos deshacernos de él fácilmente.
<head> <script type="module"> document.querySelector("p").textContent("Actualizado mediante código"); </script></head><body> <p>Mi párrafo</p></body>Scripts externos
La forma más adecuada para agregar scripts una vez que comenzamos a utilizar más código, es por medio de scripts externos. El proceso es similar a ligar un archivo CSS.
Para ello tenemos que crear un nuevo archivo con las extensión .js. Usualmente lo nombramos script.js, aunque puede ser el nombre que queramos.
document.querySelector("p").textContent = "Actualizado mediante código";Para ligar este tipo de archivos con nuestro documento HTML debemos usar la misma etiqueta <script>. Sólo que esta vez debemos agregar el atributo src junto con la ruta del archivo.
<!-- Resto de etiquetas --><head> <script src="script.js" type="module"></script></head><body> <p>Mi párrafo</p></body><!-- <Resto de etiquetas> -->También debemos utilizar el atributo type="module" para evitar errores en el orden de ejecución.
Variables y constantes
En los diferentes lenguajes de programación existe el concepto de variables y constantes. Son como contenedores que nos ayudan a guardar datos.
Analogía
A mí me gusta verlo como cajas donde guardamos objetos de valor.
En JavaScript existen tres maneras de crear estos contenedores:
varletconst
var
Podemos utilizar la palabra var seguida del nombre que le queramos dar a ese contenedor:
var miNumero;A esta acción se le conoce como declaración (de variable).
Analogía
Es como etiquetar la caja para reconocerla mejor
Por sí solas son como cajas vacías. Tenemos que darles un valor a guardar. Eso lo podemos hacer con la notación = valor;.
var miNumero = 16;A esta acción se le conoce como asignación (de valor).
Analogía
Es como guardar el valor dentro de la caja.
Podemos hacerlo en lineas separadas si es necesario.
var miNumero;
miNumero = 16;Analogía
Es como ir por pasos, primero creamos la caja y la etiquetamos y después metemos el valor a guardar.
Debemos notar que al hacer la asignación por separado ya no estamos usando la palabra var.
También podemos cambiar el valor guardado a lo largo de diferentes líneas de código.
var miNumero = 16;
miNumero = 8;
miNumero = 4;Analogía
Es como ir cambiando lo que guardamos dentro de la caja.
let
Es similar a var aunque tiene algunas características importantes que por ahora no vamos a mencionar.
Se recomienda utilizar let por encima de var para la mayoría de las tareas.
Podemos usarla exactamente como en los ejemplos de arriba.
Declaración y asignación
let miNumero = 16;Declaración y asignación separada
let miNumero;
miNumero = 16;Declaración y reasignación
var miNumero = 16;
miNumero = 8;
miNumero = 4;const
A const debemos asignarle valor en la misma línea donde la declaramos. Además de que no podemos cambiar su valor una vez guardado.
const MI_NUMERO = 16;Analogía
Me gusta verlo como cajas con seguro
Crear variables y constantes nos ayuda a manipular los diferentes datos que vamos usando a lo largo de nuestros programas.
Los nombres que les damos nos ayudan a identificar mejor para qué sirven.
En la mayoría de los casos es recomendable usar const o let. Dependiendo de si queremos modificar el valor o no.
| Tipo | Valor modificable | Asignación obligatoria | Prioridad de uso |
|---|---|---|---|
const | ❌ | ✅ | 1 |
let | ✅ | ❌ | 2 |
var | ✅ | ❌ | 3 |
El uso de var está relacionado a usos más particulares que veremos en otros artículos, por ahora podemos ignorar que existe.
Nombres válidos en JavaScript
Dependiendo del lenguaje de programación hay diferentes reglas que nos dicen cómo crear los nombres de nuestras variables (y otras entidades).
Estas son algunas de las que encontramos en JavaScript:
- Debemos comenzar el nombre con una letra, un guión bajo (
_) o un signo de dinero ($).
- Ejemplos válidos:
variable,_variable,$variable. - Ejemplos inválidos:
2variable,-variable.
- A partir del segundo carácter podemos usar letras, números, guiones bajos o signos de dinero donde queramos.
- Ejemplos válidos:
nombre1,nombre_usuario,$precioTotal.
-
Ya que es un lenguaje sensible a mayúsculas y minúsculas,
miVariableymivariableserían dos entidades diferentes. -
Encontraremos palabras que no podemos usar para nombrar nuestras variables, a estas las llamamos keywords o palabras reservadas.
Esto se debe a que el lenguaje las interpreta para crear algunas instrucciones específicas.
Aquí hay algunas de ellas:
Convenciones de nombramiento
Existen diferentes notaciones para nombrar entidades, que nos ayudan a mejorar la legibilidad de nuestro código:
snake_case: Todo en minúscula, separando palabras con guion bajocamelCase: Sin separación entre palabras, primera palabra en minúscula, palabras subsecuentes empezando con mayúsculaPascalCase: Sin separación entre palabras, cada palabra comienza con mayúsculakebab-case: Todo en minúscula, separando palabras con guion medioCONSTANT_CASE: Todo en mayúscula, separando palabras con guion bajo
En base a estas y otras notaciones, cada lenguaje de programación tiene recomendaciones para nombrar variables, constantes, funciones, clases, etc. A estas se les llama convenciones de nombramiento.
Convenciones de nombramiento en JS
| Concepto | Convención |
|---|---|
| Variable | camelCase |
| Constante | CONSTANT_CASE |
| Función | camelCase |
| Propiedad de objeto | camelCase |
| Clase | PascalCase |
| Constructor | PascalCase |
Tipos de dato
Los tipos de dato son los diferentes valores que podemos guardar en las variables y constantes, cada uno tiene diferente naturaleza.
Analogía
Volviendo a la analogía de las cajas, son los tipos de cosas que podemos guardar dentro de ellas.
Si conocemos este tipo de juguetes tal vez nos podamos dar una idea:
Este juguete podemos encontrar que las figuras que entran dentro de la caja son cosas como: estrella, hexágono, triángulo, etc.
En las variables y constantes podemos meter cosas como:
numberstringbooleannullundefinedarrayobject
… entre otros
A estas “cosas” les llamamos tipos de dato
number
Se refiere a los números, tanto enteros como números decimales.
let cantidad = 16;let precio = 0.99;string
También llamado cadena de caracteres se refiere a texto, como caracteres individuales o mensajes completos.
let miLetra = "L";let miFrase = "Hola mundo";boolean
Hace referencia únicamente dos valores: verdadero (true) o falso (false). Nos ayudarán a crear instrucciones condicionales y lógicas.
let meGustaProgramar = true;let javaScriptEsDificil = false;null
Es el valor que indica que no existe un valor guardado.
let miVariable = null;Analogía
Este es un poco abstracto, pero vamos a verlo con una analogía:
En matemáticas el 0 se usa para indicar la ausencia de algún valor o medida.
En JavaScript, se usa null para indicar que no hay ningún dato donde se suponía que sí debería haber.
undefined
Es el valor por defecto que nos da una variable cuando la declaramos pero no le asignamos un valor.
let miVariable;console.log(miVariable);undefinedAnalogía
Es similar a null aunque en lugar de indicar la ausencia de un dato, indica que ahí jamás ha habido uno.
También es algo complicado de entender en un inicio pero más adelante veremos sus diferencias.
array
Los arreglos o array son colecciones lineales de datos.
let miArreglo = ["A", "B", "C", "D"];En este caso estamos guardando múltiples datos en un solo lugar.
Analogía
Los arreglos son como casilleros en donde puedes guardar múltiples datos.
En el ejemplo anterior tenemos 4 espacios para guardar datos. El primero guarda “A”, el segundo “B” y así sucesivamente.
En otros lenguajes de programación también se le conoce como list o lista
object
Los objetos también son colecciones de datos aunque no son lineales, no tienen un orden.
let datos = { usuario: "lolzini", password: "1234superseguro",};En este caso estamos agrupando entradas dentro de la variable datos.
Tenemos dos entradas, cada una de ellas se compone de dos elementos: A la parte izquierda la conocemos como key (llave) y a la parte derecha la conocemos como value (valor).
La primer entrada tiene una llave usuario y un valor lolzini. El segundo tiene una llave password y un valor 1234superseguro.
Los objetos nos ayudan a agrupar datos dándole un contexto a la información para que sea más fácil de entender al momento de manipularla.
Este es un ejemplo sencillo pero pueden llegar a tener estructuras bastante complejas.
Sobre otros tipos de dato
En realidad existen más tipos de dato como symbol y bigint, además de los que encontramos en los diferentes entornos donde usamos JavaScript, aunque por ahora no hablaremos de ellos.
Sobre los objetos
Ahora que sabemos qué tipos de dato existen, hablemos de los objetos (Object).
Sabemos que están compuestos de una colección de elementos a los cuales llamamos entradas (entries). Y que cada entrada consta de una llave (key) y un valor (value).
Sobre la notación punto
let miObjeto = { usuario: "lolzini", tiktok: "lolzini_es",};En el ejemplo anterior tenemos dos entradas:
- Una llamada
usuarioque contiene el valorlolzini - Una llamada
tiktokque contiene el valorlolzini_es
Para acceder a ellos, debemos utilizar la notación punto.
Si queremos acceder al usuario, haríamos algo como:
miObjeto.usuario;Podemos mandarlo a la consola para asegurarnos de que estamos creando una instrucción con dicho valor:
console.log(miObjeto.usuario);lolziniAquí encontramos algo curioso: Técnicamente console.log está utilizando la notación punto.
¿Eso quiere decir que console es un objeto? 👀
Si es así, entonces ¿qué tipo de dato es log? 🤔
O mejor aún, ¿de dónde viene console? 😱
Sobre console
Sí, console es un objeto.
Específicamente un objeto global, lo que quiere decir que lo podemos usar en cualquier lugar de nuestro código.
No tenemos que declararlo nosotros porque el navegador lo crea por defecto, así como algunos otros que conoceremos más adelante.
Sobre log
Un tipo de dato que no hemos visto hasta ahora es function (función), de manera simplificada podríamos decir que son acciones o comportamientos, en lugar de datos.
log es la acción que nos permite mandar mensajes a la consola del navegador.
Sobre las funciones
Hablemos de otro tipo de dato: Las funciones, nos ayudan a realizar acciones o comportamientos.
De manera técnica, son una serie de instrucciones agrupadas bajo un nombre.
Esto nos ayuda a utilizarlas en múltiples lugares sin tener que repetir el mismo código.
// Declaraciónfunction miFuncion() { // Instrucciones aqui}A este paso le llamamos declaración de la función, es decir, sólo estamos creando un instructivo de qué debe de hacer.
Analogía
Una forma de ver a las funciones es como máquinas que realizan un procedimiento.
Primero tenemos que diseñar la máquina y decirle lo que va a realizar.
Para que haga efecto todo el código que contiene la función debemos usar:
// Declaraciónfunction miFuncion() { // Instrucciones aqui}
// EjecuciónmiFuncion();A lo cual le llamamos ejecución de la función.
Analogía
La ejecución es como tomar el diseño de la máquina, crearla y echarla a andar.
Una función que ya conocemos
Hasta este punto conocemos console.log. Donde log es una función que proviene del objeto console.
Para usarla debemos usar la notación de los paréntesis, y dentro debemos poner nuestro mensaje.
console.log("Mi mensaje");A lo que va dentro de los paréntesis lo llamamos argumento.
Hay funciones que no nos piden argumentos, mientras que otras los necesitan para funcionar correctamente.
Tal es el caso de console.log().
Una nueva función predefinida
Hay funciones que no sólo nos piden que les demos un valor, también nos regresan un producto a partir de lo que les demos.
Un ejemplo de ello se encuentra dentro del objeto global document, que contiene información y acciones que puede realizar el documento HTML.
Dentro de document existe una función llamada querySelector() que nos ayuda a conseguir los diferentes elementos HTML dentro de él.
Para usarla podemos hacer lo siguiente:
<p>Mi texto</p><script> const elemento = document.querySelector("p"); console.log(elemento);</script><p>Mi texto</p>Dentro de los paréntesis podemos poner cualquier selector CSS para conseguir el primer elemento de dicha naturaleza.
Como es una función que nos regresa un producto o resultado, lo podemos guardar en una variable para usarlo en otras líneas de código.
Analogía
En este caso nos está devolviendo el elemento <p> que se encuentra en el documento.
En otros artículos veremos qué cambios podemos realizar en los diferentes elementos HTML.
¿Cómo seleccionar elementos?
Uno de los conceptos básicos de JavaScript para web es la manipulación de elementos HTML.
Para comenzar a manipular un elemento primero debemos conseguirlo mediante alguno de los siguientes métodos:
getElementById()
Nos ayuda a conseguir un elemento por medio de su identificador (id).
const element = document.getElementById("mi-id");getElementByClassName()
Nos ayuda a conseguir el primer elemento encontrado en el documento con dicha clase (class).
const element = document.getElementsByClassName("mi-clase");getElementsByTagName()
Nos ayuda a conseguir todos los elementos que sean de dicho tipo de etiqueta.
const elements = document.getElementsByTagName("div");querySelector()
Nos ayuda a conseguir el primer elemento en el documento con dicho selector (como el que usaríamos en CSS).
Para conseguir elemento por class
const element = document.querySelector(".mi-clase");Para conseguir elemento por id
const element = document.querySelector("#mi-id");Para conseguir elemento por etiqueta (tagName)
const element = document.querySelector("div");Y cualquier otro tipo de selector tan simple o tan elaborado como sea
const element = document.querySelector(`[data-theme="dark"]`);querySelectorAll()
Nos ayuda a conseguir todos los elementos que cumplan con el selector proporcionado
const elements = document.querySelectorAll("div");¿Cómo modificar elementos?
Ahora que sabemos seleccionar elementos HTML mediante JavaScript, podemos acceder y cambiar algunos de sus valores para darle dinamismo a nuestra página.
<p>Mi texto</p><script> const elemento = document.querySelector("p");</script>Al tipo de dato que conseguimos al usar alguna de las funciones para seleccionar se le conoce como HTMLElement.
Tiene diferentes propiedades a las que podemos acceder con la notación punto, como por ejemplo:
textContentstyleinnerHTMLclassList
…entre otras.
textContent
Podemos acceder a textContent de cualquier elemento HTML para modificar su contenido de texto:
<p>Mi texto</p><script> const elemento = document.querySelector("p"); elemento.textContent = "Nuevo texto";</script>style
Podemos acceder al estilo mediante style y cambiar alguna de sus propiedades, por ejemplo color y backgroundColor:
<p>Mi texto</p><script> const elemento = document.querySelector("p"); elemento.style.color = "white"; elemento.style.backgroundColor = "royalblue";</script>Las propiedades de estilo que son más de una palabra deben ir en camelCase1 para acceder correctamente a ellas.
innerHTML
Podemos cambiar el contenido HTML mediante innerHTML para agregar etiquetas por medio de strings:
<p>Mi texto</p><script> const elemento = document.querySelector("p"); elemento.innerHTML = "Mi <strong>texto</strong> modificado";</script>classList
Podemos utilizar classList para acceder a diferentes funciones que nos ayudan a agregar y eliminar clases dentro de nuestro elemento.
add
Nos ayuda a agregar clases a nuestro elemento:
<style> .estilizado { color: white; background-color: royalblue; }</style><p>Mi texto</p><script> const elemento = document.querySelector("p"); elemento.classList.add("estilizado");</script>remove
Nos ayuda a eliminar clases de nuestro elemento:
<style> .estilizado { color: white; background-color: royalblue; }</style><p class="estilizado">Mi texto</p><script> const elemento = document.querySelector("p"); elemento.classList.remove("estilizado");</script>toggle
Nos ayuda a alternar clases en nuestro elemento.
- Si está presente, la removerá
- Si no está presente, la agregará
Inicia con la clase y termina sin ella:
<style> .estilizado { color: white; background-color: royalblue; }</style><p class="estilizado">Mi texto</p><script> const elemento = document.querySelector("p"); elemento.classList.toggle("estilizado");</script>Inicia sin la clase y termina con ella:
<style> .estilizado { color: white; background-color: royalblue; }</style><p>Mi texto</p><script> const elemento = document.querySelector("p"); elemento.classList.toggle("estilizado");</script>Hay muchas otras propiedades de los HTMLElement a las que podemos acceder para modificar su comportamiento con programación. Estas sólo son las más sencillas hasta el momento.
En otros artículos veremos más de ellas para seguir agregando dinamismo a nuestras páginas.
Notas
¿Cómo crear, anexar y borrar elementos?
En algunas ocasiones debemos agregar o borrar elementos HTML de manera dinámica para cambiar el contenido de nuestra página.
JavaScript nos permite todo esto por medio de algunos métodos.
createElement()
Dentro del objeto global document existe la acción createElement() que nos ayuda a crear nuevos elementos HTML.
Dentro del argumento debemos pasar el nombre de la etiqueta que queremos crear, por ejemplo:
<body> <script> let miElemento = document.createElement("div"); console.log(miElemento); </script></body>Dará como resultado:
<div></div>Ahora podemos manipularlo para agregar algunas propiedades:
// ...let miElemento = document.createElement("div");miElemento.textContent = "TEXTO";miElemento.style.color = "tomato";console.log(miElemento);// ...Ahora tendremos:
<div style="color: tomato;">TEXTO</div>Ahora que tenemos un nuevo elemento ¿por qué no aparece en nuestra página?
Eso se debe a que JavaScript sólo está creando el elemento, el cual está flotando en el espacio (de memoria del navegador).
Para hacerlo visible debemos anexarlo al documento.
appendChild()
Todos los elementos HTML disponen de la acción appendChild() para anexar otros elementos dentro de sí mismos.
En este caso queremos agregar miElemento a body para que sea visible.
Para acceder al cuerpo podemos usar document.body, y como es un elemento HTML (<body>) podemos usar dicha acción.
Como argumento debemos pasar el elemento que queremos anexar.
// ...let miElemento = document.createElement("div");miElemento.textContent = "TEXTO";miElemento.style.color = "tomato";document.body.appendChild(miElemento);console.log(document.body);// ...Y esta vez mandamos el cuerpo del documento a consola:
<body><div style="color: tomato;">TEXTO</div></body>Y sólo hasta este momento podemos ver el elemento que creamos mediante JavaScript.
remove()
Si queremos borrar un elemento dentro del documento podemos utilizar la acción remove(), la cual también está disponible en cualquier elemento HTML.
<body> <p>Mi texto<span> a remover</span></p> <script> let elemento = document.querySelector("span"); elemento.remove(); console.log(document.body); </script></body>En este caso estamos seleccionando el elemento <span> que se encuentra en el documento y luego llamando su función remove() para eliminarlo.
Antes de que se ejecute el script tenemos esto:
Y después de su ejecución tenemos esto:
Operadores aritméticos
Crear operaciones matemáticas básicas con JavaScript es muy sencillo. Podemos usar los diferentes operadores aritméticos a los que estamos acostumbrados:
- Suma o adición
- Resta o sustracción
- Multiplicación
- División
Y algunos otros operadores.
Suma o adición
Podemos usar el símbolo + para realizar sumas.
let miCalculo = 2 + 2;4Resta o sustracción
Podemos usar el símbolo - para realizar restas.
let miCalculo = 10 - 5;5Multiplicación
Podemos usar el símbolo * para realizar multiplicaciones.
let miCalculo = 3 * 3;9División
Podemos usar el símbolo / para realizar divisiones.
let miCalculo = 10 / 3;3.3333333333333335Módulo o restante
Podemos usar el símbolo % para realizar divisiones y conseguir el restante.
let miCalculo = 10 / 3;1Exponencial
Podemos usar los símbolos ** para realizar exponentes.
let miCalculo = 2 ** 3;8Agrupaciones
Cuando empezamos a crear operaciones más complejas tendemos a agrupar utilizando ().
let miCalculo = 2 + 3 * (4 - 2 / 3);12Precedencia de operadores
El orden en el que se calculan las operaciones es el mismo que conocemos en las matemáticas.
| Operador | Orden de cálculo |
|---|---|
() | 1 |
** | 2 |
*, /, % | 3 |
+, - | 4 |
Operadores de asignación
Habrá algunas ocasiones donde queramos hacer cálculos utilizando el valor dentro de una variable y sobrescribir el valor en esa misma variable.
Por ejemplo:
let resultado = 10;
resultado = resultado + 6;10
16Analogía
Es como sacar el valor de la caja, manipularlo y luego guardarlo de nuevo en la misma caja.
Existen formas que utilizan menos código para realizar la misma acción.
Asignación de suma o adición
let resultado = 10;
resultado += 6;10
16Asignación de resta o sustracción
let resultado = 10;
resultado -= 5;10
5Asignación de Multiplicación
let resultado = 10;
resultado *= 3;10
30Asignación de división
let resultado = 10;
resultado /= 5;10
2Asignación de restante o módulo
let resultado = 10;
resultado %= 3;10
1Asignación de exponente
let resultado = 10;
resultado **= 2;10
100Formas de crear strings
En JavaScript tenemos diferentes maneras de asignar cadenas de caracteres o strings.
- Con comillas simples
- Con comillas dobles
- Con comillas invertidas
Con comillas simples
Una de las formas básicas de crear strings es por medio de las comillas simples '. Debemos encerrar nuestro mensaje entre dos de ellas:
let miMensaje = 'Hola mundo';Hola mundoNos ayuda a crear mensajes que contienen comillas dobles (") dentro.
let miMensaje = 'Entonces dijo: "Hola mundo"';Entonces dijo: "Hola mundo"Con comillas dobles
La otra forma básica es por medio de las comillas dobles ":
let miMensaje = "Hola mundo";Hola mundoNos ayuda a crear mensajes que contienen comillas simples.
let miMensaje = "¿'tas bien?";¿'tas bien?Con comillas invertidas
Al crearlas con acento invertido ` nos ayuda a crear mensajes que puedan contener comillas dobles y comillas simples.
const miMensaje = `Entonces dijo: "¿'ontas?"`;Entonces dijo: "¿'ontas?"También nos ayuda a crear plantillas literales, es decir, podemos agregar secciones del mensaje que pueden ser instrucciones en lugar de sólo texto.
let usuario = "Player1";let miMensaje = `Bienvenido ${usuario}`;Bienvenido Player1En este caso el mensaje agrega el nombre del usuario de manera dinámica.
Esto usualmente lo hacemos cuando parte del mensaje podría provenir de otro lugar del código.
Sobre el escapado
Nos puede dar la impresión de que…
- No se puede usar comillas simples dentro de mensajes creados con comillas simples
- No podemos usar comillas dobles dentro de mensajes creados con comillas dobles
- No se pueden usar acentos invertidos dentro de mensajes creados con acentos invertidos
… ya que usarlos dentro del mismo mensaje hará que sean malinterpretados como un cierre de string, pero sí hay una forma de lograrlo.
Existe un concepto llamado escapado de caracteres que nos ayuda a conseguir estos resultados, para ello podemos poner el carácter de diagonal invertida (\) antes del carácter que queramos usar en nuestro mensaje.
De esta manera podemos hacer algo como:
Comillas simples
let miMensajeEscapado = '¿\'ora qué?';¿'ora qué?Comillas dobles
let miMensajeEscapado = "Y me dijo: \"¿Esto para qué sirve?\"";Y me dijo: "¿Esto para qué sirve?"Acentos invertidos
let miMensajeEscapado = `Este es un acento invertido: \``;Este es un acento invertido: `Sobre ciclos o bucles
Dentro de los diferentes lenguajes de programación tenemos estructuras de código que nos ayudan a repetir un procedimiento múltiples veces. A estos les llamamos ciclos o bucles (o loops en inglés).
En JavaScript gran parte de las líneas de código que escribimos en nuestro script se ejecutan de manera secuencial. Es decir, en el orden en el que aparecen en el código.
Al llegar a un ciclo podemos repetir un conjunto de instrucciones múltiples veces. Usualmente existe una forma de salir de ese ciclo para que el resto de las instrucciones de nuestro programa puedan ser ejecutadas.
for
El ciclo de la ilustración anterior se vería algo así:
for (let i = 0; i < 3; i++) { // Instrucciones}La estructura principal es:
for () {
}Dentro de los paréntesis: va la lógica que le indica cuántas veces debe repetirse.
Dentro de las llaves: van las instrucciones a ejecutar en cada vuelta.
En lenguaje técnico a estas “vueltas” les llamamos iteraciones.
A su vez, la lógica dentro de los paréntesis se divide en tres segmentos:
- Declaramos una variable para realizar un conteo. Usualmente comenzamos en cero:
let i = 0;- Decimos qué condición debe cumplirse para que siga dando vueltas:
i < 3;En este caso, mientras i sea menor a 3 va a seguir iterando
- En cada vuelta sumamos
1al contador:
i++;Ejemplo
Un ejemplo con el mínimo de instrucciones sería el siguiente:
for (let i = 0; i < 10; i++) { console.log(i);}Lo que resultará en un mensaje a la consola como este:
0123456789for...of
Nos sirve para iterar colecciones de datos que vienen en forma de arreglo (Array).
Es decir, si tuviéramos algo como:
const misMensajes = ["Hola", "¿Cómo estás?", "¿Qué tal tu día?"];Podríamos usar esta estructura para acceder a cada uno de los mensajes y hacer algo con ellos.
for () {
}Lo único que cambia es lo que va dentro de los paréntesis. Podríamos verlo en dos partes:
- La declaración de una constante que guarda el dato actual
const mensaje- La colección de datos que queremos iterar
of misMensajesEjemplo
const misMensajes = ["Hola", "¿Cómo estás?", "¿Qué tal tu día?"];
for (const mensaje of misMensajes) { console.log(mensaje);}Hola¿Cómo estás?¿Qué tal tu día?for...in
Nos sirve para iterar colecciones de datos que vienen en forma de objeto (Object).
Si tenemos algo como:
const miObjeto = { usuario: "lolzini", actividad: "programador",};Podemos acceder a la llave (key) de cada propiedad:
for (const llave in miObjeto) { console.log(llave);}usuarioactividadY el hecho de que tengamos la llave significa que también podemos acceder al valor, de manera que podemos crear un mensaje más completo:
for (const llave in miObjeto) { console.log(llave + ": " + miObjeto[llave]);}usuario: lolziniactividad: programadorwhile
Otra de las formas de crear ciclos es usando while, la estructura es mucho más simple:
while () {
}Dentro de los paréntesis: va la condición que debe cumplirse para que se siga repitiendo.
Dentro de las llaves: van las instrucciones a repetir.
Ejemplo
Este ciclo imprime los números del 0 al 4.
let i = 0;
while (i < 5) { console.log(i); i++;}01234Advertencias de uso
Debemos tener cuidado con este tipo de ciclos. Si no colocamos la lógica para que el ciclo se detenga, estaremos creando un programa que repita instrucciones de manera indefinida.
Y posiblemente se detendrá por algún error de memoria.
En otras palabras, detener el ciclo es un poco “más manual”, ya que debemos crear las variables y la lógica que hará que la condición deje de cumplirse. A pesar de eso, nos permite ser un poco más creativos con dicha lógica.
do...while
Es similar a while con la diferencia de que ejecutará las instrucciones por lo menos una vez.
La estructura se ve de la siguiente manera:
do {
} while ();En este caso podemos ver que las llaves aparecen antes que los paréntesis. Esto nos puede ayudar a recordar que las instrucciones se ejecutan una vez y en los ciclos siguientes verifica la condición para repetir o detener el ciclo.
let i = 0;
do { console.log(i); i++;} while (i < 5);01234Resumiendo
| Estructura | Uso |
|---|---|
for | Iteración arbitraria |
for...of | Iteración con arreglos |
for...in | Iteración con objetos |
while | Iteración arbitraria |
do...while | Iteración arbitraria con por lo menos una ejecución |
Sobre otras formas de crear ciclos
A pesar de que hay otras formas de crear este tipo de comportamientos en nuestros programas o aplicaciones, las que aprendimos en este artículo suelen ser las primeras en aparecer en la mayoría de planes de estudio.
Veremos el resto en otros artículos, por ahora solo vale la pena mencionarlas:
- Funciones de alto orden
- Funciones recursivas
Métodos de entrada de datos
En HTML, la manera de conseguir información del usuario es por medio de input tags o etiquetas de entrada de datos.
Existen varias etiquetas con este propósito.
<label>
Usar un método de entrada por sí solo puede ser un poco confuso ya que no tiene un texto que indique de qué se trata el campo.
Normalmente lo utilizamos junto con la etiqueta <label>. La cual nos ayuda a crear un texto que describe la información a introducir.
Cuando hacemos esto debemos de agregar el atributo for dentro de <label> y un identificador id dentro de <input>.
Ambas deben tener el mismo valor para relacionarlas correctamente.
<label for="name">Nombre:</label><input type="text" id="name" />De manera alternativa, si no queremos ligarlas explícitamente con dichos atributos, podemos meter <input> dentro de <label>.
<label> Nombre: <input type="text" /></label>De esta manera podemos obtener el mismo resultado visual, pero con menos código.
<input>
La etiqueta esencial es <input> que nos ofrece una gran variedad de métodos de entrada de datos.
<input />Se usa junto con el atributo type o tipo, que nos ayuda a cambiar el tipo de entrada de dato.
Existen muchos diferentes:
<input type="text" /><input type="email" /><input type="password" /><input type="number" /><input type="radio" /><input type="checkbox" /><input type="date" /><input type="submit" />text, email y password
El tipo text nos ayuda a mostrar una barra donde el usuario puede insertar texto.
<label> Texto: <input type="text" /></label>El tipo email es similar, sólo que espera datos con el formato de correo electrónico: correo@ejemplo.com.
<label> Email: <input type="email" /></label>El tipo password oculta lo que se escribe en el campo.
<label> Contraseña: <input type="password" /></label>number
Nos ayuda a crear un campo donde sólo se pueden introducir números
<label> Número: <input type="number" /></label>radio
Nos ayuda a crear conjuntos de opciones donde sólo se puede seleccionar un elemento.
Esta entrada es especial porque debemos agregar el mismo atributo name a todas las opciones para que sólo se pueda seleccionar una a la vez.
<label> Opción 1: <input type="radio" name="ejemplo" /></label><label> Opción 2: <input type="radio" name="ejemplo" /></label><label> Opción 3: <input type="radio" name="ejemplo" /></label>checkbox
Nos ayuda a crear una casilla de verificación para poder seleccionar diferentes opciones.
<label> Opción 1: <input type="checkbox" name="ejemplo" /></label><label> Opción 2: <input type="checkbox" name="ejemplo" /></label><label> Opción 3: <input type="checkbox" name="ejemplo" /></label>date
Nos ayuda a crear un campo donde podemos seleccionar una fecha.
<label> Fecha: <input type="date" /></label>submit
Nos ayuda a crear un botón para enviar nuestro formulario (<form>).
Por defecto, el mensaje que aparece será “Submit”, que significa “Enviar” en inglés.
<input type="submit" />Para cambiar eso, podemos usar el atributo value con el mensaje que queramos poner.
<input type="submit" value="Da clic para enviar" /><textarea>
Esta etiqueta nos ayuda a crear campos de texto que tengan más de un renglón.
<textarea>Texto por defecto</textarea><select> y <option>
Nos ayudan a crear menús desplegables con diferentes opciones.
<select> <option value="opcion-a">Opción A</option> <option value="opcion-b">Opción B</option> <option value="opcion-c">Opción C</option></select>Argumentos y parámetros
Cuando creamos funciones, podemos agregar código para que puedan usar datos extras al momento de ser ejecutadas.
Debemos agregar cada uno de estos elementos dentro de los paréntesis.
Cuando los agregamos en la definición los llamamos parámetros.
Son como valores en blanco que van a ser manipulados por las instrucciones dentro de la función.
function miFuncion(p1, p2) { const suma = p1 + p2; console.log(suma);}En este caso p1 y p2.
Analogía
Recordando la analogía de las funciones, se vería algo así:
Cuando ejecutamos las funciones, a los valores que pasamos dentro de los paréntesis los llamamos argumentos. Es decir, estos son los valores que ponemos en los espacios en blanco.
miFuncion(10, 6);En este caso 10 y 6.
Analogía
Recordando la analogía de las funciones, se vería algo así:
Podemos poner tantos parámetros como queramos, y también deberíamos usar el mismo número de argumentos en cada ejecución.
Más adelante aprenderemos sobre los valores por defecto, que nos ayudan a no tener que poner algunos argumentos.
Valores por defecto
Al crear funciones podemos agregar parámetros, que son elementos que nos ayudan a manipular datos al momento de ejecutarlas.
function potenciarNumero(p1, p2) { const resultado = p1 ** p2; console.log(resultado);}Cuando las ejecutamos usualmente debemos poner el mismo número de argumentos.
potenciarNumero(2, 2);4Podemos ponerle valores por defecto a los diferentes argumentos para ahorrarnos un poco de código.
function potenciarNumero(p1, p2 = 2) { const resultado = p1 ** p2; console.log(resultado);}Al agregar un valor predefinido (= 2) ya no tenemos que usar un segundo argumento si es que lo queremos elevar al cuadrado.
potenciarNumero(3);9De igual forma podemos seguir usando la función con un segundo argumento.
En este caso si queremos elevar a una potencia diferente de 2 podemos hacer:
potenciarNumero(2, 4);16Precauciones
Cuando agregamos valores por defecto, es mejor usarlos en los parámetros que se encuentren al final.
Un mal uso de ellos sería crear una función como la siguiente:
function miFuncion(p1 = "a", p2, p3) { console.log(p1 + p2 + p3);}Aquí definimos un valor por defecto para p1 tendríamos que pasarlo como undefined para obtener el valor por defecto.
miFuncion(undefined, "b", "c");abcPor lo que se pierde el propósito de usar valores por defecto, que es ahorrarnos argumentos.
Si lo hacemos con los valores por defecto en los últimos parámetros podemos aprovecharlos como se debe:
function miFuncion(p1, p2, p3 = "c") { console.log(p1 + p2 + p3);}miFuncion("a", "b");abcSobre parámetros y valores de retorno
En un artículo anterior vimos que las funciones nos permiten agrupar un comportamiento bajo un nombre.
Por ejemplo:
function saludoAConsola() { console.log("Hola");}De esta manera podemos usar dicho código una y otra vez utilizando la notación:
saludoAConsola();HolaTambién vimos que podemos crearlas para darles información extra al momento de ejecutarlas:
function saludoAPersona(persona) { console.log("Hola " + persona);}De esta manera podemos darles diferentes valores:
saludoAPersona("mundo");saludoAPersona("lolzini");Hola mundoHola lolziniSobre el valor de retorno
Cuando creamos una función podemos obtener un dato de ellas para usarlo en otras líneas de código. A este dato le llamamos valor de retorno (return value).
Para hacerlo, debemos agregar la instrucción return seguido del valor que queremos devolverle al usuario de la función.
function miSuma(p1, p2) { const suma = p1 + p2; return suma;}Ahora cuando la ejecutemos, podemos asignar dicho valor a una variable y usar ese resultado en cualquier otro lado de nuestro código.
let resultado = miSuma(10, 6);console.log(resultado);resultado = miSuma(resultado, 4);console.log(resultado);1620Analogía
Esto nos da la ventaja de crear comportamientos predecibles donde podemos variar los datos introducidos para generar resultados al momento en lugar de resultados predefinidos.
Aquí hay una tabla de las diferentes combinaciones entre funciones con/sin parámetros y con/sin valores de retorno.
| Sin parámetros | Con parámetros | |
|---|---|---|
| Sin valor de retorno | Procedimientos simples: Realizan una acción sin recibir parámetros ni devolver valores. | Procedimientos parametrizados: Realizan una acción específica y aceptan parámetros, pero no devuelven valores. |
| Con valor de retorno | Funciones básicas: Ejecutan una tarea y devuelven un resultado, pero no aceptan parámetros. | Programación funcional: Ejecutan una tarea, aceptan parámetros y devuelven un resultado. |
¿Cómo conseguir información de formularios?
Habrá casos en los que debemos conseguir información del usuario. Para ello utilizamos los métodos de entrada.
La forma más rápida de conseguir todos los datos dentro de un formulario es la siguiente:
- Encerramos todos los campos dentro de un
<form> - Identificamos cada uno de los campos con un atributo
name(esto es obligatorio) - Colocamos un botón tipo
submit.
Todos los campos deben tener un name distinto
<form id="formulario"> <label for="username"> <span>Usuario</span> <input type="text" name="username" /> </label> <label for="password"> <span>Contraseña</span> <input type="password" name="password" /> </label> <button type="submit">Enviar</button></form>Para el script debemos:
- Obtener el elemento del formulario
const form = document.body.querySelector("#formulario");- Agregar un evento de tipo
submit
const form = document.body.querySelector("#formulario");
form.addEventListener("submit", (event) => {
});- Tomar el evento de la función y llamar
preventDefault()
const form = document.body.querySelector("#formulario");
form.addEventListener("submit", (event) => { event.preventDefault();});- Creamos una nueva instancia de
FormDatacon el elemento que emitió el evento
const form = document.body.querySelector("#formulario");
form.addEventListener("submit", (event) => { event.preventDefault(); const formData = new FormData(event.target);});- Y cambiar convertir el resultado en objeto
const form = document.body.querySelector("#formulario");
form.addEventListener("submit", (event) => { event.preventDefault(); const formData = new FormData(event.target); const data = Object.fromEntries(formData.entries()); console.log(data);});Ahora podemos acceder a la información que el usuario pasó a los campos del formulario.
Si pasamos lolzini a Usuario y 123 a Contraseña vamos a obtener un objeto de la siguiente forma:
{ username: "lolzini", password: "123"}En la siguiente sección está el ejemplo práctico. Podemos cambiar los valores o usar los que están por defecto y darle Enviar.
En la parte inferior está la consola que mostrará los datos en un objeto.
Entidades HTML
Cuando usamos HTML puede que se nos presente un escenario donde tenemos que utilizar caracteres como < o > dentro del contenido.
Si intentamos poner estos (y algunos otros símbolos) puede que provoquen errores en el navegador, ya que son símbolos usados para la creación de etiquetas (<nombre>) y otros comportamientos específicos de HTML.
<p><Nada por aquí></p>En estos casos debemos utilizar una alternativa para colocar este tipo de caracteres a los que llamamos entidades.
Hay dos formas en las cuales podemos usarlas
Entidades por nombre
La sintaxis se ve de la siguiente manera: &nombre;.
Para el caso de < podemos usar < donde lt viene de less than (en inglés) o menor que (en español).
Para el caso de > podemos usar > donde gt viene de greater than (en inglés) o mayor que (en español).
<p><Nada por aquí></p>Sólo algunos caracteres pueden ser usados mediante su nombre, para el resto debemos usar el segundo método.
Entidades por número
La sintaxis se ve de la siguiente manera: &#número;. Todas las entidades tienen un número correspondiente.
Para el caso de < podemos usar <.
Para el caso de > podemos usar >.
<p><Nada por aquí></p>De esta manera el contenido puede ser mostrado correctamente.
Existen listas donde podemos ver los respectivos nombres y números de cada entidad que podemos utilizar, como la que encontramos en FreeFormatter1
Notas
Diferencia entre input submit y button submit
Existen dos elementos que nos pueden ayudar a enviar un formulario: input y button, ambos con el atributo type="submit".
Por defecto <input type="submit"> muestra el texto “Submit” que significa “Enviar” en inglés.
Ya que <input> es un elemento vacío o de auto-cierre, la manera en la podemos cambiar el texto del botón es mediante el atributo value.
<input type="submit" value="Enviar" />La ventaja de <button> es que puede tener contenido.
<button type="submit">Enviar</button>Gracias a esto, podemos crear botones con una apariencia más compleja en lugar de sólo texto.
Por ejemplo, podemos poner un ícono SVG:
<button type="submit"> <span>Enviar</span> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send-horizontal" > <path d="m3 3 3 9-3 9 19-9Z" /> <path d="M6 12h16" /> </svg></button>Cómo seccionar una lista de opciones
Cuando utilizamos listas desplegables con <select> podemos usar la etiqueta <optgroup> para seccionar la lista mostrada.
En este ejemplo creamos una lista de diversas mascotas, seccionadas por razas:
<select> <option>Selecciona una opción</option> <optgroup label="Perros"> <option value="labrador-retriever">Labrador Retriever</option> <option value="golden-retriever">Golden Retriever</option> <option value="chihuahua">Chihuahua</option> </optgroup> <optgroup label="Gatos"> <option value="siames">Siamés</option> <option value="persa">Persa</option> <option value="british-shorthair">British Shorthair</option> </optgroup> <optgroup label="Peces"> <option value="goldfish">Goldfish</option> <option value="betta">Betta</option> <option value="guppy">Guppy</option> </optgroup></select>Recordemos que es importante colocar el atributo value para conseguir un
valor real al momento de manipular con JavaScript.
Formas de centrar contenido
🎬 Video
Saber centrar contenido en CSS es de los conocimientos más útiles a la hora de crear nuestros proyectos.
Existen distintos métodos, tanto para centrar horizontalmente como para hacerlo verticalmente.
Centrar texto
Podemos centrar el texto de cualquier etiqueta que use nivel de bloque con la regla text-align: center;.
Centrar contenido
Alineación horizontal
Podemos centrar el contenido de cualquier etiqueta que use nivel de bloque con la regla margin: 0 auto;.
El valor importante es auto como segundo parámetro ya que afecta los costados (izquierda y derecha) con dicho valor.
Además de que el ancho (width) del contenido debe de ser menor al 100% del contenedor.
Alineación vertical
Hoy en día tiene gran soporte1 la alineación vertical en elementos a nivel de bloque usando align-content: center.
Usando flexbox
La manera más actual (en términos de CSS) y más conveniente suele llegar a ser flexbox.
Alineación horizontal
Debemos cambiar la propiedad display para que use el valor flex.
Debemos agregar la propiedad justify-content con el valor center para alinear al centro en el eje horizontal.
Alineación vertical
Debemos cambiar la propiedad display para que use el valor flex.
Debemos agregar la propiedad align-items con el valor center para alinear al centro en el eje vertical.
En este caso agregamos una altura (height) y un borde (border) para que se vea claramente el centrado vertical.
Podemos usar ambos para alinear horizontal y verticalmente.
Usando grid
Debemos cambiar la propiedad display para que use el valor grid.
Debemos agregar la propiedad place-items con el valor center para alinear al centro tanto en el eje horizontal como en el vertical.
Usando position
Alineación horizontal
Debemos cambiar la propiedad position para que use el valor absolute.
Debemos agregar la propiedad left con el valor 50% para llevar el costado izquierdo de nuestro elemento al centro.
Y debemos mover el eje del elemento para centrarlo correctamente. Para hacerlo podemos usar transform con el valor translateX(-50%).
Alineación vertical
Debemos cambiar la propiedad position para que use el valor absolute.
Debemos agregar la propiedad top con el valor 50% para llevar el borde superior de nuestro elemento al centro.
Y debemos mover el eje del elemento para centrarlo correctamente. Para hacerlo podemos usar transform con el valor translateY(-50%).
Podemos usar ambos para alinear horizontal y verticalmente con el valor: transform: translate(-50%, -50%);
Usando tablas
Debemos crear un contenedor para modificar la alineación horizontal.
Debemos cambiar la propiedad display para que use el valor table.
Para centrar el contenido horizontalmente debemos agregar text-align: center;.
A la etiqueta dentro del contenedor debemos agregarle display: table-cell y vertical-align: middle; para alinear verticalmente.
<center>
En versiones anteriores de HTML se podía utilizar la etiqueta <center>:
<center>Contenido</center>En HTML5 su uso está desalentado2. Se recomienda usar CSS en su lugar.
align="center"
En algunos elementos podemos usar align="center" para centrar el contenido:
<p align="center">Contenido</p>En HTML5 su uso está desalentado. Se recomienda usar CSS en su lugar.
Y hacer esto no funciona:
<div center="true">Contenido</div>Notas
Formas avanzadas de agregar estilos
Existen algunas maneras básicas de agregar estilos1 a nuestros proyectos web.
Conforme creamos proyectos más avanzados debemos usar algunas características extra:
- Disponer de varias hojas de estilos
- Importarlas en un orden particular
- Aplicarlas sólo en ciertos escenarios.
@import
Dentro de cualquier hoja de estilo podemos importar otras hojas utilizando la notación @import "RUTA".
Donde RUTA es la dirección donde se encuentra la otra hoja de estilos que queremos usar.
Por ejemplo, teniendo la siguiente estructura de proyecto:
📦mi-pagina ┣ 📜desktop.css ┣ 📜index.html ┣ 📜main.css ┣ 📜style.css ┗ 📜utils.cssPodríamos hacer algo como lo siguiente:
<head> <!-- Más etiquetas --> <link rel="stylesheet" type="text/css" href="./style.css" /></head>@import "./main.css";@import "./utils.css";@import "./desktop.css";De esta manera podemos controlar el orden de importación.
E inclusive agregar media queries para que sólo se activen en ciertos escenarios:
@import "./main.css";@import "./utils.css";@import "./desktop.css" screen and (min-width: 1024px);Algo que debemos tener en cuenta es que este tipo de importaciones siempre deben aparecer hasta arriba en nuestra hoja de estilos.
Atributos dentro de <link>
Dentro de la cabeza de nuestro documento (<head>) podemos utilizar múltiples etiquetas <link> en el orden en el que deseemos que sean cargadas.
<head> <!-- Más etiquetas --> <link rel="stylesheet" type="text/css" href="./main.css" /> <link rel="stylesheet" type="text/css" href="./utils.css" /> <link rel="stylesheet" type="text/css" href="./desktop.css" /></head>Adicionalmente podemos utilizar el atributo media para agregar media queries y controlar los escenarios en los que será usada dicha hoja.
<head> <!-- Más etiquetas --> <link rel="stylesheet" type="text/css" href="./main.css" /> <link rel="stylesheet" type="text/css" href="./utils.css" /> <link rel="stylesheet" type="text/css" href="./desktop.css" media="screen and (max-width: 1024px)" /></head>Notas
¿Cómo agregar modo oscuro?
La manera más sencilla de agregar modo oscuro a nuestro sitio web es por medio de un atributo extra en el elemento <html>.
El primer paso es agregarlo con el valor del tema por defecto:
<html data-theme="light"> <!-- ... --></html>Alternativa
Alternativamente podemos usar una clase:
<html class="light"> <!-- ... --></html>Debemos tener en cuenta que los scripts deben cambiar respectivamente para manipular clases en lugar de data-attributes.
Esto nos ayudará a tener un lugar para guardar el tema actual y poder cambiar su valor mediante JavaScript.
Sobre las preferencias del usuario
Hoy en día podemos obtener el tema preferido del usuario mediante una media query llamada prefers-color-scheme:
// Consigue la preferencia del usuarioconst prefersDark = window.matchMedia("(prefers-color-scheme: dark)");
// Aplica dicha preferenciaif (prefersDark) { document.documentElement.dataset.theme = "dark";}
// Actualiza el tema cuando cambie la preferencia mediante el sistema operativoprefersDark.addEventListener("change", (e) => { if (e.matches) { document.documentElement.dataset.theme = "dark"; } else { document.documentElement.dataset.theme = "light"; }});De esta podemos conseguir el valor inicial y hacer el cambio correspondiente si el usuario cambia el tema mediante su sistema operativo.
Sobre la interfaz de usuario
También debemos agregar una manera de que el usuario pueda elegir dentro de la página. Para ello vamos a agregar un botón y un script:
<button id="theme-button">Cambiar tema</button>// Obtenemos el botónconst themeButton = document.querySelector("#theme-button");
// Cambiamos el tema cuando se haga clic en el botónthemeButton.addEventListener("click", (e) => { if (document.documentElement.dataset.theme === "light") { document.documentElement.dataset.theme = "dark"; } else { document.documentElement.dataset.theme = "light"; }});Ahora que tenemos la funcionalidad básica podemos agregar los estilos:
html { background-color: beige; color: darkslateblue;}
[data-theme="dark"] { background-color: #3e3e3e; color: #fafafa;}Y cambiar cualquier otro elemento utilizando los selectores necesarios:
button { background-color: tomato; color: white;}
[data-theme="dark"] button { background-color: slateblue; color: white;}Sobre la extensibilidad
De esta manera podemos crear diferentes temas. Por ejemplo, si queremos agregar un tema llamado dark-blue sólo tenemos que agregar los estilos correspondientes:
/* ... */
[data-theme="dark-blue"] { background-color: #002244; color: #fafafa;}Y crear la interfaz de usuario necesaria. Si es que tenemos más de dos temas lo mejor sería usar un <select> en lugar de un <button>:
<select id="theme-selector"> <option value="light">Claro</option> <option value="dark">Oscuro</option> <option value="dark-blue">Azul oscuro</option></select>// Obtenemos el selectorconst themeSelector = document.querySelector("#theme-selector");
// Cambia el atributo de tema cuando cambie la opciónthemeSelector.addEventListener("change", (e) => { document.documentElement.dataset.theme = e.target.value;});También tenemos que asegurarnos de que al cargar la página la opción por defecto sea correcta. Podemos hacerlo de la siguiente manera:
// Itera sobre las opciones y le da el atributo selected al que coincida con el tema actualfor (const option of themeSelector.options) { if (option.value === document.documentElement.dataset.theme) { option.selected = true; }}Sobre la preservación del tema
Todavía nos falta manejar algunos casos:
- Cuando el usuario tiene un tema en nuestra página distinto al de su navegador/sistema operativo.
- Cuando hay más de dos temas disponibles y el usuario elige uno diferente al claro u oscuro.
Para ello podemos guardar la preferencia del usuario en localStorage:
themeSelector.addEventListener("change", (e) => { const selectedTheme = e.target.value; localStorage.setItem("theme", selectedTheme); document.documentElement.dataset.theme = selectedTheme;});Y cargarla donde sea necesario:
const userTheme = localStorage.getItem("theme");
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)");
if (!userTheme && prefersDark.matches) { document.documentElement.dataset.theme = "dark";}
if (userTheme) { document.documentElement.dataset.theme = userTheme;}
// ...Código final
El código final se vería algo así:
<html data-theme="light"> <!-- ... --> <body> <select id="theme-selector"> <option value="light">Claro</option> <option value="dark">Oscuro</option> <option value="dark-blue">Azul oscuro</option> </select> </body></html>const userTheme = localStorage.getItem("theme");
// Consigue la preferencia del usuarioconst prefersDark = window.matchMedia("(prefers-color-scheme: dark)");
// Aplica dicha preferenciaif (!userTheme && prefersDark.matches) { document.documentElement.dataset.theme = "dark";}
if (userTheme) { document.documentElement.dataset.theme = userTheme;}
// Actualiza el tema cuando cambie la preferencia mediante el sistema operativoprefersDark.addEventListener("change", (e) => { if (e.matches) { document.documentElement.dataset.theme = "dark"; } else { document.documentElement.dataset.theme = "light"; }});
const themeSelector = document.querySelector("#theme-selector");
// Se asegura de que la opción por defecto sea correctafor (const option of themeSelector.options) { if (option.value === document.documentElement.dataset.theme) { option.selected = true; }}
// Cambia el atributo de tema cuando cambie la opciónthemeSelector.addEventListener("change", (e) => { const selectedTheme = e.target.value; localStorage.setItem("theme", selectedTheme); document.documentElement.dataset.theme = selectedTheme;});html { background-color: beige; color: darkslateblue;}
[data-theme="dark"] { background-color: #3e3e3e; color: #fafafa;}
button { background-color: tomato; color: white;}
[data-theme="dark"] button { background-color: darkblue; color: antiquewhite;}
[data-theme="dark-blue"] { background-color: #002244; color: #fafafa;}¿Qué son los niveles de abstracción?
En programación, el término nivel de abstracción se refiere al parecido que tiene un lenguaje de programación con un lenguaje natural.
A mayor nivel de abstracción, el lenguaje será más parecido a un lenguaje natural. Lo cual lo hace más comprensible para los humanos.
A menor nivel de abstracción, el lenguaje será más parecido al lenguaje máquina. Lo cual lo hace más comprensible para las computadoras.
Los más común es querer alcanzar la sintaxis del idioma inglés. Aunque hay lenguajes de programación que son más visuales, como Scratch.
Ventajas y desventajas
Cada tipo de lenguaje tiene sus pros y sus contras:
| Nivel | Ventajas | Desventajas |
|---|---|---|
| Alto |
|
|
| Bajo |
|
|
Ejemplo
Aquí hay dos ejemplos de código para imprimir 10 números en la consola.
Lenguaje de alto nivel (Python):
for i in range(10): print(i)Lenguaje de bajo nivel (Ensamblador):
section .data msg db '%d', 0
section .bss res resb 1
section .text global _start
_start: mov ecx, 0 ; Inicializar contador a 0
print_loop: mov eax, ecx ; Mover el valor de contador a eax add eax, '0' ; Convertir a carácter mov [res], eax ; Almacenar en res mov eax, 4 ; Llamada al sistema para escribir mov ebx, 1 ; File descriptor (stdout) mov edx, 1 ; Número de bytes a escribir int 0x80 ; Interrupción del sistema inc ecx ; Incrementar contador cmp ecx, 10 ; Comparar con 10 jl print_loop ; Si es menor, saltar a print_loop
mov eax, 1 ; Llamada al sistema para salir xor ebx, ebx ; Estado de salida int 0x80 ; Interrupción del sistemaLista de lenguajes
Aquí hay una lista de los lenguajes más conocidos y su nivel:
| Lenguaje de Programación | Nivel |
|---|---|
| Assembler (Ensamblador) | Bajo Nivel |
| C | Bajo Nivel / Medio |
| C++ | Alto Nivel |
| Java | Alto Nivel |
| Python | Alto Nivel |
| JavaScript | Alto Nivel |
| Ruby | Alto Nivel |
| PHP | Alto Nivel |
| C# | Alto Nivel |
| Swift | Alto Nivel |
| Go | Alto Nivel |
| Rust | Alto Nivel |
| Kotlin | Alto Nivel |
| TypeScript | Alto Nivel |
| Perl | Alto Nivel |
| Haskell | Alto Nivel |
| Scala | Alto Nivel |
| Dart | Alto Nivel |
Una pantalla oscura llena de letras
Vemos lo que hacemos
¿Cuál es tu programa favorito dentro de la computadora?
Quizás es el navegador, donde puedes explorar un inmenso mar de información y contenido. O una aplicación para dibujar o hacer videos. O algún juego que tengas instalado.
Sea el que sea, lo más seguro es que estés acostumbrado a ver botones, menús, y otros elementos visuales con los que interactúas para realizar acciones dentro de ese programa.
A esta forma de interactuar con la computadora la conocemos como GUI, por Graphical User Interface o interfaz gráfica de usuario.
Pero no siempre fue así…
Antes del GUI: El mundo del texto
Antes de que las GUIs se popularizaran, interactuar con las computadoras era como resolver un rompecabezas de palabras. Los usuarios tenían que escribir comandos en texto, siguiendo una sintaxis específica.
Esto se hacía en lo que se llama una interfaz de línea de comandos o CLI(Command Line Interface).
Imagina tener que recordar y teclear comandos precisos para abrir un archivo, copiarlo o jugar un juego. Era un proceso que requería conocimiento y precisión, algo así como aprender un nuevo idioma solo para hablar con tu computadora.
La revolución del GUI
Todo cambió con la llegada de las GUIs. En lugar de memorizar y escribir comandos, los usuarios podían simplemente hacer clic en íconos y menús.
Esto hizo que las computadoras fueran mucho más accesibles y fáciles de usar para todos, no solo para los expertos en informática.
Las GUIs no solo hicieron la vida más fácil, sino que también abrieron la puerta a un sinfín de posibilidades creativas. Los diseñadores gráficos, editores de video, arquitectos y muchos otros profesionales encontraron en la GUI una herramienta poderosa para su trabajo.
¿Cómo funciona un GUI?
Un GUI funciona mostrándote representaciones gráficas de los comandos que tu computadora puede realizar.
Por ejemplo, en lugar de escribir “abrir archivo”, haces clic en un ícono que parece una carpeta. Detrás de cada elemento visual, hay líneas de código que le dicen a la computadora qué hacer.
Además, los GUIs son interactivos y responden a tus acciones. Puedes arrastrar y soltar elementos, usar barras de desplazamiento para ver más contenido, y recibir respuestas visuales inmediatas de tus acciones, lo que hace que la experiencia de usar una computadora sea más intuitiva y agradable.
Comparación entre navegar con CLI y GUI
Para entrar en los diferentes directorios o carpetas con CLI debemos usar el comando cd [RUTA]. Para listar todo el contenido de dicho directorio, debemos usar dir.
Mientras que en GUI, podemos abrir el Explorador de Archivos y navegar con clics y ver todos los archivos representados mediante íconos.
El futuro de la interacción con computadoras
Hoy en día, las GUIs son solo una parte de cómo interactuamos con nuestras máquinas. Con el avance de la tecnología, se están desarrollando nuevas formas de interacción, como la realidad aumentada, la realidad virtual y la inteligencia artificial.
Quizás en el futuro, miraremos hacia atrás a las GUIs como un paso importante, pero solo uno de muchos en la evolución de la forma de interactuar con la tecnología.
Mientras tanto, la próxima vez que hagas clic en un ícono o arrastres un archivo a una carpeta, recuerda el largo camino que hemos recorrido desde aquellas pantallas llenas de texto hasta el colorido y amigable mundo de las GUIs.
Editores de código
VS Code
Es de los editores más populares, gratuito y extendible. Tiene herramientas para distintas ramas de la programación. Es ligero y el uso de extensiones nos puede ayudar a crear un ambiente productivo dedicado a nuestras tareas.
Brackets
Este editor de código ya no tiene soporte desde Septiembre 2021. Recomiendan usar VS Code.
Brackets es un editor de código fuente moderno y de código abierto que está especialmente diseñado para el desarrollo web. Es ligero, pero potente y viene con herramientas visuales que facilitan el diseño en el navegador. Uno de sus puntos fuertes es la capacidad de previsualizar en tiempo real los cambios realizados en el código.
Sublime Text
Sublime Text es conocido por su velocidad y eficiencia. Este editor es muy personalizable y tiene una comunidad activa que crea plugins y paquetes para ampliar sus funcionalidades. Su interfaz es simple, lo que lo hace fácil de usar, y puede manejar archivos y proyectos de gran tamaño sin problemas.
Notepad++
Notepad++ es un editor de texto gratuito y de código abierto para Windows. Es ligero y rápido, y soporta la edición de múltiples documentos y el resaltado de sintaxis para muchos lenguajes de programación. Es ideal para tareas rápidas y edición de archivos pequeños.
Vim
Vim es un editor de texto altamente configurable que se basa en el editor Vi, incluido en la mayoría de sistemas UNIX. Vim es muy popular entre los programadores debido a su eficiencia y flexibilidad. Tiene una curva de aprendizaje empinada, pero una vez dominado, permite una edición de texto muy rápida.
Neovim
Neovim es una extensión de Vim diseñada para permitir una mayor extensibilidad y embebibilidad en otras aplicaciones. Mantiene la eficiencia y flexibilidad de Vim mientras introduce mejoras en el rendimiento y la modernización de su arquitectura. Neovim es muy popular entre los desarrolladores que buscan un editor de texto altamente personalizable con soporte para plugins escritos en múltiples lenguajes de programación.
Emacs
Emacs es otro editor de texto muy poderoso y extensible. Se puede personalizar profundamente utilizando el lenguaje de programación Lisp. Emacs es conocido por su capacidad de integración con diversas herramientas y entornos de desarrollo, lo que lo convierte en una herramienta versátil para los programadores.
Programming VS Coding
En inglés existen estas dos palabras que hacen referencia a crear código:
Programming, es la acción de programar.
Coding, es la acción de escribir código.
Programmer, es la persona que programa.
Coder, es la persona que escribe código.
En muchos contextos se usan de maneras intercambiables. En español la palabra más cercana para coding es codificación, aunque es poco usada dentro del contexto de la programación.
La diferencia está en que la programación hace referencia a utilizar lenguajes que nos permiten manipular un sistema con instrucciones lógico-matemáticas.
Pero no todos los lenguajes nos permite hacer esto, hay lenguajes que no son de programación. Por ejemplo, los lenguajes de marcado, como HTML. Este tipo de lenguajes nos permite crear estructuras de contenido e información.
Otro ejemplo de un lenguaje que no es de programación es el lenguaje CSS, que nos ayuda a cambiar la apariencia de los documentos HTML.
Siendo estrictos con la definición de cada palabra podríamos usar coding para definir la acción de escribir en lenguajes como HTML o CSS, pero no para JavaScript u otros lenguajes de programación.
Y viceversa, usar programming para definir la acción de escribir en algún lenguaje como JavaScript (entre otros), pero no para HTML o CSS.