Me pregunto por qué los lenguajes de tipo débil todavía se están desarrollando activamente. Por ejemplo, ¿qué beneficio se puede sacar de poder escribir?
$someVar = 1;
(...) // Some piece of code
$someVar = 'SomeText';
en lugar de usar la versión muy diferente, de tipo fuerte
int someInt = 1;
(...)
string SomeString = 'SomeText';
Es cierto que necesita declarar una variable adicional en el segundo ejemplo, pero ¿eso realmente duele? ¿No deberían todos los idiomas esforzarse por ser fuertemente tipados, ya que impone la seguridad de escritura en tiempo de compilación, evitando así algunas dificultades en la conversión de tipos?
weak-typing
DotNetStudent
fuente
fuente
Respuestas:
La escritura fuerte / débil y la escritura estática / dinámica son ortogonales.
Fuerte / débil se trata de si el tipo de valor importa, funcionalmente hablando. En un lenguaje de tipo débil, puede tomar dos cadenas que están llenas de dígitos y realizar la suma de enteros; en un lenguaje fuertemente tipado, esto es un error (a menos que primero convierta o convierta los valores a los tipos correctos). La escritura fuerte / débil no es una cosa en blanco y negro; la mayoría de los idiomas no son 100% estrictos ni 100% débiles.
La tipificación estática / dinámica se trata de si los tipos se unen a valores o identificadores. En un lenguaje de tipo dinámico, puede asignar cualquier valor a cualquier variable, independientemente del tipo; la escritura estática define un tipo para cada identificador, y la asignación de un tipo diferente es un error o da como resultado una conversión implícita. Algunos idiomas adoptan un enfoque híbrido, lo que permite tipos declarados estáticamente, así como identificadores sin tipo ('variante'). También hay inferencia de tipos, un mecanismo en el que es posible escribir de forma estática sin declarar explícitamente el tipo de todo, al hacer que el compilador descubra los tipos (Haskell lo usa ampliamente, C # lo expone a través de la
var
palabra clave).La programación dinámica débil permite un enfoque pragmático; el idioma no se interpone en tu camino la mayor parte del tiempo, pero tampoco intervendrá cuando te disparas en el pie. Por el contrario, la escritura estática fuerte empuja al programador a expresar ciertas expectativas acerca de los valores explícitamente en el código, de manera que permita al compilador o al intérprete detectar una clase de errores. Con un buen sistema de tipos, un programador puede definir exactamente qué se puede y qué no se puede hacer con un valor, y si, por accidente, alguien intenta algo indeseable, el sistema de tipos a menudo puede evitarlo y mostrar exactamente dónde y por qué las cosas salen mal.
fuente
&
para la concatenación), las operaciones tienen"12"+3
o45 & "6"
no presentan ambigüedad (calculan 15 y "456", respectivamente). En un lenguaje más fuertemente tipado, el operador "+" podría sobrecargarse de manera segura tanto para la concatenación de cadenas como para la suma numérica sin causar ambigüedad porque las operaciones en cadenas y números estarían prohibidas. Los problemas surgen cuando el lenguaje especifica los clavos, ni los tipos ni las operaciones a realizar.La escritura débil es más parecida a
1 == "TRUE"
. Esta sección en la wikipedia ilustra muy bien la diferencia.Tenga en cuenta que ninguno de los ejemplos de la wikipedia está estáticamente escrito, que es a lo que se refiere en su segundo ejemplo.
Entonces, si la pregunta es por qué las personas usan lenguajes de tipo dinámico, la respuesta es: los sistemas de tipo estático le imponen limitaciones. Muchas personas simplemente nunca han trabajado con un sistema de tipo estático expresivo, lo que les lleva a la conclusión de que las desventajas del tipeo estático son mayores que los beneficios.
fuente
Los lenguajes de tipo débil todavía se están desarrollando porque las personas los usan y les gustan. Si no le gusta escribir débilmente, no use idiomas débilmente escritos. Declarar que algo es La única forma verdadera y que todos deberían hacerlo La única forma verdadera ignora la complicación del mundo.
fuente
No necesariamente. Objetivo de aprendizaje-C: un manual aborda esa pregunta directamente en el contexto del objetivo-C:
fuente