significa sensible que minusculas mayusculas insensitive programming-languages language-features language-design case-sensitive case-insensitive

programming-languages - sensible - case insensitive



¿Cuál es el propósito de la sensibilidad a las mayúsculas en los idiomas? (8)

Posibles duplicados:
¿Hay alguna ventaja de ser un lenguaje de programación que distingue entre mayúsculas y minúsculas?
¿Por qué muchos idiomas distinguen entre mayúsculas y minúsculas?

Algo que siempre me he preguntado, ¿por qué los idiomas están diseñados para distinguir entre mayúsculas y minúsculas?

Mi cerebro de guisante no puede comprender ninguna posible razón por la que es útil.

Pero estoy seguro de que hay uno por ahí. Y antes de que alguien lo diga, tener una variable llamada dog y Dog diferenciada por la sensibilidad de un caso es realmente una mala práctica, ¿verdad?

¡Cualquier comentario apreciado, junto con quizás cualquier historia al respecto! En general, soy insensible con respecto a la sensibilidad a los casos, pero con sensibilidad respecto a la sensibilidad a los casos, ¡así que mantengamos todas las respuestas y comentarios de manera civil!


Algo que siempre me he preguntado, ¿por qué los idiomas están diseñados para distinguir entre mayúsculas y minúsculas?

En última instancia, es porque es más fácil implementar correctamente una comparación entre mayúsculas y minúsculas correctamente; acaba de comparar bytes / caracteres sin conversiones. También puedes hacer otras cosas como el hashing realmente fácil.

¿Por qué es esto un problema? Bueno, la insensibilidad a mayúsculas y minúsculas es bastante difícil de agregar a menos que esté en un pequeño dominio de caracteres compatibles (en particular, US-ASCII). Las reglas de conversión de casos varían según la configuración regional (las reglas turcas no son las mismas que en el resto del mundo) y no hay garantía de que voltear un solo bit haga lo correcto, o que siempre sea el mismo bit y bajo el mismo condiciones previas (IIRC, hay algunas reglas realmente complejas en algún lenguaje para deshacerse de los diacríticos al convertir las vocales en mayúsculas y reintroducirlas al convertir a minúsculas. Olvido exactamente cuáles son los detalles).

Si eres sensible a las mayúsculas y minúsculas, simplemente ignora todo eso; es simplemente más simple (Tenga en cuenta que aún debe prestar atención a los formularios de normalización de UNICODE, pero esa es otra historia y aplica las reglas de caso que esté usando).


Estoy seguro de que originalmente fue una consideración de rendimiento. Convertir una cadena a mayúsculas o minúsculas para realizar una comparación sin caso no es exactamente una operación costosa, pero tampoco es gratis, y en sistemas antiguos puede haber agregado una complejidad que los sistemas de la época no estaban listos para manejar.

Y ahora, por supuesto, a los idiomas les gusta ser compatibles entre sí (VB, por ejemplo, no puede distinguir entre clases o funciones de C # que difieren solo en el caso), las personas están acostumbradas a nombrar cosas con el mismo texto pero con diferentes casos (ver Jon La respuesta de Skeet (lo hago mucho), y el valor de los idiomas sin sentido no fue realmente suficiente para superar a estos dos.


Imagina que tienes un objeto llamado dog , que tiene un método llamado Bark() . También ha definido una clase llamada Dog, que tiene un método estático llamado Bark() . Usted escribe dog.Bark() . Entonces, ¿qué va a hacer? ¿Llamar al método del objeto o al método estático de la clase? (en un idioma donde :: no existe)


La comparación entre mayúsculas y minúsculas es trivial (desde un punto de vista ingenuo que ignora la equivalencia canónica) (simplemente compara los puntos de código), pero la comparación no es bien definida y es extremadamente compleja en todos los casos, y las reglas son imposibles de recordar. Su implementación es posible, pero conducirá inadvertidamente a un comportamiento inesperado y sorprendente. Por cierto, algunos idiomas como Fortran y Basic siempre han sido insensibles a mayúsculas y minúsculas.


La razón por la que no puede entender por qué la sensibilidad a los casos es una buena idea es porque no lo es. Es solo una de las extrañas peculiaridades de C (como las matrices basadas en 0) que ahora parecen "normales" porque muchos idiomas copian lo que C hizo.

C usa la sensibilidad a mayúsculas y minúsculas en los identificadores, pero desde una perspectiva de diseño de lenguaje fue una elección extraña. La mayoría de los lenguajes que se diseñaron desde cero (sin tener en cuenta que son "como C" de ninguna manera) fueron insensibles a mayúsculas y minúsculas. Esto incluye Fortran, Cobol, Lisp y casi toda la familia de idiomas Algol (Pascal, Modula-2, Oberon, Ada, etc.)

Los lenguajes de scripting son una bolsa mixta. Muchos se hicieron sensibles a las mayúsculas y minúsculas porque el sistema de archivos Unix era sensible a las mayúsculas y debían interactuar con sensatez. C creció orgánicamente en el entorno de Unix, y probablemente aprendió la filosofía que distingue entre mayúsculas y minúsculas.


Me gusta la sensibilidad a las mayúsculas y minúsculas para diferenciar entre clase y instancia.

Form form = new Form();

Si no puedes hacer eso, terminas con variables llamadas myForm o form1 o f , que no son tan claras y descriptivas como la form antigua simple.

La sensibilidad a las mayúsculas y minúsculas también significa que no tiene referencias a la form , la FORM y la Form que todas significan lo mismo. Me resulta difícil leer dicho código. Me resulta mucho más fácil escanear el código donde todas las referencias a la misma variable se ven exactamente iguales.


No es necesariamente una mala práctica tener dos miembros que solo se diferencian por caso, en idiomas que lo admiten. Por ejemplo, aquí hay un bit bastante común de C #:

private readonly string name; public string Name { get { return name; } }

Personalmente, estoy muy contento con la sensibilidad a las mayúsculas y minúsculas, especialmente porque permite códigos como el anterior, donde la variable miembro y la propiedad siguen las convenciones de todos modos, evitando confusiones.

Tenga en cuenta que la sensibilidad a las mayúsculas y minúsculas también tiene un aspecto cultural ... no todas las culturas considerarán que los mismos personajes son equivalentes ...


Una de las mayores razones para la distinción entre mayúsculas y minúsculas en los lenguajes de programación es la legibilidad. Las cosas que significan lo mismo también deberían verse igual.

Encontré el siguiente ejemplo interesante de M. Sandin en una discusión relacionada:

Solía ​​creer que la sensibilidad a mayúsculas y minúsculas era un error, hasta que hice esto en el lenguaje PL / SQL insensible a las mayúsculas (sintaxis ahora olvidada):

function IsValidUserLogin(user:string, password :string):bool begin result = select * from USERS where USER_NAME=user and PASSWORD=password; return not is_empty(result); end

Esto pasó inadvertido durante varios meses en un sistema de producción de bajo volumen, y no hubo ningún daño. Pero es un error desagradable, surgido de la insensibilidad a los casos, las convenciones de codificación y la forma en que los humanos leen el código. La lección para mí fue que: las cosas que son iguales deberían tener el mismo aspecto.

¿Puedes ver el problema inmediatamente? No pude