Creazione di variabili in metodi / funzioni

3

In che misura possiamo creare variabili nei nostri metodi o funzioni?

Ne creiamo solo uno quando usiamo il risultato della variabile più di una volta in questo modo?

function someFunction(SomeClass $someClass) {
    $thisVar = $someClass->thisVar();
    doSomethingElse($thisVar);
    echo $thisVar;
}

O crearne sempre uno, non importa quante volte lo stiamo usando (per una migliore leggibilità)?

O semplicemente chiama i metodi dalla dipendenza direttamente in questo modo?

function someFunction(SomeClass $someClass) {
    doSomethingElse($someClass->thisVar());
    echo $someClass->thisVar();
}
    
posta Bas 28.01.2015 - 10:55
fonte

1 risposta

3

Una ragione per introdurre una variabile separata è migliorare la leggibilità, supponendo che il vero nome di $someClass->thisVar() non sia abbastanza espressivo. Questo può avere senso anche se la funzione viene richiamata una sola volta:

function someFunction(SomeClass $someClass) {
    $explainingName = $someClass->thisVar();
    doSomethingElse($explainingName);
}

Naturalmente, se pensi che il nome della funzione sia abbastanza chiaro, questa variante

function someFunction(SomeClass $someClass) {
    doSomethingElse($someClass->selfExplanatoryName());
}

potrebbe andare bene Ma anche in questo caso, quando entrambi i nomi delle funzioni sono molto lunghi,

function someFunction(SomeClass $someClass) {
    doSomethingElseWithAVeryLongFunctionName($someClass->selfExplanatoryButVeryLongName());
}

potrebbe essere considerato meno leggibile di

function someFunction(SomeClass $someClass) {
     $thisVar = $someClass->selfExplanatoryButVeryLongName();
     doSomethingElseWithAVeryLongFunctionName($thisVar);
}

Quando devi riutilizzare il valore almeno due volte come nei tuoi esempi, un motivo potrebbe essere che $someClass->thisVar() deve essere chiamato una sola volta a causa di effetti collaterali, oppure dovrebbe essere chiamato una sola volta a causa di un impatto notevole sulle prestazioni.

Una terza ragione potrebbe essere quella di evitare la duplicazione del codice. Pensa a questo:

function someFunction(SomeClass $someClass) {
    doSomethingElse($someClass->thisVar($parameter1,$parameter2,$parameter3));
    echo $someClass->thisVar($parameter1,$parameter2,$parameter3);
}

qui $someClass->thisVar($parameter1,$parameter2,$parameter3) viene ripetuto due volte, il che viola il principio secco. Il tuo secondo esempio è un caso limite: è anche una violazione del principio DRY, ma non grave, e per evitarlo devi introdurre più codice di quello che effettivamente ti salva. Quindi è un trade-off senza una chiara "migliore" soluzione.

    
risposta data 28.01.2015 - 11:12
fonte

Leggi altre domande sui tag