No existe una regla general exacta que pueda expresarse en líneas de código, por supuesto, pero las cosas pueden aclararse una vez que comprenda qué es la complejidad ciclomática.
Como el artículo anterior indica correctamente, hay pruebas suficientes para afirmar que existe una correlación positiva entre una serie de defectos que se pueden observar en un programa de computadora y su complejidad ciclomática. Cuando lo piensa, intuitivamente, tiene mucho sentido: los humanos que escriben programas tienen capacidades limitadas para avanzar mentalmente a través de todos los flujos de ejecución, pensar en todos los invariantes, precondiciones y postcondiciones, a medida que crece la complejidad. Solo imagine el mundo antes de la programación procesal como un caso extremo. Ahora, como sabemos que no tratamos muy bien la complejidad y que nuestros programas se encuentran con errores, tiene sentido reducirla.
Entonces, ¿cómo ayudan las funciones en la reducción de la complejidad ciclomática? Puede pensar que, formalmente, no lo hacen, porque el programa pasa por los mismos cambios de estado, independientemente de si ocurren dentro de una función o dentro de un cuerpo de programa ‘principal’. En un nivel muy bajo, ¿qué son las funciones sino las regiones de memoria a las que el compilador querrá entrar y salir, verdad? Pues mal. Al extraer ciertas tareas en funciones, hace que sus clientes se preocupen solo por sus precondiciones y postcondiciones, y un conjunto reducido de estados bien definidos que la función promete producir. Puede pensar de manera informal como una ‘función invariante’. Entonces, ahora que tenemos una invariante o una ilusión, la complejidad ciclomática del programa principal se reduce efectivamente, porque parte de ella se ha movido a una función bien definida que toma entradas y las convierte previsiblemente en salidas.
- ¿Cuál es el peor código que has escrito en tu carrera? ¿Qué aprendiste de eso?
- ¿A qué distancia está la realidad virtual de una arquitectura escalable y distribuible?
- ¿Las pruebas de software son más fáciles en comparación con la codificación / desarrollo en el campo del software?
- Escriba un programa que tome una matriz de enteros y devuelva una matriz de los productos de todos los enteros, excepto en el índice. Entrada: [1, 7, 3, 4] Salida: [84, 12, 28, 21] La siguiente será la forma de cálculo: [7 * 3 * 4, 1 * 3 * 4, 1 * 7 * 4, 1 * 7 * 3] NOTA: debe hacer esto en O (n) tiempo y O (n) espacio.
- ¿Puedes convertirte en un buen programador si solo lo haces como un hobby?
Teniendo esto en cuenta, la respuesta a su pregunta es: sí, sin duda es mejor tener una función más pequeña que una función grande. ¿Dónde deben hacerse los cortes? Bueno, donde ve porciones de código que pueden identificarse correctamente como realizando una determinada tarea, tomando algunas entradas y produciendo algunas salidas sin producir directamente ningún otro efecto secundario y cambiando el estado de su programa (excepto algún estado local), estos se ven como un Buena función de candidatos. Aún mejor, si parecen ser funciones puras y sin estado, como funciones matemáticas. O, si imponen la encapsulación al abstraer cosas como el acceso y el procesamiento de datos. Como con todo, puede exagerar y hacer que su programa sea efectivamente ilegible al obligar al lector a saltar de una función a otra en caso de que sean irrazonablemente pequeños.