{"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":"iss-ievads-par-refaktorizaciju-iesacejiem","status":"publish","type":"post","link":"https:\/\/thecodest.co\/lv\/blog\/a-quick-primer-on-refactoring-for-beginners\/","title":{"rendered":"\u012ass ievads par Refactoring ies\u0101c\u0113jiem"},"content":{"rendered":"<p>T\u0101p\u0113c da\u017eiem ir nesaprotami, ka <strong>refactoring<\/strong> paties\u012bb\u0101 ir programm\u0113\u0161anas joma, un t\u0101 ir ar\u012b \u013coti svar\u012bga programm\u0113t\u0101ja darba da\u013ca. Kods nep\u0101rtraukti att\u012bst\u0101s, tas tiks p\u0101rveidots, kam\u0113r vien b\u016bs iesp\u0113ja pievienot jaunas funkcionalit\u0101tes. Tom\u0113r tas var ieg\u016bt t\u0101du formu, kas vairs ne\u013cauj efekt\u012bvi pievienot jaunas funkcionalit\u0101tes, un viegl\u0101k b\u016btu visu programmu p\u0101rrakst\u012bt no jauna.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kas ir refaktoriz\u0101cija?<\/h2>\n\n\n\n<p>Parasti atbilde, ko dzirdat, ir, ka t\u0101 ir koda strukt\u016bras mai\u0146a, piem\u0113rojot virkni refaktoriz\u0101cijas transform\u0101ciju, neietekm\u0113jot nov\u0113rojamo koda uzved\u012bbu. T\u0101 ir taisn\u012bba. Nesen es sask\u0101ros ar\u012b ar defin\u012bciju, ko sniedz <b>Martins Faulers (Martin Fowler)<\/b> sav\u0101 gr\u0101mat\u0101 <b>\u201cEso\u0161\u0101 kodeksa dizaina uzlabo\u0161ana\u201d<\/b> kur vi\u0146\u0161 apraksta <strong>refactoring<\/strong> k\u0101 \u201cveikt lielas p\u0101rmai\u0146as ar maziem so\u013ciem\u201d. Vi\u0146\u0161 apraksta <strong>refactoring<\/strong> k\u0101 izmai\u0146as kod\u0101, kas neietekm\u0113 t\u0101 darb\u012bbu, ta\u010du vi\u0146\u0161 uzsver, ka tas j\u0101dara mazos so\u013cos.<\/p>\n\n\n\n<p>Gr\u0101mat\u0101 ar\u012b atbalst\u012bts, ka <strong>refactoring<\/strong> neietekm\u0113 koda darb\u012bbu un nor\u0101da, ka tas nek\u0101d\u0101 gad\u012bjum\u0101 neietekm\u0113 testu izpildi. Taj\u0101 soli pa solim aprakst\u012bts, k\u0101 dro\u0161i veikt <strong>refactoring<\/strong>. Man patika vi\u0146a gr\u0101mata, jo taj\u0101 aprakst\u012bti vienk\u0101r\u0161i triki, kurus var izmantot ikdienas darb\u0101.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">K\u0101p\u0113c mums ir nepiecie\u0161ama refaktoriz\u0101cija?<\/h2>\n\n\n\n<p>&nbsp;Visbie\u017e\u0101k tas var b\u016bt nepiecie\u0161ams, ja v\u0113laties ieviest jaunu funkcionalit\u0101ti, bet pa\u0161reiz\u0113j\u0101 koda versija to ne\u013cauj vai bez izmai\u0146\u0101m kod\u0101 tas b\u016btu sare\u017e\u0123\u012bt\u0101k. T\u0101pat t\u0101 ir noder\u012bga gad\u012bjumos, kad pievienot vair\u0101k funkciju ir neizdev\u012bgi laika zi\u0146\u0101, proti, \u0101tr\u0101k b\u016btu kodu p\u0101rrakst\u012bt no jauna. Manupr\u0101t, da\u017ek\u0101rt tiek aizmirsts, ka <strong>refactoring<\/strong> var padar\u012bt kodu t\u012br\u0101ku un las\u0101m\u0101ku. Martins sav\u0101 gr\u0101mat\u0101 raksta, k\u0101 vi\u0146\u0161 veic refaktoriz\u0101ciju, kad j\u016bt nepat\u012bkamas smakas kod\u0101, un, k\u0101 vi\u0146\u0161 to izsaka, <b>\u201ctas vienm\u0113r atst\u0101j vietu lab\u0101kam\u201d<\/b>. Un vi\u0146\u0161 mani p\u0101rsteidza ar to, ka refaktoriz\u0101ciju uzskata par ikdienas darba ar kodu elementu. Man kodi bie\u017ei vien ir nesaprotami, to las\u012b\u0161ana ir neliels p\u0101rdz\u012bvojums, jo kods bie\u017ei vien ir neintuit\u012bvs.<\/p>\n\n\n\n<p>Labi izstr\u0101d\u0101tas programmas at\u0161\u0137ir\u012bg\u0101 iez\u012bme ir t\u0101s <b>Modularit\u0101te<\/b>, pateicoties kam pietiek zin\u0101t tikai nelielu da\u013cu koda, lai ieviestu liel\u0101ko da\u013cu modifik\u0101ciju. Modularit\u0101te ar\u012b atvieglo jaunu cilv\u0113ku iesaisti un \u013cauj efekt\u012bv\u0101k s\u0101kt darbu. Lai pan\u0101ktu \u0161o modularit\u0101ti, saist\u012btajiem programmas elementiem j\u0101b\u016bt sagrup\u0113tiem kop\u0101, savienojumiem j\u0101b\u016bt saprotamiem un viegli atrodamiem. Nav vienotu noteikumu, k\u0101 to izdar\u012bt. Zinot un saprotot arvien vair\u0101k un lab\u0101k, k\u0101 kodam ir j\u0101str\u0101d\u0101, j\u016bs varat sagrup\u0113t elementus, bet da\u017ereiz ir ar\u012b j\u0101test\u0113 un j\u0101p\u0101rbauda.<\/p>\n\n\n\n<p>Viens no refaktoriz\u0101cijas noteikumiem <b>YAGNI<\/b>, tas ir akron\u012bms, kas noz\u012bm\u0113 \u2018Tev tas neb\u016bs vajadz\u012bgs\u2019, un t\u0101 izcelsme mekl\u0113jama <b>eXtreme programm\u0113\u0161ana (XP) <\/b>ko galvenok\u0101rt izmanto <strong><a href=\"https:\/\/thecodest.co\/lv\/blog\/how-to-implement-agile-methodology\/\">Agile<\/a> <a href=\"https:\/\/thecodest.co\/lv\/blog\/8-key-questions-to-ask-your-software-development-outsourcing-partner\/\">programmat\u016bras izstr\u0101de<\/a> komandas<\/strong>. \u012ass st\u0101sts, <b>YAGNI<\/b> teikts, ka ir j\u0101veic tikai aktu\u0101li darbi. Tas b\u016bt\u012bb\u0101 noz\u012bm\u0113, ka pat tad, ja kaut kas var\u0113tu b\u016bt nepiecie\u0161ams n\u0101kotn\u0113, to nevajadz\u0113tu dar\u012bt tie\u0161i tagad.  Ta\u010du m\u0113s ar\u012b nevaram sagraut turpm\u0101kus papla\u0161in\u0101jumus, un tie\u0161i \u0161eit modularit\u0101te k\u013c\u016bst svar\u012bga.<\/p>\n\n\n\n<p>Run\u0101jot par <strong>refactoring<\/strong>, j\u0101min viens no b\u016btisk\u0101kajiem elementiem, proti, testi. In <strong>refactoring<\/strong>, mums ir j\u0101zina, ka kods joproj\u0101m darbojas, jo <strong>refactoring<\/strong> nemaina t\u0101 darb\u012bbu, bet gan strukt\u016bru, t\u0101p\u0113c visi testi ir j\u0101iztur. Vislab\u0101k ir p\u0113c katras nelielas p\u0101rveido\u0161anas palaist testus tai koda da\u013cai, ar kuru m\u0113s str\u0101d\u0101jam. Tas dod <a href=\"https:\/\/thecodest.co\/lv\/blog\/why-us-companies-are-opting-for-polish-developers\/\">mums<\/a> apstiprin\u0101jums, ka viss darbojas k\u0101 n\u0101kas, un tas sa\u012bsina visas oper\u0101cijas laiku. Tie\u0161i par to sav\u0101 gr\u0101mat\u0101 run\u0101 Martins - p\u0113c iesp\u0113jas bie\u017e\u0101k veikt testus, lai nevajadz\u0113tu spert soli atpaka\u013c un t\u0113r\u0113t laiku, mekl\u0113jot transform\u0101ciju, kas kaut ko saboj\u0101jusi.<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/thecodest.co\/lv\/dictionary\/what-is-code-refactoring\/\">Koda refaktoriz\u0101cija<\/a><\/strong> bez test\u0113\u0161anas ir s\u0101p\u012bgi, un past\u0101v liela iesp\u0113ja, ka kaut kas b\u016bs nepareizi. Ja tas ir iesp\u0113jams, vislab\u0101k b\u016btu pievienot vismaz da\u017eus pamata testus, kas mums sniegtu nelielu p\u0101rliec\u012bbu, ka kods darbojas.<\/p>\n\n\n\n<p>Turpm\u0101k uzskait\u012bt\u0101s transform\u0101cijas ir tikai piem\u0113ri, ta\u010du t\u0101s ir \u013coti noder\u012bgas ikdienas programm\u0113\u0161an\u0101:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Funkciju un main\u012bgo izvilk\u0161ana - ja funkcija ir p\u0101r\u0101k gara, p\u0101rbaudiet, vai nav maz\u0101k svar\u012bgu funkciju, ko var\u0113tu izvilkt. Tas pats attiecas uz gar\u0101m rind\u0101m. \u0160\u012bs transform\u0101cijas var pal\u012bdz\u0113t atrast dubl\u0113\u0161anos kod\u0101. Pateicoties mazaj\u0101m funkcij\u0101m, kods k\u013c\u016bst skaidr\u0101ks un saprotam\u0101ks,<\/li>\n\n\n\n<li>Funkciju un main\u012bgo p\u0101rd\u0113v\u0113\u0161ana - pareizas nosaukumu pie\u0161\u0137ir\u0161anas konvencijas izmanto\u0161ana ir b\u016btiska labai programm\u0113\u0161anai. Labi izv\u0113l\u0113ti main\u012bgo nosaukumi var daudz ko past\u0101st\u012bt par kodu,<\/li>\n\n\n\n<li>Funkciju grup\u0113\u0161ana vien\u0101 klas\u0113 - \u0161\u012b izmai\u0146a ir noder\u012bga, ja divas klases veic l\u012bdz\u012bgas darb\u012bbas, jo t\u0101 var sa\u012bsin\u0101t klases garumu,<\/li>\n\n\n\n<li>P\u0101rraksto\u0161ais ieliktais pazi\u0146ojums - ja nosac\u012bjums tiek p\u0101rbaud\u012bts \u012bpa\u0161am gad\u012bjumam, izdodiet atgrie\u0161anas pazi\u0146ojumu, kad nosac\u012bjums ir izpild\u012bts. \u0160\u0101da veida testus bie\u017ei d\u0113v\u0113 par aizsargteikumu. Ievietot\u0101 nosac\u012bjuma izteikuma aizst\u0101\u0161ana ar izejas izteikumu maina uzsvaru kod\u0101. If-else konstrukcij\u0101 abiem variantiem tiek pie\u0161\u0137irta vien\u0101da noz\u012bme. Personai, kas lasa kodu, tas ir v\u0113st\u012bjums, ka katrs no tiem ir vienl\u012bdz iesp\u0113jams un svar\u012bgs,<\/li>\n\n\n\n<li>\u012apa\u0161a gad\u012bjuma ievie\u0161ana - ja da\u017eus nosac\u012bjumus kod\u0101 izmantojat vair\u0101kk\u0101rt, iesp\u0113jams, ir v\u0113rts tiem izveidot atsevi\u0161\u0137u strukt\u016bru. Rezult\u0101t\u0101 liel\u0101ko da\u013cu \u012bpa\u0161o gad\u012bjumu p\u0101rbau\u017eu var aizst\u0101t ar vienk\u0101r\u0161iem funkciju izsaukumiem. Bie\u017ei vien parast\u0101 v\u0113rt\u012bba, kurai nepiecie\u0161ama \u012bpa\u0161a apstr\u0101de, ir nulle. T\u0101p\u0113c \u0161o modeli bie\u017ei sauc par nulles objektu. Tom\u0113r \u0161o pieeju var izmantot jebkur\u0101 \u012bpa\u0161\u0101 gad\u012bjum\u0101,<\/li>\n\n\n\n<li>Nosac\u012bjuma instrukcijas polimorfisma aizst\u0101\u0161ana.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Piem\u0113rs<\/h2>\n\n\n\n<p>\u0160is ir raksts par <strong>refactoring<\/strong> un ir nepiecie\u0161ams piem\u0113rs. Turpm\u0101k es v\u0113los par\u0101d\u012bt vienk\u0101r\u0161u refaktoriz\u0101cijas paraugu, izmantojot <b>Iestr\u0101d\u0101t\u0101 izteikuma p\u0101rrakst\u012b\u0161ana<\/b> un <b>Nosac\u012bjuma instrukcijas polimorfisma aizst\u0101\u0161ana<\/b>. Pie\u0146emsim, ka mums ir programmas funkcija, kas atgrie\u017e a <a href=\"https:\/\/thecodest.co\/lv\/blog\/hash-to-use-or-not-to-use\/\">hash<\/a> ar inform\u0101ciju par to, k\u0101 laist\u012bt augus re\u0101laj\u0101 dz\u012bv\u0113. \u0160\u0101da inform\u0101cija, iesp\u0113jams, b\u016btu iek\u013cauta model\u012b, bet \u0161aj\u0101 piem\u0113r\u0101 t\u0101 ir iek\u013cauta funkcij\u0101.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def laist\u012b\u0161anas_info(augs)\n     result = {}\n     if plant.is_a? Suculent || plant.is_a? Kaktuss\n         result = { water_amount: \" , how_to: \"No apak\u0161as\", laist\u012b\u0161anas ilgums: \"2 ned\u0113\u013cas\" }\n     elsif plant.is_a? Alocasia || plant.is_a? Maranta\n         result = { water_amount: \"Liels daudzums\", how_to: laist\u012b\u0161anas_ilgums: \"K\u0101 v\u0113laties\", laist\u012b\u0161anas_ilgums: \"5 dienas\" }\n     elsif plant.is_a? Peperomia\n         result = { water_amount: \"Dicent amount\",\n             how_to: \"No apak\u0161as! t\u0101m nepat\u012bk \u016bdens uz lap\u0101m\",\n             laist\u012b\u0161anas ilgums: \"1 ned\u0113\u013ca\" }\n     cit\u0101di\n         result = { water_amount: \"Dicent amount\",\n             how_to: \"K\u0101 v\u0113laties\",\n             laist\u012b\u0161anas ilgums: \"1 ned\u0113\u013ca\"\n             }\n     beigas\n     return result\n beigas\n<\/code><\/pre>\n\n\n\n<p>Ideja ir main\u012bt, ja atgriezties:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">ja plant.isa? Suculent || plant.isa? Cactus\n\n     result = { wateramount: \"A little bit \" , howto: \"No apak\u0161as\",\n<\/code><\/pre>\n\n\n\n<p>Uz<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\"><code>return { water_amount: \" , how_to: \"No apak\u0161as\",laist\u012b\u0161anas_ilgums: \"2 ned\u0113\u013cas\" } if plant.is_a? Suculent || plant.is_a? Kaktuss<\/code><\/code><\/pre>\n\n\n\n<p>atgriezties { \u016bdens<em>summa: \u201cNedaudz\u201d , k\u0101<\/em>uz: \u201cNo apak\u0161as\u201d, laist\u012b\u0161ana<em>ilgums: \u201c2 ned\u0113\u013cas\u201d } if plant.is<\/em>a? Sukulents || plant.is_a? Kaktuss<\/p>\n\n\n\n<p>Un t\u0101 t\u0101l\u0101k, l\u012bdz non\u0101kam pie funkcijas, kas izskat\u0101s \u0161\u0101di:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def laist\u012b\u0161anas_info(augs)\n\nreturn result = { wateramount: \" , howto: \"No apak\u0161as\", wateringduration: \"2 ned\u0113\u013cas\" } if plant.isa? Suculent || plant.is_a? Cactus\n\nreturn result = { wateramount: \"Liels daudzums\", howto: \"K\u0101 v\u0113laties\", wateringduration: \"5 dienas\" } if plant.isa? Alocasia || plant.is_a? Maranta\n\nreturn result = { water_amount: \"Dicent amount\",\n\n          howto: \"No apak\u0161as! vi\u0146iem nepat\u012bk \u016bdens uz lap\u0101m\",\n          wateringduration: \"1 ned\u0113\u013ca\" } if plant.is_a? Peperomia\n\nreturn result = { water_amount: \"Dicent amount\",\n\n          how_to: \"K\u0101 v\u0113laties\",\n\n          laist\u012b\u0161anas ilgums: \"1 ned\u0113\u013ca\"\n\n          }\n\nbeigas<\/code><\/pre>\n\n\n\n<p>\u00a0Pa\u0161\u0101s beig\u0101s mums jau bija atgrie\u0161an\u0101s rezult\u0101ts. Labs ieradums ir to dar\u012bt soli pa solim un p\u0101rbaud\u012bt katru izmai\u0146u. J\u016bs var\u0113tu aizst\u0101t \u0161o if bloku ar komutatora gad\u012bjumu, un tas uzreiz izskat\u012btos lab\u0101k, un jums neb\u016btu katru reizi j\u0101p\u0101rbauda visi if. Tas izskat\u012btos \u0161\u0101di:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def laist\u012b\u0161anas_info(augs)\n\nswich plant.class.to_string\n\ncase sukulents, kaktuss\n\n     { wateramount: \"A little bit \" , howto: \"No apak\u0161as\", laist\u012b\u0161anas ilgums: \"2 ned\u0113\u013cas\" }\n\ngad\u012bjums Alocasia, Maranta\n\n     { wateramount: \"Liels daudzums\", howto: laist\u012b\u0161anas ilgums: \"K\u0101 v\u0113laties\", laist\u012b\u0161anas ilgums: \"5 dienas\" }\n\ngad\u012bjums Peperomia\n\n     { water_amount: \"Dicent amount\",\n\n          how_to: \"No apak\u0161as! tiem nepat\u012bk \u016bdens uz lap\u0101m\",\n\n          laist\u012b\u0161anas ilgums: \"1 ned\u0113\u013ca\" }\n\ncit\u0101di\n\n     { water_amount: \"Dicent amount\",\n\n            how_to: \"K\u0101 v\u0113laties\",\n\n       laist\u012b\u0161anas ilgums: \"1 ned\u0113\u013ca\u201d }\n\nbeigas\n\nbeigas<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Un p\u0113c tam varat izmantot <b>Nosac\u012bjuma instrukcijas polimorfisma aizst\u0101\u0161ana<\/b>. Tas ir, lai izveidotu klasi ar funkciju, kas atgrie\u017e pareizo v\u0113rt\u012bbu un p\u0101rsl\u0113dz t\u0101s pareizaj\u0101s viet\u0101s.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">klase Sul\u012bgs\n\n...\n\ndef laist\u012b\u0161anas_info()\n\n     return { wateramount: \" , howto: \"No apak\u0161as\", laist\u012b\u0161anas ilgums: \"2 ned\u0113\u013cas\" }\n\nbeigas\n\nbeigas\n\nklase Cactus\n\n...\n\ndef laist\u012b\u0161anas_info()\n\n     return { wateramount: \" , howto: \"No apak\u0161as\", laist\u012b\u0161anas ilgums: \"2 ned\u0113\u013cas\" }\n\nbeigas\n\nbeigas\n\nklase Alocasia\n\n...\n\ndef laist\u012b\u0161anas_info\n\n     return { wateramount: \"Liels daudzums\", howto: laist\u012b\u0161anas ilgums: \"K\u0101 v\u0113laties\", watering_duration: \"5 dienas\" }\n\nbeigas\n\nbeigas\n\nklase Maranta\n\n...\n\ndef laist\u012b\u0161anas_info\n\n     return { wateramount: \"Liels daudzums\", howto: laist\u012b\u0161anas ilgums: \"K\u0101 v\u0113laties\", watering_duration: \"5 dienas\" }\n\nbeigas\n\nbeigas\n\nklase Peperomia\n\n...\n\ndef laist\u012b\u0161anas_info\n\n     return { water_amount: \"Dicent amount\",\n\n      how_to: \"No apak\u0161as! vi\u0146iem nepat\u012bk \u016bdens uz lap\u0101m\",\n\n      laist\u012b\u0161anas ilgums: \"1 ned\u0113\u013ca\" }\n\nbeigas\n\nbeigas\n\nklase Plant\n\n...\n\ndef laist\u012b\u0161anas_info\n\n     return { water_amount: \"Dicent amount\",\n\n              how_to: \"K\u0101 v\u0113laties\",\n\n              laist\u012b\u0161anas ilgums: \"1 ned\u0113\u013ca\" }\n\nbeigas\n\nbeigas<\/code><\/pre>\n\n\n\n<p>Un galvenaj\u0101 laist\u012b\u0161anas_infofunkcij\u0101 kods izskat\u012bsies \u0161\u0101di:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def laist\u012b\u0161anas_info(augs)\n\n    plant.map(&amp;:watering_info)\n\nend<\/code><\/pre>\n\n\n\n<p>Protams, \u0161o funkciju var no\u0146emt un aizst\u0101t ar t\u0101s saturu. Ar \u0161o piem\u0113ru es grib\u0113ju par\u0101d\u012bt visp\u0101r\u0113jo <strong>refaktoriz\u0101cijas modelis<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kopsavilkums<\/h2>\n\n\n\n<p><strong>P\u0101rstr\u0101d\u0101\u0161ana<\/strong> ir liels temats. Es ceru, ka \u0161is raksts bija pamudin\u0101jums las\u012bt vair\u0101k. \u0160ie <strong>refaktoriz\u0113\u0161anas prasmes<\/strong> pal\u012bdz\u0113s jums no\u0137ert k\u013c\u016bdas un uzlabot t\u012bra koda darbn\u012bcu. Es iesaku izlas\u012bt Martina gr\u0101matu (Improving the Design of Existing Code), kas ir diezgan vienk\u0101r\u0161s un noder\u012bgs noteikumu kopums par to, k\u0101 uzlabot eso\u0161o kodu. <strong>refactoring<\/strong>. Autors soli pa solim r\u0101da da\u017e\u0101das transform\u0101cijas ar pilnu skaidrojumu un motiv\u0101ciju, k\u0101 ar\u012b padomus, k\u0101 izvair\u012bties no k\u013c\u016bd\u0101m, kas tiek dar\u012btas, lai. <strong>refactoring<\/strong>. Pateicoties t\u0101s daudzpus\u012bbai, t\u0101 ir lieliska gr\u0101mata gan frontend, gan <strong>backend izstr\u0101d\u0101t\u0101ji<\/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=\"K\u013c\u016bsti par jaun\u0101ko Ruby programm\u0113t\u0101ju\"\/><\/a><\/figure>\n\n\n\n<p><strong>Las\u012bt vair\u0101k<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/graphql-ruby-what-about-performance\">GraphQL Ruby. K\u0101 ir ar veiktsp\u0113ju?<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-and-other-means-of-transport\">Sliedes un citi transporta l\u012bdzek\u013ci<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-development-with-tmux-vim-fzf-ripgrep\">Rails att\u012bst\u012bba ar TMUX, Vim, Fzf + Ripgrep<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Iesp\u0113jams, es rakstu par kaut ko, kas daudziem ir ac\u012bmredzams, bet varb\u016bt ne visiem. Manupr\u0101t, refaktoriz\u0101cija ir sare\u017e\u0123\u012bta t\u0113ma, jo t\u0101 ietver koda mai\u0146u, neietekm\u0113jot t\u0101 darb\u012bbu.<\/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\/lv\/emuars\/iss-ievads-par-refaktorizaciju-iesacejiem\/\" \/>\n<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/emuars\/iss-ievads-par-refaktorizaciju-iesacejiem\/\" \/>\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 min\u016btes\" \/>\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\":\"lv-LV\",\"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\":\"lv-LV\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"lv-LV\",\"@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\":\"lv-LV\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lv-LV\",\"@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\":\"lv-LV\",\"@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\\\/lv\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u012ass ievads par Refactoring ies\u0101c\u0113jiem - 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\/lv\/emuars\/iss-ievads-par-refaktorizaciju-iesacejiem\/","og_locale":"lv_LV","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\/lv\/emuars\/iss-ievads-par-refaktorizaciju-iesacejiem\/","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 min\u016btes"},"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":"lv-LV","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":"\u012ass ievads par Refactoring ies\u0101c\u0113jiem - 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":"lv-LV","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/"]}]},{"@type":"ImageObject","inLanguage":"lv-LV","@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":"lv-LV"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"lv-LV","@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":"lv-LV","@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\/lv\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/comments?post=3016"}],"version-history":[{"count":12,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3016\/revisions"}],"predecessor-version":[{"id":7707,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3016\/revisions\/7707"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/media\/3017"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/media?parent=3016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/categories?post=3016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/tags?post=3016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}