¿Hay un nombre para el problema no dado / nulo / vacío? [cerrado]

8

Trabajo con código, donde los datos se almacenan / intercambian en estructuras Hashtable / Dictionary / Associative-Array, como esta

{
   'alpha': None,
   'bravo': '',
   # 'charlie' is not given
}

no hay mucha estandarización, qué campo se 'da', y cuando se da, si se puede dar como Ninguno / Nulo / Nulo o una cadena vacía. Como resultado, el código está plagado de verificaciones if hasattr(obj, 'alpha')y fallos predeterminados.

¿Existe un nombre o un término de argot para este tipo de (patrón) anti-patrón?

ACTUALIZAR:

parece que actualmente no hay nombre, así que me gustaría escuchar sugerencias. Actualmente tenemos estos:

  • Horda incorpórea (créditos a psr)
keppla
fuente
55
No lo llamaría un antipatrón. En el mundo real, hay situaciones en las que falta algo y situaciones en las que no. Si los valores predeterminados tienen sentido, está bien, pero ¿qué pasa si realmente es nulo / inexistente? Algunas personas no tienen un segundo nombre, por ejemplo. ¿Cómo representaría eso? Es por eso que creo que es más una búsqueda de un mejor modelo de programación para este tipo de escenarios. Al igual que el patrón de objeto nulo, la mónada quizás, o cualquier otra cosa que exista.
Ionuț G. Stan
Tenga en cuenta que una cadena vacía es un miembro perfectamente válido del conjunto de todas las cadenas y es muy diferente de no tener una cadena. Es como la diferencia entre las 2 oraciones: "Tengo 0 dólares". y "No te diré cuántos dólares tengo".
Ingo
Python tiene un diccionario predeterminado que le permite evitar estas comprobaciones. Haskell tiene mónadas que resuelven todos los problemas de la humanidad.
Trabajo
@Ionut: sí, hay situaciones en las que 'algo falta' está bien, pero en mi caso, creo que es más el caso que uno prefiere hacer que 100 receptores sean tolerantes a todas las posibles tonterías que hacer que 1 o 2 remitentes obedezcan un formato El segundo nombre (o generalmente cada parte de una dirección) es, en mi opinión, un caso clásico donde '' está perfectamente bien.
keppla
@Ingo: sí, pero el problema es que en mi base de código, estos 'significados' se ignoran. Las diferentes partes de la aplicación pueden responder todas para el mismo Orden: {'posiciones': Ninguna}, {'posiciones': []} o simplemente {}.
keppla

Respuestas:

6

No creo que haya tal nombre (lo busqué, pero, por supuesto, ¿cómo puedes encontrar la falta de un nombre?)

Sugiero el nombre "Horda incorpórea", aunque lo aplicaría a la colección completa de objetos nulos o degenerados: colecciones de tamaño cero, nulas, indefinidas, nada, Ninguna, NAN (posiblemente sea un tipo de caso diferente), DBNull, vacío, cadena vacía (posiblemente un caso especial de colección vacía), entradas de diccionario faltantes, etc.

Y no lo llamaría un anti-patrón, per se, sino como un problema en el desarrollo de software, especialmente en el caso en que su entorno de programación requiera que escriba un código separado para muchos de esos casos.

Disculpas por una respuesta bastante no informativa, pero creo que es lo mejor que se puede hacer. Además, si el mundo adopta un nombre debido a su pregunta, podría convertirse en una respuesta correcta.

psr
fuente
Me encanta la "Horda incorpórea".
Sean McMillan
Suena como 'Magic the Gathering'. Me gusta. +1.
keppla
0

En F # esto se proporciona a través de un Tipo de opción (de manera similar a los idiomas anteriores de la misma familia). He usado el mismo concepto en un proyecto de C # donde tengo una regla que trato de no devolver nunca null de una función, pero devuelvo el Option<T>de ese tipo de que existe la posibilidad de un valor None. De esa manera, el código de llamada sabe que tiene que lidiar con esa posibilidad en el valor de retorno.

Preferiría tener tipos de referencia no anulables, al igual que ahora tenemos tipos de valores anulables, pero esa es otra historia.

Scott Whitlock
fuente
0

En JavaScript, esto se conoce como undefinedun valor centinela único, distinto de null.

Se obtiene undefinedevaluando la variable global undefined, o una propiedad de un objeto, que no está definida o evaluando una declaración, que no devuelve un valor, como llamadas a funciones, que no devuelve nada, o un bloque o una declaración de variable (aunque esas dos no son expresiones válidas, por lo que solo lo encontrará en un REPL de JavaScript).

Cuando el undefinedvalor es forzado a ser, Objectse convierte null, pero no lo es null.

Aquí hay una pequeña ilustración:

var a = [1, 2, 3];//undefined
a[0];//1
a[4];//undefined

var o = { foo: "123" };//undefined
o.foo;//"123";
o.bar;//undefined

function bar() { return null; };//undefined
bar();//null
function foo() { /*just an empty block*/};//undefined
foo();//undefined

typeof undefined;//"undefined"
typeof null;//"object"
null == undefined;//true - that is because undefined is converted to an object for comparison and thus yields null
null === undefined;//false - because they are not the same

Creo que es razonable llamar indefinidos los valores (en contraste con los valores definidos como null), si esa es su pregunta. El uso de un valor centinela único para comunicar la ausencia de un valor definido es una solución viable para lenguajes dinámicos, aunque a menudo se entiende mal.

back2dos
fuente