Durante muchos años, usé un código como este: SEX_CHOICE = {‘male’: 1, ‘female’: 0} // regla mnemónica. ¿Cómo debería reescribirlo en un estilo más tolerante?

No es una cuestión de tolerancia. Se trata de lo que debe hacer su aplicación.

¿Por qué te importa el sexo? ¿Está implementando alguna ley que distingue al hombre de la mujer? Si es así, usted hace cualquier ley aplicable en su estado / país / etc. dice.

¿Es un sitio de citas y estás buscando unir a los usuarios con su presentación de género? Si es así, debe encuestar a sus usuarios y averiguar qué categorías de cosas están buscando. Es posible que algunos sitios solo deseen unir hombres (mujeres asignados al nacer) y mujeres; otros podrían tener usuarios de mentalidad más amplia y desear una gama más amplia.

Si este es un programa de fidelización de clientes para una tienda … lo más probable es que necesite eliminar el campo de “género” por completo porque le dará datos malos. En lugar de decir: “Este usuario es hombre y, por lo tanto, no necesita cupones para tampones”, use algo más inteligente para inferir de su comportamiento. Quizás un usuario masculino compre tampones para un cónyuge; Tal vez este macho tiene períodos. Tal vez este usuario marcado con una F tuvo una histerectomía hace un tiempo y realmente quisiera que dejaras de recordárselo. Envíeles anuncios de tampones si han comprado tampones recientemente y se van a la mierda.

Apuesto a que encontrarás que no es información que realmente necesitas, y solo la estás recopilando porque era una forma de identificación realmente tosca en el siglo XIX. Si lo necesita, pregunte por qué lo necesita, y eso le dirá mucho más acerca de la representación adecuada para los fines a los que lo solicitó.

(Y le garantizo que emparejarlo con enteros le dará un código malo. Este tipo de cosas conducen a un código que pasa en la fecha o el número de procesadores o algo no relacionado porque todos son solo números, y nadie se da cuenta hasta que el sistema se está ejecutando y arruinando su base de datos. Cree tipos y deje que el compilador lo haga cumplir, antes de implementarlo).

Primero, considere una enumeración, no binaria. Ninguno de los géneros que ya tenía era primero, segundo o cero. Tampoco es que estés haciendo matemáticas con el género. ¿Qué es MALE + 1?

Esto no depende de ti, esto siempre me ha frustrado en toda la industria. Tampoco estamos sufriendo lo suficiente por el espacio de almacenamiento, que {MALE: “MALE”, FEMALE: “FEMALE”} no podría almacenarse.

Una vez que haya hecho eso, el resto es simple. Usa tus constantes. Si necesita agregar más, agregue más. Deje de esperar el encendido / apagado binario donde el dominio de datos no se asigna 1: 1 al concepto de encendido y apagado (o sí y no). El hecho de que solo haya dos opciones en este momento, no significa que no habrá más más adelante. En serio, solo mirando el género, incluso en los viejos tiempos, muchas personas le permitieron optar por no proporcionarlo. De modo que hay tres estados diferentes, que muchas personas usan nulo, pero esa es una idea terrible también.

En cuanto a su producto:

Si encuentra la necesidad de mejorar la mensajería, para mejorar la experiencia del usuario, hágalo, en lugar de complicar los datos.

“Esta es una aplicación médica; Para evitar consejos inexactos y garantizar su seguridad, elija el género que mejor describa su cuerpo físico. Si está recibiendo terapia de reemplazo hormonal, elija el género que coincida con las hormonas que está recibiendo. Habrá preguntas de seguimiento para garantizar su bienestar “.

O cambie el etiquetado, para cambiar el contexto:

“Quiero que mis recomendaciones de películas predeterminadas sean:”

  • Entrañable
  • Lleno de acción
  • Romance
  • Comedia
  • Fantástico
  • Sangriento

Nada de eso es realmente de género. Para empezar, puede usar el género como parte de una suposición, pero solo preguntar desde dónde les gustaría comenzar es aún más útil para ellos y para usted.

Usé SHA-1 como ejemplo:

hombre = 030ef4a52619b493d3cc75d8034e3df378dae231
hembra = 96a1a08dcded48b7e695aed7c577dc04c982a4f7
otro = d0941e68da8f38151ff86a61fc59f7c5cf9fcaa2
indeciso = 8474d86cfaf2167914c8a20aee3a03f40abbeb1f

Lo que he hecho aquí es codificar la secuencia humana comprensible de caracteres que representan el conjunto de opciones que identifican el “género” en algo complicado y una representación deliberadamente compleja que quizás pueda usarse como una “clave”. Esto es equivalente a lo que haces en tu ejemplo.

En ningún momento esto implica que el 1 matemático sea mayor que 0. Está mostrando que hay dos opciones que puede elegir del conjunto de SEX_CHOICE .

En un conjunto, el orden no es relevante. Eso significa:

[matemáticas] {1,2,3} \ equiv {3,2,1} \ equiv {2,1,3} [/ matemáticas]

Sería insensible excluir opciones del conjunto de SEX_CHOICE , sería insensible no tener la opción de no seleccionar una opción.

Si quiere decir que cuando alguien lee esto, no debe ofenderse / sentirse incómodo / o sentirse extraño.

SEX_CHOICE = {‘masculino’: 1, ‘femenino’: 0}

¿Si le pide a la persona que identifique su propio género ? en cuyo caso, puede usar “gender_options”, “gender_choice”, “genders_set”.

Si los usuarios finales descompilan su código y lo leen, tienen mayores problemas que si encuentran que su estilo es tolerante. Admiro tu esfuerzo, pero la gente nunca debería leer el código. Muchas de mis variables tienen errores tipográficos, que no importan siempre que sea coherente.

hombre: 1

mujer: 0

otro: 2

Si es tan importante que sus usuarios ingresen algo diferente a esas opciones, almacene los resultados de un campo de relleno. Después de aproximadamente una semana (lo que considere apropiado), use los resultados más populares como opciones.

El sexo es binario, el género no lo es. La forma más “tolerante” de manejarlo es considerar si el sexo es relevante para su aplicación. ¿Su aplicación realmente está considerando la preferencia de género en lugar del sexo? ¿Harías mejor en usar inferencia?

Esto no es realmente una cuestión de programación de computadoras. Es una pregunta que depende de las necesidades y políticas del cliente. Necesita recibir aportes de su cliente.

En teoría, la respuesta debería estar contenida en un documento de requisitos. Pero sabiendo cómo van las cosas en realidad, es posible que deba preguntar al cliente (quién puede ser su jefe, su grupo de marketing, etc.) cómo abordar este problema.

¿Qué tal una cuerda? Ese puede manejar cualquier cosa.