Dart:
Refactoring

Come fare:

Esempio 1: Rinominare ed Estrazione di Metodi

Prima del refactoring, potresti avere un pezzo di codice che mescola diversi livelli di astrazione o responsabilità, come calcolare uno sconto e poi applicarlo:

void main() {
  var price = 100.0;
  var discount = 0.2;
  var finalPrice = price - (price * discount);
  print("Prezzo finale: $finalPrice");
}

Output:

Prezzo finale: 80.0

Dopo il refactoring, puoi estrarre il calcolo dello sconto in un proprio metodo e dargli un nome significativo:

void main() {
  var price = 100.0;
  var discount = 0.2;
  var finalPrice = calcolaPrezzoFinale(price, discount);
  print("Prezzo finale: $finalPrice");
}

double calcolaPrezzoFinale(double price, double discount) {
  return price - (price * discount);
}

Output:

Prezzo finale: 80.0

Estraendo il calcolo in un metodo, ora hai un’operazione chiaramente definita che può essere riutilizzata, testata indipendentemente e facilmente modificata.

Esempio 2: Semplificazione delle Espressioni Condizionali

Prima del refactoring, le istruzioni condizionali potrebbero essere eccessivamente complesse o difficili da leggere:

void main() {
  var customerType = "regular";
  double discount;
  
  if (customerType == "regular") {
    discount = 0.05;
  } else if (customerType == "member") {
    discount = 0.1;
  } else {
    discount = 0.0;
  }

  print("Sconto: $discount");
}

Output:

Sconto: 0.05

Dopo il refactoring, considera l’uso di una mappa per una struttura più chiara e aggiornamenti o estensioni ai tipi di clienti e sconti più semplici:

void main() {
  var customerType = "regular";
  var discounts = {
    "regular": 0.05,
    "member": 0.1,
    "none": 0.0,
  };

  var discount = discounts[customerType] ?? 0.0;
  print("Sconto: $discount");
}

Output:

Sconto: 0.05

Questo refactoring non solo rende il codice più conciso, ma anche incapsula la logica per determinare gli sconti in un modo più facile da comprendere e mantenere.

Librerie di Terze Parti per il Refactoring

Quando si tratta di refactoring in Dart, specialmente all’interno delle app Flutter, la suite Dart DevTools è inestimabile. Include strumenti di performance, un ispettore di widget e un debugger a livello di codice sorgente. Sebbene non sia una libreria di terze parti, Dart DevTools è spesso usato insieme a librerie come flutter_bloc per gestire in modo pulito lo stato in modo che favorisca il refactoring per migliorare la modularità e la leggibilità. Purtroppo, a causa del campo di applicazione di questa voce, esempi di codice specifici che utilizzano librerie di terze parti non saranno forniti qui, ma agli sviluppatori è incoraggiato esplorare questi strumenti per migliorare il processo di refactoring nelle loro applicazioni Dart/Flutter.