Quanto sono riparabili i rifacimenti automatici? [chiuso]

1

Resharper offerto per girare il mio loop:

foreach (JObject obj in arr)
{
    var id = (string)obj["Id"];
    var accountId = (double)obj["AccountId"];
    var departmentName = (string)obj["DeptName"];
    i++;
}

... in una istruzione LINQ. Ho acconsentito e ha prodotto questo:

int i = 1 + (from JObject obj in arr let id = (string) obj["Id"] let accountId = (double) obj["AccountId"] select (string) obj["DeptName"]).Count();

Accendi i capricci, salta Jehoshaphat e Heavens to Murgatroid!

Questo mi chiede se i robot che diventano più intelligenti di me siano una buona cosa; quanto è sostenibile? Risposta: non lo è, dal momento che non riesco a capirlo; R # potrebbe anche averlo convertito in codice macchina, per tutto quello che posso fare io.

Devo ammettere che è "figo".

A che punto il perfetto diventa il nemico del bene in questo tipo di scenario?

UPDATE

In un secondo passaggio, R # mi dice per quella riga di LINQ, "Variabile locale" i "non viene mai usata"

Lasciandolo rimosso, la linea diventa:

var arr = JsonConvert.DeserializeObject<JArray>(s);

Hmm! Ora è grokkable; il motivo per cui stavo rompendo gli elementi giù in singoli vars prima era che potessi vedere cosa c'era dentro:

MessageBox.Show(string.Format("Object {0} in JSON array: id == {1}, accountId == {2}, deptName == {3}", i, id, accountId, departmentName));

... ma con quella messagebox commentata, immagino che quanto sopra sia meglio, dopotutto.

    
posta B. Clay Shannon 16.01.2014 - 23:36
fonte

3 risposte

4

LINQ è molto potente. Ma dovremmo sempre essere cauti nel saltarci sopra. Non fraintendermi, amo LINQ e per molti casi è uno strumento bellissimo. Nel tuo caso, il tuo codice era perfettamente leggibile, eppure la versione LINQ offusca le tue intenzioni e improvvisamente il programmatore deve capire esattamente cosa sta succedendo.

La tua versione è chiara, concisa e piena di intenti.

La versione LINQ è un abominio, al confronto.

    
risposta data 16.01.2014 - 23:47
fonte
3

Una regola empirica che uso è: "questo codice è più facile da leggere?"

Un refactoring potrebbe inizialmente sembrare interessante, potrebbe usare qualcosa di diverso da quello che faresti normalmente. Tuttavia, alla fine della giornata, stai meglio con un codice che è più facile da capire rispetto al "caldo" che ti dà un computer.

Quindi, se un computer mi fornisce un codice che per me è difficile da digerire, probabilmente rifiuterei il suo suggerimento.

    
risposta data 16.01.2014 - 23:43
fonte
3

Gli strumenti automatici di refactoring non sono strumenti di pensiero automatizzati. Solo perché puoi applicare un refactoring su un pezzo di codice (puoi sempre farlo) non significa che dovresti. Non pensare mai che dovresti fare qualcosa solo perché uno strumento lo suggerisce. Tu e il tuo team siete responsabili per decidere cosa è mantenibile e cosa no.

Detto questo, i refactoring automatici sono ottimi e ReSharper potrebbe essere il miglior strumento che ho usato. Gli strumenti di refactoring possono farti risparmiare molto tempo, ma non ti impediscono di pensare:)

    
risposta data 17.01.2014 - 06:58
fonte

Leggi altre domande sui tag