Dati i seguenti due snippet:
Snippet 1 :
public void foo(Data data, AbstractNode node)
{
int originalId = data.getCurrentId;
node.execute(data);
//If node changed currentId reset it to the original.
data.setCurrentId(originalId);
}
Snippet 2 :
public void foo(Data data, AbstractNode node)
{
int originalId = data.getCurrentId;
node.execute(data);
resetCurrentIdIfChangedByNode(data, originalId);
}
private void resetCurrentIdIfChangedByNode(Data data, int originalId)
{
data.setCurrentId(originalId);
}
In entrambi i casi non è noto se node.execute () modifichi o meno l'ID corrente.
Il metodo a una riga in Snippet 2 rende il codice più leggibile? Oppure è preferibile utilizzare commenti come in Snippet 1 ?
EDIT: Capisco che il nodo ha effetti collaterali. Questo è il motivo per cui sto ricorrendo alla creazione di un metodo che spiega (o prova a spiegare) che data.currentId potrebbe essere cambiato per nodo. A seconda della sottoclasse di AbstractNode utilizzata, potrebbe essere modificata o meno.
EDIT 2: il motivo per cui non c'è istruzione if attorno al reset in Snippet 2 è che sarebbe inutile, poiché il risultato sarebbe lo stesso sia che lo controlliamo o meno.
private void resetCurrentIdIfChangedByNode(Data data, int originalId)
{
data.setCurrentId(originalId);
}
stesso risultato di
private void resetCurrentIdIfChangedByNode(Data data, int originalId)
{
if(data.getCurrentId() != originalId)
{
data.setCurrentId(originalId);
}
}