[Python] Dubbi su hash e set

enrico franchi enrico.franchi a gmail.com
Gio 8 Maggio 2008 08:38:20 CEST


2008/5/6 Pietro Battiston <toobaz a email.it>:

>  Perché un vertice - nella mia applicazione - è prima di tutto la
>  giunzione di diversi lati. Voglio potere ad esempio congiungere (union,
>  o update) due vertici, ovviamente non voglio lati doppioni in uno stesso
>  vertice.

Quindi un vertice è *implementato* in termini di "insieme". Per
esempio tutte le operazioni  che puoi fare fra due insiemi le puoi
anche fare tra due vertici? E fra un insieme e un vertice? L'insieme
vuoto è un concetto perfettamente sensato. Il "vertice vuoto"? E il
vertice di un solo lato? E' un insieme normale, ma come vertice non ha
senso.

>  Ovviamente di un vertice mi interessano i lati che ci arrivano, mentre
>  dell'ordine me ne frego abbastanza (in realtà questa è più che altro una
>  scelta, perché semplicemente l'ordine non mi interessa per quel che
>  dovrò poi farci).

E' sensato implementare in termini di. Ma mi stai sempre più
convincendo che l'ereditarietà è fuori luogo.


>  Sì, sul principio generale hai perfettamente ragione. La verità è che se
>  mai deciderò che val la pena pubblicare quel che sto facendo, dovrò
>  ovviamente essere certo che ogni metodo che la mia classe ha (o eredita)
>  sia consistente, e in quel caso viva il duck typing, ma finché è una
>  roba mia mi fa estremamente comodo, spippolando con ipython, avere a
>  portata di mano tutto e subito per sperimentare, e magari fare anche
>  cose non consistenti (per debug, mi sono addirittura //scritto// metodi
>  che rendono il tutto non consistente). E che comunque lavorare in modo
>  "pulito" non avrebbe risolto il problema per cui avevo scritto in lista.

Non mi sembra un discorso che si regge: non ti costa nulla seguire dei consigli.
Oltretutto progettare bene le gerarchie di classi non è una cosa
banale, non è una cosa che ti insegnano in università, ma è una cosa
che impari con l'esperienza. Se non dai peso al design perchè "tanto è
per te", quando dovrai farlo per gli altri, semplicemente non avrai
accumulato le skills necessarie. Se invece fin da principio hai
provato a progettare bene le cose, quando dovrai farlo anche per gli
altri, saprai come farlo.

Fra le altre varie cose, a volte anche persone decisamente esperte
sbagliano. Solo in genere se ne accorgono un po' prima e talvolta non
è troppo tardi.

>  Certo, per qualcosa che dovessi rilasciare al pubblico non avrei dubbi.
>  Per quel che riguarda me, preferisco che le funzioni "dalla coerenza
>  incerta" ci siano piuttosto che siano nascoste.

Boh.

>  Sì, abbastanza. Forse la cosa non mi tange troppo solo perché non ho mai
>  partecipato all'"evoluzione" di niente in Python, finora quello che ho
>  scritto l'ho scritto sempre da solo, e tutti i miei moduli erano di
>  "alto livello" (non nel senso di qualità ma di specializzazione).

Beh, io ti consiglio di cominciare a rifletterci su queste cose. Prima
ci pensi, prima impari.
Il discorso completo lo fatto più sopra.


-- 
-enrico


Maggiori informazioni sulla lista Python