In linguaggio di programmazione dinamico come Python, Javascript, è molto facile fare una funzione restituire un oggetto:
def make_vector2(a, b):
return {"x": a, "y": b}
La 'firma' dell'oggetto restituito da make_vector2
funge da protocollo o interfaccia ad altre funzioni.
Ad esempio:
def norm(v):
return math.sqrt(v["x"]**2 + v["y"]**2)
Durante l'evoluzione di un programma, potrebbero esserci delle modifiche alla firma dell'oggetto restituito.
Ad esempio, cambierei sopra la definizione del vettore in {"x0": a, "x1":b}
.
Questa modifica del protocollo può invalidare le sue funzioni correlate (cioè norm
nell'esempio sopra).
Nel linguaggio di programmazione statica, ho il compilatore che mi aiuta a mantenere il protocollo coerente. Mentre sono in linguaggio di programmazione dinamico non riesco a rilevare i problemi a meno che non eseguo effettivamente il codice.
Ci sono suggerimenti / buoni strumenti per questo problema?