{"id":3016,"date":"2020-06-24T08:53:38","date_gmt":"2020-06-24T08:53:38","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/a-quick-primer-on-refactoring-for-beginners\/"},"modified":"2026-04-24T11:30:09","modified_gmt":"2026-04-24T11:30:09","slug":"nopea-alustus-refaktoroinnista-aloittelijoille","status":"publish","type":"post","link":"https:\/\/thecodest.co\/fi\/blog\/a-quick-primer-on-refactoring-for-beginners\/","title":{"rendered":"Refaktoroinnin nopea alkeiskurssi aloittelijoille"},"content":{"rendered":"<p>Siksi joillekin on k\u00e4sitt\u00e4m\u00e4t\u00f6nt\u00e4, ett\u00e4 <strong>refaktorointi<\/strong> on itse asiassa ohjelmoinnin osa-alue, ja se on my\u00f6s eritt\u00e4in t\u00e4rke\u00e4 osa ohjelmoijan ty\u00f6t\u00e4. Koodi kehittyy jatkuvasti, sit\u00e4 muutetaan niin kauan kuin on mahdollista lis\u00e4t\u00e4 uusia toiminnallisuuksia. Se voi kuitenkin ottaa muodon, joka ei en\u00e4\u00e4 mahdollista uusien toiminnallisuuksien tehokasta lis\u00e4\u00e4mist\u00e4, ja silloin olisi helpompaa kirjoittaa koko ohjelma uudelleen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mit\u00e4 refaktorointi on?<\/h2>\n\n\n\n<p>Yleens\u00e4 vastaus on, ett\u00e4 koodin rakennetta muutetaan soveltamalla useita refaktorointimuunnoksia vaikuttamatta koodin havaittavaan k\u00e4ytt\u00e4ytymiseen. T\u00e4m\u00e4 on totta. \u00c4skett\u00e4in t\u00f6rm\u00e4sin my\u00f6s m\u00e4\u00e4ritelm\u00e4\u00e4n <b>Martin Fowler<\/b> kirjassaan <b>\"Olemassa olevan s\u00e4\u00e4nn\u00f6st\u00f6n suunnittelun parantaminen\"<\/b> jossa h\u00e4n kuvailee <strong>refaktorointi<\/strong> \"suurten muutosten tekeminen pienin askelin\". H\u00e4n kuvailee <strong>refaktorointi<\/strong> koodimuutoksena, joka ei vaikuta sen toimintaan, mutta h\u00e4n korostaa, ett\u00e4 se on teht\u00e4v\u00e4 pienin askelin.<\/p>\n\n\n\n<p>Kirjassa my\u00f6s kannatetaan, ett\u00e4 <strong>refaktorointi<\/strong> ei vaikuta koodin toimintaan ja huomauttaa, ett\u00e4 sill\u00e4 ei ole vaikutusta testien l\u00e4p\u00e4isyyn miss\u00e4\u00e4n vaiheessa. Siin\u00e4 kuvataan vaihe vaiheelta, miten turvallisesti suoritetaan <strong>refaktorointi<\/strong>. Pidin h\u00e4nen kirjastaan, koska siin\u00e4 kuvataan yksinkertaisia temppuja, joita voi k\u00e4ytt\u00e4\u00e4 jokap\u00e4iv\u00e4isess\u00e4 ty\u00f6ss\u00e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Miksi tarvitsemme refaktorointia?<\/h2>\n\n\n\n<p>&nbsp;Useimmiten saatat tarvita sit\u00e4, kun haluat ottaa k\u00e4ytt\u00f6\u00f6n uuden toiminnallisuuden ja koodi nykyisess\u00e4 versiossaan ei salli sit\u00e4 tai se olisi vaikeampaa ilman muutoksia koodiin. Se on hy\u00f6dyllinen my\u00f6s silloin, kun uusien ominaisuuksien lis\u00e4\u00e4minen ei ole ajallisesti kannattavaa, eli olisi nopeampaa kirjoittaa koodi uudelleen alusta alkaen. Mielest\u00e4ni joskus unohdetaan, ett\u00e4 <strong>refaktorointi<\/strong> voi tehd\u00e4 koodista siistimp\u00e4\u00e4 ja luettavampaa. Martin kirjoittaa kirjassaan, miten h\u00e4n tekee refaktorointia, kun h\u00e4n tuntee ep\u00e4miellytt\u00e4vi\u00e4 hajuja koodissa, ja miten h\u00e4n asian ilmaisee, <b>\"se j\u00e4tt\u00e4\u00e4 aina tilaa paremmalle\"<\/b>. H\u00e4n yll\u00e4tti minut t\u00e4ss\u00e4 yhteydess\u00e4 n\u00e4kem\u00e4ll\u00e4 refaktoroinnin osana jokap\u00e4iv\u00e4ist\u00e4 koodity\u00f6skentely\u00e4. Minulle koodit ovat usein k\u00e4sitt\u00e4m\u00e4tt\u00f6mi\u00e4, niiden lukeminen on hieman kokemus, koska koodi on usein ep\u00e4intuitiivista.<\/p>\n\n\n\n<p>Hyvin suunnitellun ohjelman tunnusmerkki on sen <b>modulaarisuus<\/b>, jonka ansiosta riitt\u00e4\u00e4, ett\u00e4 tunnet vain pienen osan koodista, jotta voit tehd\u00e4 suurimman osan muutoksista. Modulaarisuus helpottaa my\u00f6s uusien ihmisten sis\u00e4\u00e4np\u00e4\u00e4sy\u00e4 ja ty\u00f6skentelyn aloittamista tehokkaammin. Modulaarisuuden saavuttamiseksi toisiinsa liittyv\u00e4t ohjelman osat on ryhmitelt\u00e4v\u00e4 yhteen, ja yhteydet on ymm\u00e4rrett\u00e4v\u00e4 ja l\u00f6ydett\u00e4v\u00e4 helposti. Ei ole olemassa mit\u00e4\u00e4n yksitt\u00e4ist\u00e4 nyrkkis\u00e4\u00e4nt\u00f6\u00e4 siit\u00e4, miten t\u00e4m\u00e4 voidaan tehd\u00e4. Kun tied\u00e4t ja ymm\u00e4rr\u00e4t yh\u00e4 paremmin, miten koodin on tarkoitus toimia, voit ryhmitell\u00e4 elementtej\u00e4, mutta joskus sinun on my\u00f6s testattava ja tarkistettava.<\/p>\n\n\n\n<p>Yksi refaktoroinnin s\u00e4\u00e4nn\u00f6ist\u00e4 <b>YAGNI<\/b>, se on lyhenne sanoista \"You Aren't Gonna't Need It\" (Et tarvitse sit\u00e4), ja se juontaa juurensa sanoista <b>eXtreme-ohjelmointi (XP) <\/b>k\u00e4ytet\u00e4\u00e4n p\u00e4\u00e4asiassa <strong><a href=\"https:\/\/thecodest.co\/fi\/blog\/how-to-implement-agile-methodology\/\">Ketter\u00e4<\/a> <a href=\"https:\/\/thecodest.co\/fi\/blog\/8-key-questions-to-ask-your-software-development-outsourcing-partner\/\">ohjelmistokehitys<\/a> joukkueet<\/strong>. Pitk\u00e4 tarina lyhyesti, <b>YAGNI<\/b> sanoo, ett\u00e4 vain ajantasaisia asioita pit\u00e4isi tehd\u00e4. T\u00e4m\u00e4 tarkoittaa periaatteessa sit\u00e4, ett\u00e4 vaikka jotakin asiaa voitaisiin tarvita tulevaisuudessa, sit\u00e4 ei pit\u00e4isi tehd\u00e4 juuri nyt.  Emme kuitenkaan voi my\u00f6sk\u00e4\u00e4n murskata uusia laajennuksia, ja t\u00e4ss\u00e4 kohtaa modulaarisuus tulee t\u00e4rke\u00e4ksi.<\/p>\n\n\n\n<p>Kun puhutaan <strong>refaktorointi<\/strong>on mainittava yksi olennaisimmista tekij\u00f6ist\u00e4 eli testit. Osoitteessa <strong>refaktorointi<\/strong>, meid\u00e4n on tiedett\u00e4v\u00e4, ett\u00e4 koodi toimii edelleen, koska <strong>refaktorointi<\/strong> ei muuta sen toimintaa vaan sen rakennetta, joten kaikki testit on l\u00e4p\u00e4ist\u00e4v\u00e4. Testit on parasta suorittaa sille koodin osalle, jonka parissa ty\u00f6skentelemme, jokaisen pienen muutoksen j\u00e4lkeen. Se antaa <a href=\"https:\/\/thecodest.co\/fi\/blog\/why-us-companies-are-opting-for-polish-developers\/\">us<\/a> varmistus siit\u00e4, ett\u00e4 kaikki toimii niin kuin pit\u00e4\u00e4kin, ja se lyhent\u00e4\u00e4 koko operaation kestoa. T\u00e4st\u00e4 Martin puhuu kirjassaan - tee testej\u00e4 mahdollisimman usein, jotta et joutuisi ottamaan askelta taaksep\u00e4in ja tuhlaamaan aikaa etsim\u00e4ll\u00e4 muutosta, joka rikkoi jotain.<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/thecodest.co\/fi\/dictionary\/what-is-code-refactoring\/\">Koodin uudelleenk\u00e4sittely<\/a><\/strong> ilman testausta on tuskallista, ja on suuri mahdollisuus, ett\u00e4 jokin menee pieleen. Jos se on mahdollista, olisi parasta lis\u00e4t\u00e4 ainakin joitakin perustestej\u00e4, jotka antavat meille hieman varmuutta siit\u00e4, ett\u00e4 koodi toimii.<\/p>\n\n\n\n<p>Alla luetellut muunnokset ovat vain esimerkkej\u00e4, mutta ne ovat todella hy\u00f6dyllisi\u00e4 p\u00e4ivitt\u00e4isess\u00e4 ohjelmoinnissa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Funktioiden ja muuttujien poisto - jos funktio on liian pitk\u00e4, tarkista, onko olemassa pienempi\u00e4 funktioita, jotka voitaisiin poistaa. Sama koskee pitki\u00e4 rivej\u00e4. N\u00e4m\u00e4 muunnokset voivat auttaa l\u00f6yt\u00e4m\u00e4\u00e4n koodista p\u00e4\u00e4llekk\u00e4isyyksi\u00e4. Pienten funktioiden ansiosta koodista tulee selke\u00e4mp\u00e4\u00e4 ja ymm\u00e4rrett\u00e4v\u00e4mp\u00e4\u00e4,<\/li>\n\n\n\n<li>Funktioiden ja muuttujien uudelleennime\u00e4minen - oikean nime\u00e4misk\u00e4yt\u00e4nn\u00f6n k\u00e4ytt\u00e4minen on olennaisen t\u00e4rke\u00e4\u00e4 hyv\u00e4n ohjelmoinnin kannalta. Muuttujien nimet voivat hyvin valittuna kertoa paljon koodista,<\/li>\n\n\n\n<li>Toimintojen ryhmittely luokkaan - t\u00e4m\u00e4 muutos on hy\u00f6dyllinen silloin, kun kaksi luokkaa suorittaa samanlaisia toimintoja, sill\u00e4 se voi lyhent\u00e4\u00e4 luokan pituutta,<\/li>\n\n\n\n<li>Sis\u00e4\u00e4nrakennetun lausekkeen ohittaminen - jos ehto tarkistetaan erityistapauksessa, anna palautuslauseke, kun ehto toteutuu. T\u00e4m\u00e4ntyyppisi\u00e4 testej\u00e4 kutsutaan usein varoituslausekkeeksi. Sis\u00e4kk\u00e4isen ehdollisen lausekkeen korvaaminen poistumislausekkeella muuttaa koodin painotusta. If-else-konstruktiossa molemmille vaihtoehdoille annetaan yht\u00e4 suuri painoarvo. Koodia lukevalle henkil\u00f6lle se on viesti siit\u00e4, ett\u00e4 kumpikin on yht\u00e4 todenn\u00e4k\u00f6inen ja t\u00e4rke\u00e4,<\/li>\n\n\n\n<li>Erikoistapauksen esittely - jos k\u00e4yt\u00e4t joitakin ehtoja koodissasi useita kertoja, voi olla syyt\u00e4 luoda niille erillinen rakenne. N\u00e4in ollen useimmat erikoistapausten tarkistukset voidaan korvata yksinkertaisilla funktiokutsuilla. Usein yleinen arvo, joka vaatii erityisk\u00e4sittely\u00e4, on null. Siksi t\u00e4t\u00e4 mallia kutsutaan usein nollakohteeksi. T\u00e4t\u00e4 l\u00e4hestymistapaa voidaan kuitenkin k\u00e4ytt\u00e4\u00e4 miss\u00e4 tahansa erikoistapauksessa,<\/li>\n\n\n\n<li>Ehdollisen k\u00e4skyn polymorfismin korvaaminen.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Esimerkki<\/h2>\n\n\n\n<p>T\u00e4m\u00e4 on artikkeli aiheesta <strong>refaktorointi<\/strong> ja tarvitaan esimerkki. Haluan n\u00e4ytt\u00e4\u00e4 alla yksinkertaisen refaktorointin\u00e4ytteen, jossa k\u00e4ytet\u00e4\u00e4n ty\u00f6kalua <b>Sis\u00e4\u00e4nrakennetun lausekkeen ohittaminen<\/b> ja <b>Ehdollisen k\u00e4skyn polymorfismin korvaaminen<\/b>. Oletetaan, ett\u00e4 meill\u00e4 on ohjelmatoiminto, joka palauttaa a <a href=\"https:\/\/thecodest.co\/fi\/blog\/hash-to-use-or-not-to-use\/\">hash<\/a> tietoa siit\u00e4, miten kasveja kastellaan tosiel\u00e4m\u00e4ss\u00e4. T\u00e4llainen tieto olisi luultavasti mallissa, mutta t\u00e4ss\u00e4 esimerkiss\u00e4 se on funktiossa.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(kasvi)\n     result = {}\n     if plant.is_a? Suculent || plant.is_a? Kaktus\n         result = { water_amount: \", how_to: \"Alhaalta\", watering_duration: \"2 weeks\" }\n     elsif plant.is_a? Alocasia || plant.is_a? Maranta\n         result = { water_amount: \"Big amount\", how_to: \"As you prefer\", watering_duration: \"5 p\u00e4iv\u00e4\u00e4\" }\n     elsif plant.is_a? Peperomia\n         result = { water_amount: \"Dicent amount\",\n             how_to: \"Alhaalta! ne eiv\u00e4t pid\u00e4 vedest\u00e4 lehdill\u00e4\",\n             watering_duration: \"1 week\" }\n     else\n         result = { water_amount: \"Dicent amount\",\n             how_to: \"As you prefer\",\n             watering_duration: \"1 week\"\n             }\n     end\n     return result\n end\n<\/code><\/pre>\n\n\n\n<p>Ajatuksena on muuttaa, jos palata:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">if plant.isa? Suculent || plant.isa? Cactus\n\n     result = { wateramount: \", howto: \"Alhaalta\",\n<\/code><\/pre>\n\n\n\n<p>Osoitteeseen<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\"><code>return { water_amount: \", how_to: \"Alhaalta\",watering_duration: \"2 weeks\" } if plant.is_a? Suculent || plant.is_a? Kaktus<\/code><\/code><\/pre>\n\n\n\n<p>return { vesi<em>m\u00e4\u00e4r\u00e4: \"V\u00e4h\u00e4n\" , miten<\/em>to: \"Alhaalta\", kastelu<em>kesto: on: \"2 viikkoa\" } if plant.is<\/em>a? Suculent || plant.is_a? Kaktus<\/p>\n\n\n\n<p>Ja niin edelleen, kunnes saamme aikaan funktion, joka n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(kasvi)\n\nreturn result = { wateramount: \", howto: \"Alhaalta\", wateringduration: \"2 weeks\" } if plant.isa? Suculent || plant.is_a? Kaktus\n\nreturn result = { wateramount: \"Big amount\", howto: \"As you prefer\", wateringduration: \"5 days\" } if plant.isa? Alocasia || plant.is_a? Maranta\n\nreturn result = { water_amount: \"Dicent amount\",\n\n          howto: \"Alhaalta! ne eiv\u00e4t pid\u00e4 vedest\u00e4 lehdill\u00e4\",\n          wateringduration: \"1 week\" } if plant.is_a? Peperomia\n\nreturn result = { water_amount: \"Dicent amount\",\n\n          how_to: \"As you prefer\",\n\n          kastelun_kesto: \"1 viikko\"\n\n          }\n\nend<\/code><\/pre>\n\n\n\n<p>\u00a0Aivan lopussa meill\u00e4 oli jo palautustulos. Ja hyv\u00e4 tapa on tehd\u00e4 t\u00e4m\u00e4 vaihe vaiheelta ja testata jokainen muutos. Voisit korvata t\u00e4m\u00e4n if-lohkon switch-tapauksella, ja se n\u00e4ytt\u00e4isi heti paremmalta, eik\u00e4 sinun tarvitsisi tarkistaa kaikkia if-lohkoja joka kerta. Se n\u00e4ytt\u00e4isi t\u00e4lt\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(kasvi)\n\nswich plant.class.to_string\n\ncase Sukkulentti, Kaktus\n\n     { wateramount: \"A little bit \" , howto: \"Alhaalta\", watering_duration: \"2 weeks\" }\n\ncase Alocasia, Maranta\n\n     { wateramount: \"Big amount\", howto: \"As you prefer\", watering_duration: \"5 days\" }\n\ncase Peperomia\n\n     { water_amount: \"Dicent amount\",\n\n          how_to: \"Alhaalta! ne eiv\u00e4t pid\u00e4 vedest\u00e4 lehdill\u00e4\",\n\n          kastelun_kesto: \"1 viikko\" }\n\nelse\n\n     { water_amount: \"Dicent amount\",\n\n            how_to: \"Miten haluat\",\n\n       kastelun_kesto: \"1 week\" }\n\nend\n\nend<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Ja sitten voit soveltaa <b>Ehdollisen k\u00e4skyn korvaaminen polymorfismilla<\/b>. T\u00e4m\u00e4n tarkoituksena on luoda luokka, jossa on funktio, joka palauttaa oikean arvon ja vaihtaa ne oikeisiin paikkoihinsa.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">luokka Suculent\n\n...\n\ndef watering_info()\n\n     return { wateramount: \", howto: \"Alhaalta\", watering_duration: \"2 weeks\" }\n\nend\n\nend\n\nluokka Kaktus\n\n...\n\ndef watering_info()\n\n     return { wateramount: \", howto: \"Alhaalta\", watering_duration: \"2 weeks\" }\n\nend\n\nend\n\nluokka Alocasia\n\n...\n\ndef watering_info\n\n     return { wateramount: \"Big amount\", howto: \"As you prefer\", watering_duration: \"5 days\" }\n\nend\n\nend\n\nluokka Maranta\n\n...\n\ndef watering_info\n\n     return { wateramount: \"Big amount\", howto: \"As you prefer\", watering_duration: \"5 days\" }\n\nend\n\nend\n\nluokka Peperomia\n\n...\n\ndef watering_info\n\n     return { water_amount: ,\n\n      how_to: \"Alhaalta! ne eiv\u00e4t pid\u00e4 vedest\u00e4 lehdill\u00e4\",\n\n      kastelun_kesto: \"1 viikko\" }\n\nend\n\nend\n\nluokka Kasvi\n\n...\n\ndef watering_info\n\n     return { water_amount: ,\n\n              how_to: \"As you prefer\",\n\n              kastelun_kesto: \"1 week\" }\n\nend\n\nend<\/code><\/pre>\n\n\n\n<p>Ja p\u00e4\u00e4kastelu_infofunktiossa koodi n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(kasvi)\n\n    plant.map(&amp;:watering_info)\n\nend<\/code><\/pre>\n\n\n\n<p>T\u00e4m\u00e4 toiminto voidaan tietenkin poistaa ja korvata sen sis\u00e4ll\u00f6ll\u00e4. T\u00e4m\u00e4n esimerkin avulla halusin esitell\u00e4 yleisen <strong>refaktorointimalli<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Yhteenveto<\/h2>\n\n\n\n<p><strong>Refaktorointi<\/strong> on suuri aihe. Toivottavasti t\u00e4m\u00e4 artikkeli kannusti lukemaan lis\u00e4\u00e4. N\u00e4m\u00e4 <strong>refaktorointitaidot<\/strong> auttaa sinua l\u00f6yt\u00e4m\u00e4\u00e4n virheet ja parantamaan puhdasta koodia. Suosittelen lukemaan Martinin kirjan (Improving the Design of Existing Code), joka on melko perustavanlaatuinen ja hy\u00f6dyllinen kokoelma s\u00e4\u00e4nt\u00f6j\u00e4, jotka koskevat <strong>refaktorointi<\/strong>. Kirjoittaja n\u00e4ytt\u00e4\u00e4 erilaisia muunnoksia askel askeleelta t\u00e4ydellisen selityksen ja motivaation kanssa sek\u00e4 vinkkej\u00e4 siit\u00e4, miten v\u00e4ltt\u00e4\u00e4 virheit\u00e4. <strong>refaktorointi<\/strong>. Monipuolisuutensa ansiosta se on ihastuttava kirja frontend- ja <strong>backend-kehitt\u00e4j\u00e4t<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/thecodest.co\/careers\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/ruby_developer_hiring.jpeg\" alt=\"Tule Junior Ruby Developer\"\/><\/a><\/figure>\n\n\n\n<p><strong>Lue lis\u00e4\u00e4<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/graphql-ruby-what-about-performance\">GraphQL Ruby. Ent\u00e4 suorituskyky?<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-and-other-means-of-transport\">Kiskot ja muut liikennev\u00e4lineet<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-development-with-tmux-vim-fzf-ripgrep\">Rails-kehitys TMUX, Vim, Fzf + Ripgrep -ohjelmilla<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Ehk\u00e4 kirjoitan jostain, mik\u00e4 on monille itsest\u00e4\u00e4n selv\u00e4\u00e4, mutta ei ehk\u00e4 kaikille. Refaktorointi on mielest\u00e4ni monimutkainen aihe, koska siin\u00e4 muutetaan koodia vaikuttamatta sen toimintaan.<\/p>","protected":false},"author":2,"featured_media":3017,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3016","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>A Quick Primer on Refactoring for Beginners - The Codest<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/fi\/blogi\/nopea-alustus-refaktoroinnista-aloittelijoille\/\" \/>\n<meta property=\"og:locale\" content=\"fi_FI\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A Quick Primer on Refactoring for Beginners\" \/>\n<meta property=\"og:description\" content=\"Perhaps I am writing about something obvious to many, but maybe not to everyone. Refactoring is, I think, a complicated topic because it involves changing the code without affecting its operation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/fi\/blogi\/nopea-alustus-refaktoroinnista-aloittelijoille\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-24T08:53:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-24T11:30:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minuuttia\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"A Quick Primer on Refactoring for Beginners\",\"datePublished\":\"2020-06-24T08:53:38+00:00\",\"dateModified\":\"2026-04-24T11:30:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\"},\"wordCount\":1338,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/regactor.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"fi\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\",\"name\":\"A Quick Primer on Refactoring for Beginners - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/regactor.png\",\"datePublished\":\"2020-06-24T08:53:38+00:00\",\"dateModified\":\"2026-04-24T11:30:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#breadcrumb\"},\"inLanguage\":\"fi\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fi\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/regactor.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/regactor.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Quick Primer on Refactoring for Beginners\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fi\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fi\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fi\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/fi\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Nopea peruskurssi refaktorointiin aloittelijoille - The Codest","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/fi\/blogi\/nopea-alustus-refaktoroinnista-aloittelijoille\/","og_locale":"fi_FI","og_type":"article","og_title":"A Quick Primer on Refactoring for Beginners","og_description":"Perhaps I am writing about something obvious to many, but maybe not to everyone. Refactoring is, I think, a complicated topic because it involves changing the code without affecting its operation.","og_url":"https:\/\/thecodest.co\/fi\/blogi\/nopea-alustus-refaktoroinnista-aloittelijoille\/","og_site_name":"The Codest","article_published_time":"2020-06-24T08:53:38+00:00","article_modified_time":"2026-04-24T11:30:09+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"7 minuuttia"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"A Quick Primer on Refactoring for Beginners","datePublished":"2020-06-24T08:53:38+00:00","dateModified":"2026-04-24T11:30:09+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/"},"wordCount":1338,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png","articleSection":["Software Development"],"inLanguage":"fi","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/","url":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/","name":"Nopea peruskurssi refaktorointiin aloittelijoille - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png","datePublished":"2020-06-24T08:53:38+00:00","dateModified":"2026-04-24T11:30:09+00:00","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#breadcrumb"},"inLanguage":"fi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/"]}]},{"@type":"ImageObject","inLanguage":"fi","@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"A Quick Primer on Refactoring for Beginners"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fi"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"fi","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"fi","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/fi\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/posts\/3016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/comments?post=3016"}],"version-history":[{"count":12,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/posts\/3016\/revisions"}],"predecessor-version":[{"id":7707,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/posts\/3016\/revisions\/7707"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/media\/3017"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/media?parent=3016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/categories?post=3016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/tags?post=3016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}