11/08/2023 - Federico2839 ha scritto:
Quando scrivo uno o più metodi di una classe sono sempre indeciso se ritornare il risultato dell'operazione o aggiornare la variabile di istanza. […]
La scelta di restituire un valore o modificare l'istanza dipende dalla finalità del metodo che viene invocato.
Supponiamo di realizzare una classe di nome Rectangle che rappresenta una forma rettangolare da mostrare sullo schermo e di crearne una istanza per disegnarla e manipolarla.
Come campi questa avrà ipoteticamente delle proprietà tipo left, top, height, width o qualcosa del genere, che ne definiscono posizione e dimensioni nello spazio.
A questo punto, supponendo di introdurre un metodo move() che sposta la figura, questa mi aspetto che vada a prendere valori come parametri opzionali e che modifichi i campi di cui sopra (in particolare left e top) per spostare la figura nella nuova posizione.
Se invece introduco un metodo getArea(), mi aspetto che questo acceda alle proprietà height e width restituendo l'area come valore di ritorno, un dato che può essere calcolato “al volo” e non va memorizzato all'interno dell'istanza.
Quello che fa un metodo può essere una delle due soluzioni, o anche tutte e due (può modificare lo stato dell'istanza e restituire anche un valore), nessuna è corretta o errata in senso assoluto (se non andiamo a scomodare la programmazione funzionale, che è un'altra cosa).
Quale delle due, o tutte e due, dipende dal contesto e dall'utilità.
Approfondisci il paradigma della OOP per acquisire ulteriori informazioni a riguardo: la codifica in Python è solo una implementazione dei principi usando uno specifico linguaggio, ma le linee guida valgono in generale per tutti i linguaggi, salvo alcuni molto specifici.
Ciao! :)