Elixir:
Koodin refaktorointi
Kuinka:
Siistitään yleinen Elixir-malli. Refaktoroimme calculate_stats
funktion, joka tekee enemmän kuin sen pitäisi, jakamalla sen pienempiin, uudelleenkäytettäviin osiin.
defmodule Stats do
# Alkuperäinen, refaktoimaton koodi
def calculate_stats(data) do
total = Enum.sum(data)
count = Enum.count(data)
mean = total / count
{mean, total}
end
# Refaktoitu koodi
def calculate_mean(data), do: Enum.sum(data) / Enum.count(data)
def calculate_total(data), do: Enum.sum(data)
def calculate_stats_refactored(data) do
mean = calculate_mean(data)
total = calculate_total(data)
{mean, total}
end
end
# Esimerkkituloste
# Ennen refaktorointia
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}
# Refaktoroinnin jälkeen
Stats.calculate_stats_refactored([1, 2, 3])
# => {2.0, 6}
Kuten näet, tulos pysyy samana, mutta nyt meillä on modulaarisia funktioita, joita voidaan käyttää uudelleen ja testata itsenäisesti.
Syväsukellus
Refaktorointi ei ole uusi konsepti; se on ollut olennainen osa ohjelmointia ohjelmistokehityksen alkuaikoina. Merkittävät teokset, kuten Martin Fowlerin “Refactoring: Improving the Design of Existing Code”, tarjoavat perustavanlaatuisia käytäntöjä refaktorointiin, oivalluksia siitä, milloin ja miten niitä tulisi soveltaa.
Vaihtoehtoja manuaaliselle refaktoroinnille sisältävät automatisoidut koodianalyysityökalut, jotka voivat ehdottaa tai jopa suorittaa refaktorointeja. Automatisoidut työkalut eivät kuitenkaan aina ymmärrä koodin koko kontekstia ja saattavat ohittaa hienovaraisuuksia, jotka ihmisarvioija huomaisi.
Toteutuksen yksityiskohdat Elixirissa sisältävät funktionaalisen paradigman ymmärtämisen ja kuvion sovittamisen, vartijalauseiden sekä putkioperaattorin hyödyntämisen selkeän ja tiiviin koodin kirjoittamiseen. Esimerkiksi refaktorointiin kuuluu usein monimutkaisten imperatiivityylisten funktioiden muuntaminen pienemmiksi, yhdistettäviksi funktioiksi, jotka noudattavat Elixiriin kohdistuvaa muuttumattomuuden ja sivuvaikutuksettomien operaatioiden suosimista.
Katso myös
Lisää tietoa Elixiriin erityisesti liittyvistä refaktorointitekniikoista:
- Elixiriin viralliset oppaat
- “Refactoring: Improving the Design of Existing Code” Martin Fowlerilta, yleisperiaatteista, joita voidaan soveltaa Elixiriin.
- Credo, staattinen koodianalyysityökalu Elixirille, joka kannustaa parhaisiin käytäntöihin.
- Exercism Elixir Track, käytännön harjoituksiin, jotka usein sisältävät refaktorointia.