¿Qué hace que algunos códigos sean difíciles de leer y otros fáciles de leer?

Es difícil de decir sin más contexto, como el lenguaje de elección. Compartiré con ustedes algunos estilos de código que he experimentado (o sufrido) personalmente:

1. inconsistencia

Algunas personas son muy estrictas con las pestañas y solicitan que todos sigan el mismo estilo. Siento que mientras sea consistente, es aceptable. Sin embargo, tener múltiples estilos diferentes presentes en el mismo archivo, o el mismo grupo de fallas, hace que sea realmente doloroso leerlo.

2. Mezclando lógica positiva y negativa

Nuevamente, la consistencia es la clave. A veces, tanto la lógica positiva como la negativa tienen sentido, solo tienes que elegir una. Verifique si hay un puntero nulo y salga de la función, o verifique si hay un puntero no nulo y realice la tarea. Si estos códigos están cerca, elija uno y manténgalo.

3. Sea profesional sobre los nombres

He leído código que contiene nombres de variables y funciones que son nombres de celebridades, frutas, títulos de películas, razas de perros, etc. Y no, el proyecto no tiene nada que ver con todo esto. Estos nombres pueden parecer interesantes al principio, pero resisten el impulso de hacerlo. No todos comparten los mismos pasatiempos, y cuando estoy depurando a las 2 de la mañana, no me divierte.

4. Capas anidadas, anidadas, anidadas, desagradables

Sí, cuando su anidamiento alcanza el 3er nivel, es desagradable. Use funciones, use la instrucción switch en lugar de múltiples if-else, use macro, vuelva a visitar su lógica, etc. Pero si tiene suficientes capas para que una declaración comience en el medio de la pantalla, es demasiado.

5. El nombre de la función debe reflejar lo que realmente hace

Las funciones no siempre son necesarias, es posible escribir todo su proyecto en la función “principal”. Pero existen funciones para dividir lógicamente las cosas para que el programador pueda entenderlas mejor. Tener una función que hace más de lo que anuncia anula el propósito.

Por ejemplo, si tiene una función llamada “tokenizeString”, y la función solo debe tokenizar la cadena de entrada. No debe cambiar la cadena de minúsculas a mayúsculas, aunque el resultado de tokenizeString se utiliza para realizar una búsqueda que no distingue entre mayúsculas y minúsculas más adelante.

6. Mayúsculas y minúsculas

Ok, este es personal. Estaba trabajando en una aplicación multiproceso cuando 2 nombres de funciones difieren en una sola “L”, donde la “L” mayúscula se refiere a una función que pasa el mensaje del subproceso de trabajo, mientras que la pequeña “l” se refiere a una función que hace funciona cuando se recibe el mensaje.

alguna función L ();
somefunctionl ();

El error surge cuando una función de trabajo llama erróneamente a somefunctionl (), lo que produce bloqueos aleatorios debido a problemas de subprocesos múltiples. El error me tomó 3 días para localizarlo, y no hace falta decir que no estaba muy feliz cuando finalmente encontré la causa raíz.

Si usa marcos comunes, vea si los desarrolladores proporcionan un documento de estándares de codificación. Muchos idiomas también tienen uno que, al menos, es mantenido por un comité voluntario de desarrolladores que usan el idioma.

Los estándares de formato de código intentan tomar decisiones estilísticas sobre cómo el código se escribe en blanco y negro como sea posible (es decir, no hay lugar para malas interpretaciones).

WordPress tiene una colección muy completa de documentos de estándares de codificación. Incluso si no usa esos idiomas o incluso WordPress, le sugiero que lo lea. Es un gran ejemplo de cómo se ve un buen documento de estándares.

Hay uno para cada uno de HTML, CSS, PHP y JavaScript.

Estándares de codificación HTML

Estándares de codificación CSS

Estándares de codificación de JavaScript

Estándares de codificación PHP

Enlaces de bonificación:

Estándares de documentación de PHP

Estándares de documentación de JavaScript

escuché esta respuesta cuando estaba aprendiendo LISP: su código no NECESITA comentarios. Los comentarios están ahí para que la lectura de su código sea más rápida y eficiente, pero no deberían ser la mayor parte de su documentación. Eso puede no tener mucho sentido porque ¿qué más vas a utilizar para documentar tu código?

La respuesta simple es que su código debería documentarse de alguna manera. Buenas practicas:

Asegúrese de que su estructuración tenga sentido. Archivos nombrados como lo que hacen, clases / interfaces / nodos llamados como lo que son, funciones bien distribuidas.

Intenta mantener las cosas a salvo del estado. Evite las funciones con demasiados efectos secundarios que no están marcados. En otras palabras, sus funciones no deberían tomar decisiones para el usuario; si el usuario desea cambiar esa variable, lo harán (aunque hacer que las funciones auxiliares cambien un gran número de variables no es una mala idea. Usted entiende la imagen).

El formateo debe tener sentido. Tengo la mala costumbre de poner todo lo posible en una línea. No hagas eso. La única excusa está en el código Python, obviamente.

No hagas que nada haga más de lo necesario: especialízalo todo.

Finalmente, mira tu código e intenta pensar como un idiota. Busca errores tontos.

Bueno, en Basic algo como

IMPRIMA “¡Hola, mundo!”

Eso sería simple de leer. Pero el mismo código en algunos idiomas esotéricos:

Se eleva, las espuelas, las lluvias. La incontinencia. Mario gruñe (enfermeras, naturalezas, reglas …) reintenta sensiblemente el objetivo. Los costos de las empresas agrícolas por cuerdas sueltas. deslumbramiento. Futuros atados, temibles, más gruñidos de tumores habituales con atuendos atonales que intentan usar monedas en el hombro. Prueba una gran lujuria. Aturde aturdidor subgrupos de carriles de gramo. Carretera aseguradora de Draftee: embotado, puntal más soleado. Panteísmo de confianza: grupos de ganancia artística (genios, pan) risas, tattles, cerca. ¿Cintas de búfer? ¡Títere de diatomeas inactivo! ¡Remitan la gota de bocio! Indudablemente, las alohas con punta rasgada desgastarán las compuertas de las colas de ‘antenas’ de las pandillas; ¡el escudete termina! Halo Gawkier! Entra absurdo descansado perdedor cerveza tipos patán. Cortina vaga por el lazo vertedero lupus truco. Osos tortuosos animan la garra. Todo el tiempo original de la torte. Rehace los zancos del zanco. Centauros puros; Estrellas urgentes; Usureros (diluidos); Narices; Huesos; Niveladoras de sonar de bergantín; Tejidos de utensilios; Lazies. Hileras veterinarias de incendios provocados. Atlas gruñó: “Pates, slues, matorrales sulfúricos. , remolques, rep… ¡injusto! ¡Inmediatos! “El trineo descansó hasta que el restaurante falló. Fortaleza de los erguidos Sangría del introEuros entra en el huevo. Tensiones furiosas. Torso largo. El torso alargado gana retrasos crueles. Ingeniero:” ¡Borra el bolso – une ratificación! ” burros sin vender, etiquetas más seguras y rápidas salientes TIBIA TAPETAS RECARGADAS INODOROS sanción festers corridas editar epílogos. ! Los prestamistas zancudas bajan el atolón de perlas, arriesgando las puntas de los sombreros. Recupera a las niñeras. Epístolas de toga – manteca de cerdo. (El monedero del paginador se pone almas.) Título de globo un curio ritos contratados arrojar espuma cargada grasa puntal revoluciones árticas a los holgazanes indefensos corteza zancos región tierra GERMICIDES SULTANA GUTS emplazamiento branquial lensnice espuelas espuelas aspHoles con guantes! Lunares! (¡Llagas!) ¡Higienistas! Cicatrices! (¡Culos!) Huele hechizos raros. Los cubos cantan instantáneamente en parse goodies.Rosin. Acres de sisal inútiles. Slope dijo. LABORATORIO DE PASTA MALENESS. “Vid de enfermería” sonó analfabetos (frijoles). La resina agria, los insultos bragueros, reglas clavadas, atlas helicoidales. Remodelación de los aguijones de las rentas de mar. Orbe brillante sin brillo (ídolo tonto). Claridad disuelve sen. Vagabundos salteados; endrinas realizadas gelds.Alter post radial labio seccionando las encías.Saint Towellings. Más grandes eones teléfono stolid char, amigo! Barcos Dean abandonó, listas, atunes, terrarios – unidos, trazados. Desnudo pagoda careens.

Ehm, si. Yo tampoco entiendo eso. ¿Tanto código? Bueno, está escrito en Beatnik – Esolang y, por lo tanto, no es el peor ejemplo de código complejo.

Pero ambos ejemplos muestran cuándo el código es fácil o no. El código simple es generalmente corto y va al grano. El código complejo generalmente es largo con un uso poco claro de palabras clave y construcciones complejas.

El código de otra persona siempre es difícil de leer. Incluye tu propio código de hace varios meses 🙂

Para que el código sea más fácil de leer:

  • Sea explícito y manténgalo simple
  • Sigue el principio de la menor sorpresa: el código debe hacer lo que piensas que hace
  • Evite el ruido visual, mantenga el código ordenado y bien formateado
  • Nombra las cosas correctamente
  • Evite la anidación profunda y mantenga las funciones pequeñas
  • Agregue documentación / comentarios si está haciendo algo que no es estándar / obvio. Documentar funciones públicas

Los programadores en general se sienten así.

Cuando estás en la zona y tienes todas tus clases y funciones en tu cabeza, no tiene sentido comentar que esta clase vacía es un guardián del lugar para esta dependencia para una característica que quizás quieras algún día.

Pero al día siguiente estará tan confundido sobre por qué necesitaría importar lo que sea y por qué necesitaba multiplicar su salida con la raíz cuadrada de pi. Especialmente desde ahora no se está compilando en absoluto. Divertido.

Además de ese escenario hipotético aleatorio, es un buen hábito. Dicen que en unas pocas semanas ni siquiera podrás entender tu propio código. Dicho esto, mira el código de otras personas y presta atención a sus comentarios. Por lo general, te ayudará a entender lo que están haciendo a simple vista en lugar de intentar ejecutar el código en tu cabeza 😉