2010-08-01 16 views
7

Estoy acostumbrado a tipear dinámicamente, verificando el tipo de información de la estructura orientada a objetos/no objetos en tiempo de ejecución y lanzando algún tipo de error de tipo, es decir, si grazna como un pato es un pato. ¿Hay algún tipo diferente de tipado dinámico (por favor, entre en detalles).Mecanografía dinámica sin tipar pato?

Respuesta

1

No, el tipado dinámico es cuando los valores tienen tipo pero las variables no, por lo que la mayoría de las comprobaciones de tipo se realizan en tiempo de ejecución. Entonces, básicamente, si el valor camina o grazna como un pato, es un pato, de lo contrario se produce un error. Duck typing realmente solo describe una característica del tipado dinámico que asegura que será seguro (es decir, un método solo se ejecutará si la variable foo 'tiene el atributo correcto o puede ejecutar ese método).

+4

Eso es incorrecto. No comprueba el tipo, solo que el tipo puede hacer un operador X o tiene algún atributo Y. Si llama, por ejemplo, aString() en una variable, si es un objeto e implementa un método toString() , entonces se llamará, de lo contrario, obtendrá un error. Pero muchos tipos podrían cumplir este requisito. – siride

+0

Buen punto, voy a hacer una edición –

5

Sí, por supuesto. Duck-typing es un modismo que dice que el tipo de valor en este momento se basa en los campos y métodos que tiene ahora. La tipificación dinámica solo dice que los tipos están asociados con valores de tiempo de ejecución, no con variables y parámetros estáticos. Hay una diferencia entre los dos, y puedes usar el último sin el primero.

Por ejemplo, si programó en PHP y se limitó a los tipos básicos sin usar OO, entonces estaría usando la escritura dinámica sin usar pato-tipado.

+0

¿Podría explicar su ejemplo? ¿Estás diciendo simplemente que la verificación de tipos en el tiempo de ejecución es la tipada dinámica, mientras que la comprobación basada en la prueba de la existencia de métodos y propiedades de los objetos se denomina tipado de pato? es decir, ¿diría que la diferencia entre los dos tiene que ver con * objects *? En ambos casos (dinámica no de pato y tipado de pato), parece que la compatibilidad de ciertas operaciones (llamada de método, adición, etc.) con los valores de entrada se verifica en tiempo de ejecución; ¿está bien? la única diferencia es que el tipado de pato tiene que ver con objetos, y ese tipado dinámico es más general, ¿no? – EOL

+1

@EOL: Sí, la verificación de tipos es un tipado dinámico (que realmente debería llamarse "comprobación dinámica", verificar la existencia de propiedades es pato escribir. La cuestión de "objetos de interés" es un poco vaga para decir que es correcta, pero creo que Ambos están en la misma página. –

+0

¡Gracias! Ahora veo mejor la distinción entre los dos. – EOL

Cuestiones relacionadas