La citada ventaja de tipos estáticos es que hay clases enteras de errores capturados en tiempo de compilación, que no pueden alcanzar el tiempo de ejecución. Por ejemplo, si tiene una clase o interfaz estáticamente estátizada como parámetro de función, entonces no va a pasar accidentalmente un objeto del tipo incorrecto (es decir, sin un molde explícito e incorrecto).
Por supuesto, esto no le impide pasar el objeto incorrecto del tipo correcto, o una implementación de una interfaz donde le ha dado las funciones correctas pero hacen las cosas incorrectas. Además, si tiene una cobertura de código del 100%, diga la gente de PHP/Python/etc, ¿a quién le importa si detecta el error en tiempo de compilación o en tiempo de ejecución?
Personalmente, he tenido momentos divertidos en idiomas con tipado estático y momentos divertidos en idiomas sin. Rara vez es el tema decisivo, ya que nunca he tenido que elegir entre dos idiomas idénticos que no sean el tipo de tipeo y normalmente hay cosas más importantes de las que preocuparse. Encuentro que cuando uso lenguajes tipados estáticos deliberadamente "me apoyo en el compilador", tratando de escribir código de tal manera que, si está mal, no compila. Por ejemplo, hay ciertos refactores que puede realizar haciendo un cambio en un lugar, y luego arreglando todos los errores de compilación que resultan, repita hasta la compilación limpia. Hacer lo mismo ejecutando un conjunto de pruebas completo varias veces puede no ser muy práctico.Pero no es inaudito que los IDE automaticen los mismos refactores en otros idiomas, o que las pruebas se completen rápidamente, por lo que se trata de lo que es conveniente, no lo que es posible.
Las personas que tienen una preocupación legítima más allá de la conveniencia y la preferencia de estilo de codificación son las que trabajan en pruebas formales de la exactitud del código. Mi impresión ignorante es que la deducción de tipo estático puede hacer la mayoría (pero no la totalidad) del trabajo que hace el tipado estático explícito, y ahorra un desgaste considerable en el teclado. Entonces, si tipeo estático obliga a las personas a escribir código de una manera que hace que sea más fácil probarlo, luego bien podría haber algo de ese punto de vista. Digo "si": no lo sé, y no es como si la mayoría de las personas probaran su código de tipo estático de todos modos.
cambiar los tipos de variables sobre la marcha y tales
Creo que es de dudoso valor. Siempre es muy tentador para hacer algo así (Python/Django):
user = request.GET['username']
# do something with the string variable, "user"
user = get_object_or_404(User,user)
# do something with the User object variable, "user"
Pero en realidad, si el mismo nombre puede utilizar para diferentes cosas dentro de una función? Tal vez. Probablemente no. La "reutilización", por ejemplo, las variables enteras para otras cosas en los lenguajes tipados estáticamente tampoco se fomenta masivamente. El deseo de no tener que pensar en los nombres de variables concisos y descriptivos, probablemente el 95% del tiempo no debe anular el deseo de código inequívoco ...
Por cierto, por lo general significa débil escritura que se producen conversiones de tipo implícitas, y fuerte mecanografía significa que no. Según esta definición, C está débilmente tipado en lo que respecta a los tipos aritméticos, así que supongo que eso no es lo que quieres decir. Creo que se considera ampliamente que la tipificación completa es más una molestia que una ayuda, y que "escribir completamente débilmente" (cualquier cosa se puede convertir a cualquier otra cosa) no tiene sentido en la mayoría de los idiomas. Entonces, la pregunta sobre cuántas conversiones implícitas se pueden tolerar antes de que se vuelva demasiado difícil de descifrar. Ver también, en C++, la dificultad actual para decidir si implementar operadores de conversión y constructores no explícitos de una arg.
¿Qué quiere decir con tipeo "fuerte" y "débil"? Estático vs. dinámico? ¿Nombres de tipo explícitos vs. implícitos? Explicit vs. implicit casting? ¿Lanzamiento seguro vs. inseguro? – dan04
C tiene un tipo débil. –
¿Cómo está 'fuertemente tipado' C? – chimeracoder