Chi è il "proprietario" del parametro passato?
Considerare la situazione in cui il valore del colore viene modificato dalla funzione e viene passato per riferimento. Questo potrebbe non essere sempre qualcosa che puoi controllare (passa per valore o passa per riferimento).
#include <iostream>
using namespace std;
void doFoo(int& arg) {
arg++;
}
int main(void) {
int foo = 42;
doFoo(foo);
cout << foo;
return 0;
}
link
Questo codice stampa 43. La funzione doFoo
ha ottenuto l'argomento per riferimento e l'ha modificata. Questo potrebbe essere ciò che dovrebbe fare, e ci sono certamente dei momenti in cui essere consapevole di ciò. Ma, se la funzione non "possiede" l'argomento quando entra, un tale effetto collaterale può essere piuttosto brutto.
Questo concetto di proprietà è reale e ha implicazioni nei luoghi. Nell'obiettivo C pre-arco, in effetti si chiamerebbero retain
e release
sulle cose se si volessero "possederle". In alternativa, puoi crearne una copia (non quello che stai indirizzando) e quella copia.
Spesso, la migliore pratica è considerare che gli argomenti passati sono cose finali immutabili che non dovresti toccare. La riassegnazione dei parametri è spesso vista come una pratica discutibile - anche se la cosa impossibile cambiare. Lo specifico di se può cambiare da lingua a lingua, o anche in silenzio all'interno di un linguaggio (la differenza percepita nel passare un Object
e un int
in Java).
Modifica di una cosa
Mettendo da parte il parametro che si sta modificando, un codice come questo stabilisce la possibilità / probabilità di diventare non mantenibile nel tempo.
La modifica della condizione per if (o indice in un ciclo for
), in una serie di istruzioni if (sì, hai un else
in là) può portare al codice in cui dipendi da un valore cambiare stato in un precedente se, che non lo fa (e ha uno stato diverso ).
Questo inizia ad entrare in esempi piuttosto inventati cercando di dimostrarlo in un breve pezzetto di codice. Spesso questo avviene con blocchi di codice più grandi dove pensi che nulla più tardi lo usi, quindi è sicuro modificarlo ... e poi qualcuno entra, guarda i compiti, guarda le cento linee di codice (troverai questo in codice si sostiene che "qualcun altro ha scritto" tutto il tempo), sfiorare dove è necessario apportare la modifica ... apportare il cambiamento e scoprire che la cosa che hai qui ora, non è la cosa che era nella parte superiore del blocco.
Il codice di esempio ... ha un odore di odore di codice che ha il profumo di Same Name Different Meaning - gli identificatori identici che verrebbero indirizzati da Split Temporary Variable . Anche questo non una variabile temporanea è problematico.