|
| 1 | +<div align="center"> |
| 2 | + <h1> 30 Días de JavaScript: Escribiendo Códigos Limpios</h1> |
| 3 | + <a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/"> |
| 4 | + <img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social"> |
| 5 | + </a> |
| 6 | + <a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh"> |
| 7 | + <img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social"> |
| 8 | + </a> |
| 9 | + |
| 10 | +<sub>Autor: |
| 11 | +<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br> |
| 12 | +<small> Enero, 2020</small> |
| 13 | +</sub> |
| 14 | + |
| 15 | +</div> |
| 16 | + |
| 17 | +[<< Día 19](../dia_19_Closures/dia_19_closures.md) | [Día 21 >>](..) |
| 18 | + |
| 19 | + |
| 20 | + |
| 21 | +- [Día 20](#día-20) |
| 22 | + - [Escribiendo código limpio](#escribiendo-código-limpio) |
| 23 | + - [Guía de estilo JavaScript](#guía-de-estilo-javascript) |
| 24 | + - [¿Por qué necesitamos una guía de estilo?](#¿por-qué-necesitamos-una-guía-de-estilo) |
| 25 | + - [Guía de estilo JavaScript de Airbnb](#guía-de-estilo-javascript-de-airbnb) |
| 26 | + - [Guía de estilo estándar de JavaScript](#guía-de-estilo-estándar-de-javascript) |
| 27 | + - [Guía de estilo JavaScript de Google](#guía-de-estilo-javascript-de-google) |
| 28 | + - [Convenciones de codificación en JavaScript](#convenciones-de-codificación-en-javascript) |
| 29 | + - [Convenciones usadas en 30DíasDeJavaScript](#convenciones-usadas-en-30díasdejavascript) |
| 30 | + - [Variables](#variables) |
| 31 | + - [Arrays](#arrays) |
| 32 | + - [Funciones](#funciones) |
| 33 | + - [Bucles](#bucles) |
| 34 | + - [Objetos](#objetos) |
| 35 | + - [Condicional](#condicional) |
| 36 | + - [Clases](#clases) |
| 37 | + |
| 38 | +# Día 20 |
| 39 | + |
| 40 | +## Escribiendo código limpio |
| 41 | + |
| 42 | +### Guía de estilo JavaScript |
| 43 | + |
| 44 | +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. |
| 45 | + |
| 46 | +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. |
| 47 | + |
| 48 | +### ¿Por qué necesitamos una guía de estilo? |
| 49 | + |
| 50 | +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. |
| 51 | + |
| 52 | +Puede desarrollar sus propias directrices y convenciones o también puede adaptar directrices bien desarrolladas. Conozcamos las guías más comunes. |
| 53 | + |
| 54 | +Guías de estilo de JavaScript más comunes |
| 55 | + |
| 56 | +- Guía de estilo JavaScript de Airbnb |
| 57 | +- Guía de estilo estándar de JavaScript |
| 58 | +- Guía de estilo JavaScript de Google |
| 59 | + |
| 60 | +#### Guía de estilo JavaScript de Airbnb |
| 61 | + |
| 62 | +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. |
| 63 | + |
| 64 | +#### Guía de estilo estándar de JavaScript |
| 65 | + |
| 66 | +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/). |
| 67 | + |
| 68 | +#### Guía de estilo JavaScript de Google |
| 69 | + |
| 70 | +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). |
| 71 | + |
| 72 | +### Convenciones de codificación en JavaScript |
| 73 | + |
| 74 | +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. |
| 75 | + |
| 76 | +Las convenciones de codificación ayudan: |
| 77 | + |
| 78 | +- para escribir un código limpio |
| 79 | +- para mejorar la legibilidad del código |
| 80 | +- para mejorar la reutilización y el mantenimiento del código |
| 81 | + |
| 82 | +Las convenciones de codificación incluyen |
| 83 | + |
| 84 | +- Reglas de declaración y denominación de las variables |
| 85 | +- Reglas de declaración y denominación de las funciones |
| 86 | +- Reglas para el uso de espacios en blanco, sangría y comentarios |
| 87 | +- Prácticas y principios de programación |
| 88 | + |
| 89 | +#### Convenciones usadas en 30DíasDeJavaScript |
| 90 | + |
| 91 | +En este reto seguimos la convención habitual de JavaScript pero he añadido también mi preferencia de escritura. |
| 92 | + |
| 93 | +- Utilizamos camelCase para las variables y las funciones. |
| 94 | +- Todos los nombres de las variables comienzan con una letra. |
| 95 | +- 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. |
| 96 | +- También hemos eliminado el punto y coma de nuestro código, pero es una cuestión de preferencia personal. |
| 97 | +- Espacio alrededor de los operadores aritméticos, operadores de asignación y después de la coma |
| 98 | +- Función de flecha en lugar de declaración de función |
| 99 | +- Retorno explícito en lugar de implícito si la función es de una línea |
| 100 | +- No hay coma final en el último valor de un objeto |
| 101 | +- Preferimos este +=, -=, \*= /=, \*\*= en lugar de la versión más larga |
| 102 | +- Cuando usamos console.log() es bueno imprimir con una cadena de etiquetas para identificar de dónde viene la consola |
| 103 | + |
| 104 | +#### Variables |
| 105 | + |
| 106 | +```js |
| 107 | +let firstName = "Asabeneh"; |
| 108 | +let lastName = "Yetayeh"; |
| 109 | +let country = "Finland"; |
| 110 | +let city = "Helsinki"; |
| 111 | + |
| 112 | +const PI = Math.PI; |
| 113 | +const gravity = 9.81; |
| 114 | +``` |
| 115 | + |
| 116 | +#### Arrays |
| 117 | + |
| 118 | +Hemos optado por hacer que los nombres de los arrays sean plurales |
| 119 | + |
| 120 | +- names |
| 121 | +- numbers |
| 122 | +- countries |
| 123 | +- languages |
| 124 | +- skills |
| 125 | +- fruits |
| 126 | +- vegetables |
| 127 | + |
| 128 | +```js |
| 129 | +// arrays |
| 130 | +const names = ["Asabeneh", "Mathias", "Elias", "Brook"]; |
| 131 | +const numbers = [0, 3.14, 9.81, 37, 98.6, 100]; |
| 132 | +const countries = ["Finland", "Denmark", "Sweden", "Norway", "Iceland"]; |
| 133 | +const languages = ["Amharic", "Arabic", "English", "French", "Spanish"]; |
| 134 | +const skills = ["HTML", "CSS", "JavaScript", "React", "Python"]; |
| 135 | +const fruits = ["banana", "orange", "mango", "lemon"]; |
| 136 | +const vegetables = ["Tomato", "Potato", "Cabbage", "Onion", "Carrot"]; |
| 137 | +``` |
| 138 | + |
| 139 | +#### Funciones |
| 140 | + |
| 141 | +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. |
| 142 | + |
| 143 | +```js |
| 144 | +// función que devuelve el nombre completo de una persona |
| 145 | +const printFullName = (firstName, lastName) => firstName + " " + lastName; |
| 146 | + |
| 147 | +// función que calcula el cuadrado de un número |
| 148 | +const square = (n) => n * n; |
| 149 | + |
| 150 | +// una función que genera colores hexa al azar |
| 151 | +const hexaColor = () => { |
| 152 | + const str = "0123456789abcdef"; |
| 153 | + let hexa = "#"; |
| 154 | + let index; |
| 155 | + for (let i = 0; i < 6; i++) { |
| 156 | + index = Math.floor(Math.random() * str.length); |
| 157 | + hexa += str[index]; |
| 158 | + } |
| 159 | + return hexa; |
| 160 | +}; |
| 161 | + |
| 162 | +// una función que muestra la fecha y la hora |
| 163 | +const showDateTime = () => { |
| 164 | + const now = new Date(); |
| 165 | + const year = now.getFullYear(); |
| 166 | + const month = now.getMonth() + 1; |
| 167 | + const date = now.getDate(); |
| 168 | + let hours = now.getHours(); |
| 169 | + let minutes = now.getMinutes(); |
| 170 | + if (hours < 10) { |
| 171 | + hours = "0" + hours; |
| 172 | + } |
| 173 | + if (minutes < 10) { |
| 174 | + minutes = "0" + minutes; |
| 175 | + } |
| 176 | + |
| 177 | + const dateMonthYear = date + "." + month + "." + year; |
| 178 | + const time = hours + ":" + minutes; |
| 179 | + const fullTime = dateMonthYear + " " + time; |
| 180 | + return fullTime; |
| 181 | +}; |
| 182 | +``` |
| 183 | + |
| 184 | +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). |
| 185 | + |
| 186 | +#### Bucles |
| 187 | + |
| 188 | +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. |
| 189 | + |
| 190 | +Veamos cómo los utilizamos: |
| 191 | + |
| 192 | +```js |
| 193 | +for (let i = 0; i < n; i++) { |
| 194 | + console.log(); |
| 195 | +} |
| 196 | + |
| 197 | +// declaración de una variable array |
| 198 | +const names = ["Asabeneh", "Mathias", "Elias", "Brook"]; |
| 199 | + |
| 200 | +// iteración de un array mediante un bucle for regular |
| 201 | +let len = names.length; |
| 202 | +for (let i = 0; i < len; i++) { |
| 203 | + console.log(names[i].toUpperCase()); |
| 204 | +} |
| 205 | + |
| 206 | +// iteración de un array mediante for of |
| 207 | +for (const name of names) { |
| 208 | + console.log(name.toUpperCase()); |
| 209 | +} |
| 210 | + |
| 211 | +// iteración de un array mediante forEach |
| 212 | +names.forEach((name) => name.toUpperCase()); |
| 213 | + |
| 214 | +const person = { |
| 215 | + firstName: "Asabeneh", |
| 216 | + lastName: "Yetayeh", |
| 217 | + age: 250, |
| 218 | + country: "Finland", |
| 219 | + city: "Helsinki", |
| 220 | + skills: [ |
| 221 | + "HTML", |
| 222 | + "CSS", |
| 223 | + "JavaScript", |
| 224 | + "React", |
| 225 | + "Node", |
| 226 | + "MongoDB", |
| 227 | + "Python", |
| 228 | + "D3.js", |
| 229 | + ], |
| 230 | + isMarried: true, |
| 231 | +}; |
| 232 | +for (const key in person) { |
| 233 | + console.log(key); |
| 234 | +} |
| 235 | +``` |
| 236 | + |
| 237 | +#### Objetos |
| 238 | + |
| 239 | +Declaramos el objeto literal con _const_. |
| 240 | + |
| 241 | +```js |
| 242 | +// declarando el objeto literal |
| 243 | +const person = { |
| 244 | + firstName: "Asabeneh", |
| 245 | + lastName: "Yetayeh", |
| 246 | + age: 250, |
| 247 | + country: "Finland", |
| 248 | + city: "Helsinki", |
| 249 | + skills: [ |
| 250 | + "HTML", |
| 251 | + "CSS", |
| 252 | + "JavaScript", |
| 253 | + "TypeScript", |
| 254 | + "React", |
| 255 | + "Node", |
| 256 | + "MongoDB", |
| 257 | + "Python", |
| 258 | + "D3.js", |
| 259 | + ], |
| 260 | + isMarried: true, |
| 261 | +}; |
| 262 | +// iterar a través de las claves del objeto |
| 263 | +for (const key in person) { |
| 264 | + console.log(key, person[key]); |
| 265 | +} |
| 266 | +``` |
| 267 | + |
| 268 | +#### Condicional |
| 269 | + |
| 270 | +Hemos dicho if, if else, else, switch y operadores ternarios en los retos anteriores. |
| 271 | + |
| 272 | +```js |
| 273 | +// sintaxis |
| 274 | +if (condition) { |
| 275 | + // esta parte del código se ejecuta para la condición de verdad |
| 276 | +} else { |
| 277 | + // esta parte del código se ejecuta para una condición falsa |
| 278 | +} |
| 279 | +``` |
| 280 | + |
| 281 | +```js |
| 282 | +// if else |
| 283 | +let num = 3; |
| 284 | +if (num > 0) { |
| 285 | + console.log(`${num} is a positive number`); |
| 286 | +} else { |
| 287 | + console.log(`${num} is a negative number`); |
| 288 | +} |
| 289 | +// 3 is a positive number |
| 290 | +``` |
| 291 | + |
| 292 | +```js |
| 293 | +// if else if else if else |
| 294 | + |
| 295 | +let a = 0; |
| 296 | +if (a > 0) { |
| 297 | + console.log(`${a} is a positive number`); |
| 298 | +} else if (a < 0) { |
| 299 | + console.log(`${a} is a negative number`); |
| 300 | +} else if (a == 0) { |
| 301 | + console.log(`${a} is zero`); |
| 302 | +} else { |
| 303 | + console.log(`${a} is not a number`); |
| 304 | +} |
| 305 | +``` |
| 306 | + |
| 307 | +```js |
| 308 | +// Switch Más Ejemplos |
| 309 | +let dayUserInput = prompt("What day is today ?"); |
| 310 | +let day = dayUserInput.toLowerCase(); |
| 311 | + |
| 312 | +switch (day) { |
| 313 | + case "monday": |
| 314 | + console.log("Today is Monday"); |
| 315 | + break; |
| 316 | + case "tuesday": |
| 317 | + console.log("Today is Tuesday"); |
| 318 | + break; |
| 319 | + case "wednesday": |
| 320 | + console.log("Today is Wednesday"); |
| 321 | + break; |
| 322 | + case "thursday": |
| 323 | + console.log("Today is Thursday"); |
| 324 | + break; |
| 325 | + case "friday": |
| 326 | + console.log("Today is Friday"); |
| 327 | + break; |
| 328 | + case "saturday": |
| 329 | + console.log("Today is Saturday"); |
| 330 | + break; |
| 331 | + case "sunday": |
| 332 | + console.log("Today is Sunday"); |
| 333 | + break; |
| 334 | + default: |
| 335 | + console.log("It is not a week day."); |
| 336 | +} |
| 337 | +``` |
| 338 | + |
| 339 | +```js |
| 340 | +// ternario |
| 341 | + |
| 342 | +let isRaining = true; |
| 343 | +isRaining |
| 344 | + ? console.log("You need a rain coat.") |
| 345 | + : console.log("No need for a rain coat."); |
| 346 | +``` |
| 347 | + |
| 348 | +#### Clases |
| 349 | + |
| 350 | +Declaramos la clase con CamelCase que empieza con mayúscula. |
| 351 | + |
| 352 | +```js |
| 353 | +// sintaxis |
| 354 | +class ClassName { |
| 355 | + // el código va aquí |
| 356 | +} |
| 357 | +``` |
| 358 | + |
| 359 | +```js |
| 360 | +// definir la clase |
| 361 | +class Person { |
| 362 | + constructor(firstName, lastName) { |
| 363 | + console.log(this); // Compruebe el resultado desde aquí |
| 364 | + this.firstName = firstName; |
| 365 | + this.lastName = lastName; |
| 366 | + } |
| 367 | +} |
| 368 | +``` |
| 369 | + |
| 370 | +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. |
| 371 | + |
| 372 | +🌕 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. |
| 373 | + |
| 374 | +🎉 ¡FELICITACIONES! 🎉 |
| 375 | + |
| 376 | +[<< Día 19](../dia_19_Closures/dia_19_closures.md) | [Día 21 >>](..) |
0 commit comments