parent
44e4782cb9
commit
debd7b2f6b
@ -0,0 +1,376 @@
|
|||||||
|
<div align="center">
|
||||||
|
<h1> 30 Días de JavaScript: Escribiendo Códigos Limpios</h1>
|
||||||
|
<a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/">
|
||||||
|
<img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social">
|
||||||
|
</a>
|
||||||
|
<a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh">
|
||||||
|
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<sub>Autor:
|
||||||
|
<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br>
|
||||||
|
<small> Enero, 2020</small>
|
||||||
|
</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
[<< Día 19](../dia_19_Closures/dia_19_closures.md) | [Día 21 >>](..)
|
||||||
|
|
||||||
|
![Thirty Days Of JavaScript](../images/banners/day_1_20.png)
|
||||||
|
|
||||||
|
- [Día 20](#día-20)
|
||||||
|
- [Escribiendo código limpio](#escribiendo-código-limpio)
|
||||||
|
- [Guía de estilo JavaScript](#guía-de-estilo-javascript)
|
||||||
|
- [¿Por qué necesitamos una guía de estilo?](#¿por-qué-necesitamos-una-guía-de-estilo)
|
||||||
|
- [Guía de estilo JavaScript de Airbnb](#guía-de-estilo-javascript-de-airbnb)
|
||||||
|
- [Guía de estilo estándar de JavaScript](#guía-de-estilo-estándar-de-javascript)
|
||||||
|
- [Guía de estilo JavaScript de Google](#guía-de-estilo-javascript-de-google)
|
||||||
|
- [Convenciones de codificación en JavaScript](#convenciones-de-codificación-en-javascript)
|
||||||
|
- [Convenciones usadas en 30DíasDeJavaScript](#convenciones-usadas-en-30díasdejavascript)
|
||||||
|
- [Variables](#variables)
|
||||||
|
- [Arrays](#arrays)
|
||||||
|
- [Funciones](#funciones)
|
||||||
|
- [Bucles](#bucles)
|
||||||
|
- [Objetos](#objetos)
|
||||||
|
- [Condicional](#condicional)
|
||||||
|
- [Clases](#clases)
|
||||||
|
|
||||||
|
# Día 20
|
||||||
|
|
||||||
|
## Escribiendo código limpio
|
||||||
|
|
||||||
|
### Guía de estilo JavaScript
|
||||||
|
|
||||||
|
Una guía de estilo de JavaScript es un conjunto de normas que indica cómo debe escribirse y organizarse el código de JavaScript. En esta sección, hablaremos de las guías de JavaScript y de cómo escribir un código limpio.
|
||||||
|
|
||||||
|
JavaScript es un lenguaje de programación, como el lenguaje humano, tiene una sintaxis. La sintaxis de JavaScript debe escribirse siguiendo una determinada pauta de estilo para convencer y simplificar.
|
||||||
|
|
||||||
|
### ¿Por qué necesitamos una guía de estilo?
|
||||||
|
|
||||||
|
Has estado codificando solo durante mucho tiempo, pero ahora parece que trabajas en equipo. No importa de qué manera escribas tu código, siempre y cuando funcione, sin embargo, cuando trabajas en un equipo de 10, 20 o más desarrolladores en un proyecto y en la misma base de código, el código será desordenado y difícil de manejar si no hay ninguna guía a seguir.
|
||||||
|
|
||||||
|
Puede desarrollar sus propias directrices y convenciones o también puede adaptar directrices bien desarrolladas. Conozcamos las guías más comunes.
|
||||||
|
|
||||||
|
Guías de estilo de JavaScript más comunes
|
||||||
|
|
||||||
|
- Guía de estilo JavaScript de Airbnb
|
||||||
|
- Guía de estilo estándar de JavaScript
|
||||||
|
- Guía de estilo JavaScript de Google
|
||||||
|
|
||||||
|
#### Guía de estilo JavaScript de Airbnb
|
||||||
|
|
||||||
|
Airbnb tiene una de las guías de estilo JavaScript más populares de Internet. También cubre casi todos los aspectos de JavaScript y es adoptado por muchos desarrolladores y empresas. Puede consultar la [Guía de estilo de Airbnb](https://github.com/airbnb/javascript). Yo también recomendaría probarlo. Su estilo es muy fácil de usar y sencillo de entender.
|
||||||
|
|
||||||
|
#### Guía de estilo estándar de JavaScript
|
||||||
|
|
||||||
|
Esta guía no es tan popular como la de Airbnb, pero merece la pena echarle un vistazo. Han eliminado el punto y coma en su [guía de estilo](https://standardjs.com/).
|
||||||
|
|
||||||
|
#### Guía de estilo JavaScript de Google
|
||||||
|
|
||||||
|
No diré mucho sobre la guía de Google. No las he usado, más bien te sugiero que eches un vistazo desde este [link](https://google.github.io/styleguide/jsguide.html).
|
||||||
|
|
||||||
|
### Convenciones de codificación en JavaScript
|
||||||
|
|
||||||
|
En este desafío también utilizamos las convenciones y guías generales de codificación de JavaScript. Las convenciones de codificación son pautas de estilo de programación desarrolladas por un individuo, un equipo o una empresa.
|
||||||
|
|
||||||
|
Las convenciones de codificación ayudan:
|
||||||
|
|
||||||
|
- para escribir un código limpio
|
||||||
|
- para mejorar la legibilidad del código
|
||||||
|
- para mejorar la reutilización y el mantenimiento del código
|
||||||
|
|
||||||
|
Las convenciones de codificación incluyen
|
||||||
|
|
||||||
|
- Reglas de declaración y denominación de las variables
|
||||||
|
- Reglas de declaración y denominación de las funciones
|
||||||
|
- Reglas para el uso de espacios en blanco, sangría y comentarios
|
||||||
|
- Prácticas y principios de programación
|
||||||
|
|
||||||
|
#### Convenciones usadas en 30DíasDeJavaScript
|
||||||
|
|
||||||
|
En este reto seguimos la convención habitual de JavaScript pero he añadido también mi preferencia de escritura.
|
||||||
|
|
||||||
|
- Utilizamos camelCase para las variables y las funciones.
|
||||||
|
- Todos los nombres de las variables comienzan con una letra.
|
||||||
|
- Hemos optado por utilizar _const_ para las constantes, los arrays, los objetos y las funciones. En lugar de las comillas dobles, hemos optado por utilizar las comillas simples o backtick. Las comillas simples se están poniendo de moda.
|
||||||
|
- También hemos eliminado el punto y coma de nuestro código, pero es una cuestión de preferencia personal.
|
||||||
|
- Espacio alrededor de los operadores aritméticos, operadores de asignación y después de la coma
|
||||||
|
- Función de flecha en lugar de declaración de función
|
||||||
|
- Retorno explícito en lugar de implícito si la función es de una línea
|
||||||
|
- No hay coma final en el último valor de un objeto
|
||||||
|
- Preferimos este +=, -=, \*= /=, \*\*= en lugar de la versión más larga
|
||||||
|
- Cuando usamos console.log() es bueno imprimir con una cadena de etiquetas para identificar de dónde viene la consola
|
||||||
|
|
||||||
|
#### Variables
|
||||||
|
|
||||||
|
```js
|
||||||
|
let firstName = "Asabeneh";
|
||||||
|
let lastName = "Yetayeh";
|
||||||
|
let country = "Finland";
|
||||||
|
let city = "Helsinki";
|
||||||
|
|
||||||
|
const PI = Math.PI;
|
||||||
|
const gravity = 9.81;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Arrays
|
||||||
|
|
||||||
|
Hemos optado por hacer que los nombres de los arrays sean plurales
|
||||||
|
|
||||||
|
- names
|
||||||
|
- numbers
|
||||||
|
- countries
|
||||||
|
- languages
|
||||||
|
- skills
|
||||||
|
- fruits
|
||||||
|
- vegetables
|
||||||
|
|
||||||
|
```js
|
||||||
|
// arrays
|
||||||
|
const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
|
||||||
|
const numbers = [0, 3.14, 9.81, 37, 98.6, 100];
|
||||||
|
const countries = ["Finland", "Denmark", "Sweden", "Norway", "Iceland"];
|
||||||
|
const languages = ["Amharic", "Arabic", "English", "French", "Spanish"];
|
||||||
|
const skills = ["HTML", "CSS", "JavaScript", "React", "Python"];
|
||||||
|
const fruits = ["banana", "orange", "mango", "lemon"];
|
||||||
|
const vegetables = ["Tomato", "Potato", "Cabbage", "Onion", "Carrot"];
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Funciones
|
||||||
|
|
||||||
|
A estas alturas ya estás muy familiarizado con la declaración de funciones, la función de expresión, la función de flecha y la función anónima. En este reto tendemos a utilizar la función de flecha en lugar de otras funciones. La función flecha no sustituye a otras funciones. Además, las funciones de flecha y las declaraciones de función no son exactamente iguales. Por lo tanto, debes saber cuándo usarla y cuándo no. En otras secciones trataré la diferencia en detalle. Utilizaremos el retorno explícito en lugar del implícito si la función es de una sola línea.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// función que devuelve el nombre completo de una persona
|
||||||
|
const printFullName = (firstName, lastName) => firstName + " " + lastName;
|
||||||
|
|
||||||
|
// función que calcula el cuadrado de un número
|
||||||
|
const square = (n) => n * n;
|
||||||
|
|
||||||
|
// una función que genera colores hexa al azar
|
||||||
|
const hexaColor = () => {
|
||||||
|
const str = "0123456789abcdef";
|
||||||
|
let hexa = "#";
|
||||||
|
let index;
|
||||||
|
for (let i = 0; i < 6; i++) {
|
||||||
|
index = Math.floor(Math.random() * str.length);
|
||||||
|
hexa += str[index];
|
||||||
|
}
|
||||||
|
return hexa;
|
||||||
|
};
|
||||||
|
|
||||||
|
// una función que muestra la fecha y la hora
|
||||||
|
const showDateTime = () => {
|
||||||
|
const now = new Date();
|
||||||
|
const year = now.getFullYear();
|
||||||
|
const month = now.getMonth() + 1;
|
||||||
|
const date = now.getDate();
|
||||||
|
let hours = now.getHours();
|
||||||
|
let minutes = now.getMinutes();
|
||||||
|
if (hours < 10) {
|
||||||
|
hours = "0" + hours;
|
||||||
|
}
|
||||||
|
if (minutes < 10) {
|
||||||
|
minutes = "0" + minutes;
|
||||||
|
}
|
||||||
|
|
||||||
|
const dateMonthYear = date + "." + month + "." + year;
|
||||||
|
const time = hours + ":" + minutes;
|
||||||
|
const fullTime = dateMonthYear + " " + time;
|
||||||
|
return fullTime;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
La función `new Dat().toLocaleString()` también puede utilizarse para mostrar la fecha y hora actuales. Los métodos `toLocaleString()` toman diferentes argumentos. Puede aprender más sobre la fecha y la hora en este [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString).
|
||||||
|
|
||||||
|
#### Bucles
|
||||||
|
|
||||||
|
En estos retos cubrimos muchos tipos de bucles. El bucle regular for, el bucle while, el bucle do while, el bucle for of, el bucle forEach y el bucle for in.
|
||||||
|
|
||||||
|
Veamos cómo los utilizamos:
|
||||||
|
|
||||||
|
```js
|
||||||
|
for (let i = 0; i < n; i++) {
|
||||||
|
console.log();
|
||||||
|
}
|
||||||
|
|
||||||
|
// declaración de una variable array
|
||||||
|
const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
|
||||||
|
|
||||||
|
// iteración de un array mediante un bucle for regular
|
||||||
|
let len = names.length;
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
console.log(names[i].toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
// iteración de un array mediante for of
|
||||||
|
for (const name of names) {
|
||||||
|
console.log(name.toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
// iteración de un array mediante forEach
|
||||||
|
names.forEach((name) => name.toUpperCase());
|
||||||
|
|
||||||
|
const person = {
|
||||||
|
firstName: "Asabeneh",
|
||||||
|
lastName: "Yetayeh",
|
||||||
|
age: 250,
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
skills: [
|
||||||
|
"HTML",
|
||||||
|
"CSS",
|
||||||
|
"JavaScript",
|
||||||
|
"React",
|
||||||
|
"Node",
|
||||||
|
"MongoDB",
|
||||||
|
"Python",
|
||||||
|
"D3.js",
|
||||||
|
],
|
||||||
|
isMarried: true,
|
||||||
|
};
|
||||||
|
for (const key in person) {
|
||||||
|
console.log(key);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Objetos
|
||||||
|
|
||||||
|
Declaramos el objeto literal con _const_.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// declarando el objeto literal
|
||||||
|
const person = {
|
||||||
|
firstName: "Asabeneh",
|
||||||
|
lastName: "Yetayeh",
|
||||||
|
age: 250,
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
skills: [
|
||||||
|
"HTML",
|
||||||
|
"CSS",
|
||||||
|
"JavaScript",
|
||||||
|
"TypeScript",
|
||||||
|
"React",
|
||||||
|
"Node",
|
||||||
|
"MongoDB",
|
||||||
|
"Python",
|
||||||
|
"D3.js",
|
||||||
|
],
|
||||||
|
isMarried: true,
|
||||||
|
};
|
||||||
|
// iterar a través de las claves del objeto
|
||||||
|
for (const key in person) {
|
||||||
|
console.log(key, person[key]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Condicional
|
||||||
|
|
||||||
|
Hemos dicho if, if else, else, switch y operadores ternarios en los retos anteriores.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// sintaxis
|
||||||
|
if (condition) {
|
||||||
|
// esta parte del código se ejecuta para la condición de verdad
|
||||||
|
} else {
|
||||||
|
// esta parte del código se ejecuta para una condición falsa
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
// if else
|
||||||
|
let num = 3;
|
||||||
|
if (num > 0) {
|
||||||
|
console.log(`${num} is a positive number`);
|
||||||
|
} else {
|
||||||
|
console.log(`${num} is a negative number`);
|
||||||
|
}
|
||||||
|
// 3 is a positive number
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
// if else if else if else
|
||||||
|
|
||||||
|
let a = 0;
|
||||||
|
if (a > 0) {
|
||||||
|
console.log(`${a} is a positive number`);
|
||||||
|
} else if (a < 0) {
|
||||||
|
console.log(`${a} is a negative number`);
|
||||||
|
} else if (a == 0) {
|
||||||
|
console.log(`${a} is zero`);
|
||||||
|
} else {
|
||||||
|
console.log(`${a} is not a number`);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
// Switch Más Ejemplos
|
||||||
|
let dayUserInput = prompt("What day is today ?");
|
||||||
|
let day = dayUserInput.toLowerCase();
|
||||||
|
|
||||||
|
switch (day) {
|
||||||
|
case "monday":
|
||||||
|
console.log("Today is Monday");
|
||||||
|
break;
|
||||||
|
case "tuesday":
|
||||||
|
console.log("Today is Tuesday");
|
||||||
|
break;
|
||||||
|
case "wednesday":
|
||||||
|
console.log("Today is Wednesday");
|
||||||
|
break;
|
||||||
|
case "thursday":
|
||||||
|
console.log("Today is Thursday");
|
||||||
|
break;
|
||||||
|
case "friday":
|
||||||
|
console.log("Today is Friday");
|
||||||
|
break;
|
||||||
|
case "saturday":
|
||||||
|
console.log("Today is Saturday");
|
||||||
|
break;
|
||||||
|
case "sunday":
|
||||||
|
console.log("Today is Sunday");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
console.log("It is not a week day.");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
// ternario
|
||||||
|
|
||||||
|
let isRaining = true;
|
||||||
|
isRaining
|
||||||
|
? console.log("You need a rain coat.")
|
||||||
|
: console.log("No need for a rain coat.");
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Clases
|
||||||
|
|
||||||
|
Declaramos la clase con CamelCase que empieza con mayúscula.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// sintaxis
|
||||||
|
class ClassName {
|
||||||
|
// el código va aquí
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
// definir la clase
|
||||||
|
class Person {
|
||||||
|
constructor(firstName, lastName) {
|
||||||
|
console.log(this); // Compruebe el resultado desde aquí
|
||||||
|
this.firstName = firstName;
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Sea cual sea la guía de estilo que sigas, sé coherente. Sigue algunos paradigmas de programación y patrones de diseño. Recuerda que si no escribes tu código en cierto orden o forma, será difícil leerlo. Así que hazte un favor a ti mismo o a alguien que vaya a leer tu código escribiendo código legible.
|
||||||
|
|
||||||
|
🌕 Eres ordenado. Ahora, has aprendido a escribir un código limpio, para que cualquiera que conozca el idioma inglés pueda entender tu código.Siempre estás progresando y llevas 20 pasos en tu camino hacia la grandeza.
|
||||||
|
|
||||||
|
🎉 ¡FELICITACIONES! 🎉
|
||||||
|
|
||||||
|
[<< Día 19](../dia_19_Closures/dia_19_closures.md) | [Día 21 >>](..)
|
Loading…
Reference in new issue