Durante la lettura di una classe, guarda gli attributi e i comportamenti che ha (metodi + campi). Per i metodi, prendere nota del nome del metodo, dei parametri di input e del tipo restituito. Se non si conosce il nome del metodo (perché è offuscato), a volte è possibile ottenere queste informazioni osservando l'input, l'output e l'implementazione.
Prendi questo metodo parzialmente offuscato come esempio:
public double f(double d0, double d1, double d2)
{
double d3 = this.locX - d0;
double d4 = this.locY - d1;
double d5 = this.locZ - d2;
return MathHelper.sqrt(d3 * d3 + d4 * d4 + d5 * d5);
}
Accetta tre doppi, restituisce un doppio, ma la parte significativa è l'equazione matematica: radice quadrata di a-quadrato più b-quadrato più c-quadrato: Quella è distanza!
Ora, dovrai refactoring f()
in distance()
. Decifra i facili prima. Una volta che avrai risolto un numero sempre maggiore di rompicapo, darà suggerimenti in aree più difficili da decifrare.
Il mio trucco preferito è control + F. Questa è la funzione di ricerca. E puoi usare anche per cercare interi progetti (non solo singoli file). Come fai a sapere cosa cercare, chiedi? Bene, usando l'applicazione o la libreria in qualche modo ... ti darò suggerimenti su cosa cercare. In primo luogo, hai un'idea generale di quale caratteristica particolare desideri cercare. Quindi, se hai utilizzato il progetto anche solo un po ', puoi ottenere indizi più specifici per restringere la tua ricerca.
Ad esempio, sto lavorando a un progetto ora che ho ereditato da un autore inattivo (un plug-in Minecraft open source con 418 file e 46k righe di codice). E abbiamo chiesto a un utente di aprire un ticket: "Qual è il nodo di autorizzazione per utilizzare i segni di join?" Diamine, non ne ho idea. E nemmeno la documentazione lo menzionava. Nessun sudore, controllo + F per il salvataggio. (La mia arma preferita).
Una delle cose che non puoi sempre decifrare al 100% è la domanda del loro design : "Perché l'hanno progettata in questo modo?" Si può solo speculare.