Haskell:
Refactoring

Comment faire :

Disons que vous avez un bloc de code Haskell qui se répète plus que votre chanson préférée. Voici un coup d’œil rapide sur la façon dont vous pourriez refactoriser cela en utilisant des fonctions.

Avant le refactoring :

printInvoice :: String -> Float -> String -> IO ()
printInvoice customer total item = do
  putStrLn $ "Customer: " ++ customer
  putStrLn $ "Total: " ++ show total
  putStrLn $ "Item: " ++ item

Après un peu de refactoring :

printDetail :: String -> String -> IO ()
printDetail label value = putStrLn $ label ++ ": " ++ value

printInvoice :: String -> Float -> String -> IO ()
printInvoice customer total item = do
  printDetail "Customer" customer
  printDetail "Total" (show total)
  printDetail "Item" item

-- Sortie d'exemple :
-- Customer: Alice
-- Total: 42,00 $
-- Item: Guide de Programmation Haskell

Comme vous pouvez le voir, en extrayant le motif commun dans une fonction printDetail séparée, nous évitons la répétition et rendons printInvoice plus clair et plus facile à gérer.

Plongée profonde

Quand Haskell est arrivé sur la scène à la fin des années 80, il était clair que le paradigme fonctionnel pourrait apporter un vent de fraîcheur aux pratiques de codage. Avance rapide, et le refactoring en Haskell est particulièrement élégant grâce aux fonctions étant des citoyens de première classe et à son système de type statique fort. Vous refactorisez sans craindre de casser votre application puisque le compilateur vous couvre.

Les alternatives au refactoring manuel peuvent inclure l’utilisation d’outils automatisés, bien que la nature fonctionnelle et la sûreté des types de Haskell puissent parfois rendre cela moins prévalent par rapport à d’autres langues. En termes d’implémentation, il est important de tirer parti des fonctionnalités d’Haskell telles que les fonctions d’ordre supérieur, la pureté et l’immutabilité pour rendre le refactoring plus fluide.

Des refactorisations comme “Extraire la Fonction”, juste démontrée, sont courantes, mais vous pouvez également effectuer “Intégrer la Fonction”, “Renommer la Variable” et “Changer la Signature de Fonction” en toute confiance, grâce au système de types. L’inférence de type puissante d’Haskell peut parfois attraper des erreurs qui passeraient inaperçues dans d’autres langues.

Voir également

Pour une plongée profonde dans le refactoring en Haskell, plongez-vous dans “Refactoring : Améliorer la conception du code existant” de Martin Fowler, où les concepts sont universellement applicables. Consultez l’outil hlint pour des conseils automatisés sur l’amélioration de votre code Haskell. Aussi, passez par le wiki Haskell (https://wiki.haskell.org/Refactoring) pour des perspectives communautaires et des lectures complémentaires.