La pregunta sobre los valores predeterminados en general: valores de función de retorno predeterminados, valores de parámetros predeterminados, lógica predeterminada para cuando algo falta, lógica predeterminada para manejar excepciones, lógica predeterminada para manejar las condiciones de borde, etc.
Durante mucho tiempo consideré que los valores predeterminados eran algo "puro malvado", algo que "oculta la catástrofe" y resulta muy difícil de encontrar errores. Pero recientemente comencé a pensar en los valores por defecto como una especie de deuda técnica ... lo cual no es algo malo pero algo que podría proporcionar algo de "financiamiento a corto plazo" para que sobrevivamos al proyecto (cuántos de nosotros podríamos pagar comprar una casa sin sacar la hipoteca?
Cuando digo un "corto plazo", no quiero decir, "haga algo rápidamente primero y refactorícelo más tarde antes de que llegue a la producción". No, estoy hablando de confiar en valores predeterminados codificados en un software de producción. Por supuesto, podría causar algunos problemas, pero ¿qué pasaría si solo causara un solo problema en todo un año?
Una vez más, estoy hablando del software convencional "promedio" aquí (no un software para una estación de energía nuclear), el sitio web promedio o una aplicación de interfaz de usuario para el software de contabilidad, lo que significa que las vidas de las personas no están en juego, ni millones de dólares .
Una vez más, desde mi experiencia, los usuarios comerciales preferirían vivir con el software que "funciona de alguna manera", en lugar de esperar por uno perfecto. Y el uso de valores predeterminados ayuda mucho si desarrolla un software en un estilo RAD. Pero, una vez más, las sesiones de depuración más largas que he pasado se debieron a los errores introducidos por un valor predeterminado que dejó de ser "predeterminado" en el camino o porque recientemente se actualizó un pequeño subsistema y, como resultado de esta actualización, no manejar el valor predeterminado correctamente (por ejemplo, lista vacía vs nulo, o cadena nula vs cadena vacía).
Entonces mi pregunta es: ¿los valores predeterminados son buenos o malos? Y si son una deuda técnica, ¿cómo puede calcular cuánto puede pedir prestado para poder pagar los reembolsos?
Realmente agradecería cualquier aporte.
Salud.
EDITAR:
Si estoy usando los valores predeterminados como una forma de cortar las esquinas durante el desarrollo, y si el corte de las esquinas resulta en errores y problemas, ¿cuál es la metodología para recuperarse de estos problemas?
Foo()
y una llamada aFoo("bar")
, esa llamada tiende a destacarse y, por lo tanto, es más visible.new FtpService()
el que establece un puerto alternativo, se destacará (service.SetPort(12345)
).Tomemos, por ejemplo, una biblioteca que implementa el protocolo FTP. Por defecto, se espera que FTP opere en el puerto 21. Ahora estaría muy irritado si tuviera que especificar usar el puerto 21 cada vez que construya un objeto de una clase FTP aleatoria. Si necesito un puerto diferente, déjame especificar.
Los valores predeterminados están perfectamente bien cuando son valores razonables.
fuente
http://programmers.stackexchange.com:80/questions/?sort=newest&pagesize=50
en una barra de direcciones?Probablemente esté utilizando una distribución de teclado predeterminada con asignaciones de teclas predeterminadas, asignaciones de botones de mouse predeterminadas, el navegador predeterminado, escribiendo en el idioma predeterminado del sistema, iniciando desde el sistema operativo predeterminado en el cargador de arranque, menús posicionados predeterminados, esquema de color predeterminado, fuente predeterminada ancho / alto / cara / estilo, juego de caracteres por defecto, resolución de monitor por defecto, por defecto ... ya tienes la idea.
Pero con toda seriedad, creo que la preocupación que tienes no es con los valores predeterminados sino con otra cosa. El comportamiento predeterminado no oculta errores inherentemente. La mayoría de las veces su código se ejecutará en condiciones comunes de todos modos, independientemente de si establece o no los valores predeterminados. Los casos extremos no controlados son cosas que querrá asegurarse de evitar independientemente (presumiblemente a través de pruebas adecuadas y adecuadas), para cuando se cambian los valores predeterminados o ocurre un escenario poco común.
Además, el manejo de excepciones "general" es posiblemente un defecto de diseño en lugar de cualquier cosa que se pueda llamar "predeterminado".
fuente
TODO: or TEMP:
en la lista de tareas. Si alguna vez estoy cortando una esquina por el bien del desarrollo, trato de ser extremadamente cuidadoso para asegurarme de poner un TODO allí; luego, de vez en cuando, haré un "encontrar todo" para regresar y asegurarme nada de eso entra en ninguna construcción importante.Los valores predeterminados se deben usar cuando evitan que el usuario o desarrollador realice tareas repetitivas. Nunca deben usarse para enmascarar errores o excepciones. No es una mala práctica usarlos para evitar errores, pero solo mientras la prevención no oculte que algo malo está sucediendo. Los valores predeterminados son una herramienta como todo lo demás. Si se usan correctamente, pueden ahorrarle mucho dolor de cabeza y tiempo. Si se usan incorrectamente, pueden derribar toda la casa.
fuente
La causa raíz de los problemas que usted cita no son los valores predeterminados per se, sino los problemas de integración debido a cambios en los contratos de interfaz, malentendidos de interpretación y / o suposiciones inválidas. Básicamente, todos estos (ejemplos específicos) parecen ser el resultado de una comunicación inadecuada , entre el cliente y el desarrollador, o entre diferentes desarrolladores / equipos. Es justo que estos problemas puedan manifestarse como valores predeterminados no válidos, pero también en innumerables formas.
Maneje la causa raíz, no el síntoma.
Y tenga en cuenta también que, como otros han señalado con excelentes ejemplos, los valores predeterminados, cuando se usan con prudencia, pueden facilitar significativamente la vida de los usuarios. Y ese es en última instancia nuestro objetivo, ¿no?
fuente
Los valores predeterminados que no forman parte del protocolo / convención de comunicación son malos. Al ser "no una parte" quiero decir que no están documentados donde el protocolo es estricto, o simplemente no se espera, donde el protocolo está suelto.
Si el valor predeterminado está documentado / esperado, aún puede ser malo, pero también puede salvar vidas. Depende del área de dominio. Es muy frecuente que puedan ser muy peligrosos (por ejemplo, la dosis de medicamento predeterminada, el piso del elevador predeterminado, la dirección de movimiento predeterminada del automóvil), y a veces puede ser peligroso no tenerlos (por ejemplo, la dirección de movimiento predeterminada del automóvil, el tiempo predeterminado de reunión).
fuente