Sistemas de escritura: escritura dinámica, escritura estática y escritura de pato

Escritura dinámica:

En Dynamic Typing, la verificación de tipos se realiza en tiempo de ejecución. Por ejemplo, Python es un lenguaje de tipo dinámico. Significa que el tipo de una variable puede cambiar a lo largo de su vida. Otros lenguajes de tipado dinámico son -Perl, Ruby, PHP, Javascript, etc.
Tomemos un ejemplo de código de Python para ver si una variable puede cambiar de tipo:


  
## variable a is assigned to a string
a ="hello"
print(type(a))
  
## variable a is assigned to an integer
a = 5
print(type(a))

Esto confirma que el tipo de variable «a» puede cambiar y Python infiere correctamente el tipo a medida que cambia.

Tomemos otro ejemplo de escritura dinámica en Python:

## simple function
def add(a, b):
    return a + b
  
## calling the function with string
print(add('hello', 'world'))
  
## calling the function with integer
print(add(2, 4))

En Python, realmente no tenemos una buena idea de cuáles son los tipos con los que trata esta función y tampoco cuál será el tipo del valor devuelto.

String a;
a = "Java is good";

La primera línea declara que la variable «a» está vinculada al tipo de string en tiempo de compilación. En la segunda línea, a «a» se le asigna un valor que no es un objeto de string. Por ejemplo, si decimos a = 5, el compilador generará un error debido a tipos incompatibles.

Mecanografía de pato

Duck Typing es un concepto relacionado con Dynamic Typing, donde el tipo o la clase de un objeto es menos importante que el método que define. Con Duck Typing, no verificamos los tipos en absoluto. En cambio, verificamos la presencia de un método o atributo dado.
La razón detrás del nombre es la prueba del pato: “Si parece un pato, nada como un pato y grazna como un pato, entonces probablemente sea un pato”.
Tomemos un ejemplo de código Python simple para entenderlo claramente:

class Duck:
    def quack(self):
        print("Quack")
  
class Goose:
    def quack(self):
        print("Quack Quack")
  
class Dog:
    def bark(self):
        print("I just bark")
  
class ItQuacks:
    def __init__(self, animal):
        animal.quack()
  
ItQuacks(Duck())
ItQuacks(Goose())
ItQuacks(Dog())

Las clases que tienen una implementación del método «quack» podrán llamar (objetos Duck, Goose) pero para la clase «Dog» que no proporciona una implementación del método «quack», obtiene un «AttributeError» si intentamos pasar un objeto.

Publicación traducida automáticamente

Artículo escrito por imavijit y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *