{"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":"krotki-przewodnik-po-refaktoryzacji-dla-poczatkujacych","status":"publish","type":"post","link":"https:\/\/thecodest.co\/pl\/blog\/a-quick-primer-on-refactoring-for-beginners\/","title":{"rendered":"Szybki przewodnik po refaktoryzacji dla pocz\u0105tkuj\u0105cych"},"content":{"rendered":"<p>Dlatego dla niekt\u00f3rych jest niezrozumia\u0142e, \u017ce <strong>refaktoryzacja<\/strong> jest w\u0142a\u015bciwie dziedzin\u0105 programowania, a tak\u017ce bardzo wa\u017cn\u0105 cz\u0119\u015bci\u0105 pracy programisty. Kod nieustannie ewoluuje, b\u0119dzie modyfikowany tak d\u0142ugo, jak d\u0142ugo b\u0119dzie istnia\u0142a mo\u017cliwo\u015b\u0107 dodawania nowych funkcjonalno\u015bci. Mo\u017ce on jednak przybra\u0107 form\u0119, kt\u00f3ra nie pozwala ju\u017c na efektywne dodawanie nowych funkcjonalno\u015bci i \u0142atwiej by\u0142oby napisa\u0107 ca\u0142y program od nowa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Czym jest refaktoryzacja?<\/h2>\n\n\n\n<p>Zazwyczaj s\u0142yszy si\u0119 odpowied\u017a, \u017ce jest to zmiana struktury kodu poprzez zastosowanie serii przekszta\u0142ce\u0144 refaktoryzacyjnych bez wp\u0142ywu na obserwowalne zachowanie kodu. To prawda. Ostatnio natkn\u0105\u0142em si\u0119 r\u00f3wnie\u017c na definicj\u0119 <b>Martin Fowler<\/b> w swojej ksi\u0105\u017cce <b>\"Ulepszanie projektu istniej\u0105cego kodeksu\"<\/b> gdzie opisuje <strong>refaktoryzacja<\/strong> jako \"wprowadzanie du\u017cych zmian ma\u0142ymi krokami\". Opisuje on <strong>refaktoryzacja<\/strong> jako zmiana kodu nie wp\u0142ywaj\u0105ca na jego dzia\u0142anie, ale podkre\u015bla, \u017ce nale\u017cy to robi\u0107 ma\u0142ymi krokami.<\/p>\n\n\n\n<p>Ksi\u0105\u017cka zaleca r\u00f3wnie\u017c, aby <strong>refaktoryzacja<\/strong> nie wp\u0142ywa na dzia\u0142anie kodu i zaznacza, \u017ce nie ma to \u017cadnego wp\u0142ywu na zaliczenie test\u00f3w w dowolnym momencie. Opisuje krok po kroku, jak bezpiecznie wykona\u0107 <strong>refaktoryzacja<\/strong>. Podoba\u0142a mi si\u0119 jego ksi\u0105\u017cka, poniewa\u017c opisuje proste sztuczki, kt\u00f3re mo\u017cna wykorzysta\u0107 w codziennej pracy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dlaczego potrzebujemy refaktoryzacji?<\/h2>\n\n\n\n<p>&nbsp;Najcz\u0119\u015bciej mo\u017ce by\u0107 potrzebna, gdy chcemy wprowadzi\u0107 now\u0105 funkcjonalno\u015b\u0107, a kod w obecnej wersji na to nie pozwala lub by\u0142oby to trudniejsze bez zmian w kodzie. Przydaje si\u0119 r\u00f3wnie\u017c w przypadkach, gdy dodawanie kolejnych funkcji jest nieop\u0142acalne czasowo, tzn. szybciej by\u0142oby przepisa\u0107 kod od zera. My\u015bl\u0119, \u017ce czasami zapomina si\u0119, \u017ce <strong>refaktoryzacja<\/strong> mo\u017ce sprawi\u0107, \u017ce kod b\u0119dzie czystszy i bardziej czytelny. Martin pisze w swojej ksi\u0105\u017cce, jak przeprowadza refaktoryzacj\u0119, gdy czuje nieprzyjemne zapachy w kodzie i, jak to uj\u0105\u0142, <b>\"zawsze pozostawia miejsce na lepsze\"<\/b>. I tu mnie zaskoczy\u0142 widz\u0105c refaktoryzacj\u0119 jako element codziennej pracy z kodem. Dla mnie kody s\u0105 cz\u0119sto niezrozumia\u0142e, czytanie tego to troch\u0119 do\u015bwiadczenie, bo kod jest cz\u0119sto nieintuicyjny.<\/p>\n\n\n\n<p>Cech\u0105 wyr\u00f3\u017cniaj\u0105c\u0105 dobrze zaprojektowany program jest jego <b>modu\u0142owo\u015b\u0107<\/b>dzi\u0119ki czemu wystarczy zna\u0107 tylko niewielk\u0105 cz\u0119\u015b\u0107 kodu, aby wprowadzi\u0107 wi\u0119kszo\u015b\u0107 modyfikacji. Modu\u0142owo\u015b\u0107 u\u0142atwia tak\u017ce nowym osobom wdro\u017cenie si\u0119 i rozpocz\u0119cie wydajniejszej pracy. Aby osi\u0105gn\u0105\u0107 t\u0119 modu\u0142owo\u015b\u0107, powi\u0105zane elementy programu musz\u0105 by\u0107 zgrupowane razem, a po\u0142\u0105czenia musz\u0105 by\u0107 zrozumia\u0142e i \u0142atwe do znalezienia. Nie ma jednej praktycznej zasady, jak to zrobi\u0107. W miar\u0119 poznawania i rozumienia coraz wi\u0119kszej cz\u0119\u015bci tego, jak kod ma dzia\u0142a\u0107 lepiej, mo\u017cna grupowa\u0107 elementy, ale czasami trzeba te\u017c testowa\u0107 i sprawdza\u0107.<\/p>\n\n\n\n<p>Jedn\u0105 z zasad refaktoryzacji w <b>YAGNI<\/b>Jest to akronim od \"You Aren't Gonna Need It\" i wywodzi si\u0119 od <b>Programowanie eXtreme (XP) <\/b>u\u017cywany g\u0142\u00f3wnie w <strong><a href=\"https:\/\/thecodest.co\/pl\/blog\/how-to-implement-agile-methodology\/\">Zwinno\u015b\u0107<\/a> <a href=\"https:\/\/thecodest.co\/pl\/blog\/8-key-questions-to-ask-your-software-development-outsourcing-partner\/\">rozw\u00f3j oprogramowania<\/a> zespo\u0142y<\/strong>. D\u0142uga historia w skr\u00f3cie, <b>YAGNI<\/b> m\u00f3wi, \u017ce nale\u017cy robi\u0107 tylko rzeczy aktualne. Zasadniczo oznacza to, \u017ce nawet je\u015bli co\u015b mo\u017ce by\u0107 potrzebne w przysz\u0142o\u015bci, nie powinno by\u0107 robione teraz.  Ale nie mo\u017cemy te\u017c zmia\u017cd\u017cy\u0107 dalszych rozszerze\u0144 i tutaj wa\u017cna staje si\u0119 modu\u0142owo\u015b\u0107.<\/p>\n\n\n\n<p>M\u00f3wi\u0105c o <strong>refaktoryzacja<\/strong>Nale\u017cy jednak wspomnie\u0107 o jednym z najwa\u017cniejszych element\u00f3w, czyli testach. W <strong>refaktoryzacja<\/strong>, musimy wiedzie\u0107, \u017ce kod nadal dzia\u0142a, poniewa\u017c <strong>refaktoryzacja<\/strong> nie zmienia sposobu dzia\u0142ania, ale jego struktur\u0119, wi\u0119c wszystkie testy musz\u0105 zosta\u0107 zaliczone. Najlepiej jest uruchamia\u0107 testy dla cz\u0119\u015bci kodu, nad kt\u00f3r\u0105 pracujemy, po ka\u017cdej ma\u0142ej transformacji. Daje to <a href=\"https:\/\/thecodest.co\/pl\/blog\/why-us-companies-are-opting-for-polish-developers\/\">my<\/a> potwierdzenie, \u017ce wszystko dzia\u0142a tak, jak powinno i skraca czas ca\u0142ej operacji. O tym w\u0142a\u015bnie m\u00f3wi Martin w swojej ksi\u0105\u017cce - przeprowadzaj testy tak cz\u0119sto, jak to mo\u017cliwe, aby nie cofa\u0107 si\u0119 o krok i nie traci\u0107 czasu na szukanie transformacji, kt\u00f3ra co\u015b zepsu\u0142a.<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/thecodest.co\/pl\/dictionary\/what-is-code-refactoring\/\">Refaktoryzacja kodu<\/a><\/strong> Bez testowania jest to uci\u0105\u017cliwe i istnieje du\u017ca szansa, \u017ce co\u015b p\u00f3jdzie nie tak. Je\u015bli to mo\u017cliwe, najlepiej by\u0142oby doda\u0107 przynajmniej kilka podstawowych test\u00f3w, kt\u00f3re dadz\u0105 nam troch\u0119 pewno\u015bci, \u017ce kod dzia\u0142a.<\/p>\n\n\n\n<p>Transformacje wymienione poni\u017cej s\u0105 tylko przyk\u0142adami, ale s\u0105 naprawd\u0119 pomocne w codziennym programowaniu:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wyodr\u0119bnianie funkcji i zmiennych - je\u015bli funkcja jest zbyt d\u0142uga, sprawd\u017a, czy istniej\u0105 jakie\u015b pomniejsze funkcje, kt\u00f3re mo\u017cna wyodr\u0119bni\u0107. To samo dotyczy d\u0142ugich linii. Te przekszta\u0142cenia mog\u0105 pom\u00f3c w znalezieniu duplikat\u00f3w w kodzie. Dzi\u0119ki Small Functions kod staje si\u0119 bardziej przejrzysty i zrozumia\u0142y,<\/li>\n\n\n\n<li>Zmiana nazw funkcji i zmiennych - stosowanie prawid\u0142owej konwencji nazewnictwa jest niezb\u0119dne do dobrego programowania. Dobrze dobrane nazwy zmiennych mog\u0105 wiele powiedzie\u0107 o kodzie,<\/li>\n\n\n\n<li>Grupowanie funkcji w klas\u0119 - ta zmiana jest pomocna, gdy dwie klasy wykonuj\u0105 podobne operacje, poniewa\u017c mo\u017ce skr\u00f3ci\u0107 d\u0142ugo\u015b\u0107 klasy,<\/li>\n\n\n\n<li>Overriding the Nested Statement - je\u015bli warunek sprawdza si\u0119 dla specjalnego przypadku, nale\u017cy wyda\u0107 instrukcj\u0119 return, gdy warunek wyst\u0105pi. Tego typu testy s\u0105 cz\u0119sto okre\u015blane jako klauzula ochronna. Zast\u0105pienie zagnie\u017cd\u017conej instrukcji warunkowej instrukcj\u0105 wyj\u015bcia zmienia nacisk w kodzie. Konstrukcja if-else przypisuje r\u00f3wn\u0105 wag\u0119 obu wariantom. Dla osoby czytaj\u0105cej kod jest to informacja, \u017ce ka\u017cdy z nich jest r\u00f3wnie prawdopodobny i wa\u017cny,<\/li>\n\n\n\n<li>Wprowadzenie specjalnego przypadku - je\u015bli u\u017cywasz niekt\u00f3rych warunk\u00f3w w swoim kodzie wiele razy, warto utworzy\u0107 dla nich osobn\u0105 struktur\u0119. W rezultacie wi\u0119kszo\u015b\u0107 sprawdze\u0144 przypadk\u00f3w specjalnych mo\u017cna zast\u0105pi\u0107 prostymi wywo\u0142aniami funkcji. Cz\u0119sto spotykan\u0105 warto\u015bci\u0105, kt\u00f3ra wymaga specjalnego przetwarzania jest null. Dlatego te\u017c wzorzec ten jest cz\u0119sto nazywany obiektem zerowym. Podej\u015bcie to mo\u017ce by\u0107 jednak stosowane w ka\u017cdym szczeg\u00f3lnym przypadku,<\/li>\n\n\n\n<li>Zast\u0105pienie polimorfizmu instrukcji warunkowej.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Przyk\u0142ad<\/h2>\n\n\n\n<p>To jest artyku\u0142 o <strong>refaktoryzacja<\/strong> i potrzebny jest przyk\u0142ad. Poni\u017cej chc\u0119 pokaza\u0107 prost\u0105 pr\u00f3bk\u0119 refaktoryzacji z wykorzystaniem <b>Zast\u0119powanie zagnie\u017cd\u017conej instrukcji<\/b> i <b>Zast\u0105pienie polimorfizmu instrukcji warunkowej<\/b>. Za\u0142\u00f3\u017cmy, \u017ce mamy funkcj\u0119 programu, kt\u00f3ra zwraca warto\u015b\u0107 <a href=\"https:\/\/thecodest.co\/pl\/blog\/hash-to-use-or-not-to-use\/\">hash<\/a> z informacjami o tym, jak podlewa\u0107 ro\u015bliny w prawdziwym \u017cyciu. Takie informacje prawdopodobnie znajdowa\u0142yby si\u0119 w modelu, ale w tym przyk\u0142adzie mamy je w funkcji.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(plant)\n     result = {}\n     if plant.is_a? Suculent || plant.is_a? Cactus\n         result = { water_amount: \"A little bit \" , how_to: \"Od do\u0142u\", watering_duration: \"2 weeks\" }\n     elsif plant.is_a? Alocasia || plant.is_a? Maranta\n         result = { water_amount: \"Du\u017ca ilo\u015b\u0107\", how_to: \"Jak wolisz\", watering_duration: \"5 dni\" }\n     elsif plant.is_a? Peperomia\n         result = { water_amount: \"Dicent amount\",\n             how_to: \"Od do\u0142u! Nie lubi\u0105 wody na li\u015bciach\",\n             watering_duration: \"1 week\" }\n     else\n         result = { water_amount: \"Dicent amount\",\n             how_to: \"Jak wolisz\",\n             watering_duration: \"1 week\"\n             }\n     end\n     return result\n end\n<\/code><\/pre>\n\n\n\n<p>Pomys\u0142 polega na zmianie, je\u015bli ma powr\u00f3ci\u0107:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">if plant.isa? Suculent || plant.isa? Kaktus\n\n     result = { wateramount: \"A little bit \" , howto: \"Od do\u0142u\",\n<\/code><\/pre>\n\n\n\n<p>Do<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\"><code>return { water_amount: \"Troch\u0119 \" , how_to: \"Od do\u0142u\",watering_duration: \"2 tygodnie\" } if plant.is_a? Suculent || plant.is_a? Kaktus<\/code><\/code><\/pre>\n\n\n\n<p>return { water<em>ilo\u015b\u0107: \"Troch\u0119\", jak<\/em>do: \"Od do\u0142u\",nawadnianie<em>duration: \"2 tygodnie\" } if plant.is<\/em>a? Suculent || plant.is_a? Kaktus<\/p>\n\n\n\n<p>I tak dalej, a\u017c dojdziemy do funkcji, kt\u00f3ra wygl\u0105da tak:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(plant)\n\nreturn result = { wateramount: \"Troch\u0119 \" , howto: \"Od do\u0142u\", wateringduration: \"2 tygodnie\" } if plant.isa? Suculent || plant.is_a? Cactus\n\nreturn result = { wateramount: \"Du\u017ca ilo\u015b\u0107\", howto: \"Jak wolisz\", wateringduration: \"5 dni\" } if plant.isa? Alocasia || plant.is_a? Maranta\n\nreturn result = { water_amount: \"Dicent amount\",\n\n          howto: \"Od do\u0142u! Nie lubi\u0105 wody na li\u015bciach\",\n          wateringduration: \"1 tydzie\u0144\" } if plant.is_a? Peperomia\n\nreturn result = { water_amount: \"Dicent amount\",\n\n          how_to: \"Jak wolisz\",\n\n          watering_duration: \"1 week\"\n\n          }\n\nend<\/code><\/pre>\n\n\n\n<p>\u00a0Na samym ko\u0144cu mieli\u015bmy ju\u017c wynik zwrotny. Dobrym nawykiem jest robienie tego krok po kroku i testowanie ka\u017cdej zmiany. M\u00f3g\u0142by\u015b zast\u0105pi\u0107 ten blok if przypadkiem switch i od razu wygl\u0105da\u0142oby to lepiej i nie musia\u0142by\u015b za ka\u017cdym razem sprawdza\u0107 wszystkich if\u00f3w. Wygl\u0105da\u0142oby to tak:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(plant)\n\nswich plant.class.to_string\n\ncase Suculent, Cactus\n\n     { wateramount: \"A little bit \" , howto: \"Od do\u0142u\", watering_duration: \"2 weeks\" }\n\ncase Alocasia, Maranta\n\n     { wateramount: \"Du\u017ca ilo\u015b\u0107\", howto: \"Jak wolisz\", watering_duration: \"5 days\" }\n\ncase Peperomia\n\n     { water_amount: \"Dicent amount\",\n\n          how_to: \"Od do\u0142u! Nie lubi\u0105 wody na li\u015bciach\",\n\n          watering_duration: \"1 week\" }\n\nelse\n\n     { water_amount: \"Dicent amount\",\n\n            how_to: \"Jak wolisz\",\n\n       watering_duration: \"1 week\" }\n\nkoniec\n\nend<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Nast\u0119pnie mo\u017cna zastosowa\u0107 <b>Zast\u0105pienie polimorfizmu instrukcji warunkowych<\/b>. Ma to na celu utworzenie klasy z funkcj\u0105, kt\u00f3ra zwraca prawid\u0142ow\u0105 warto\u015b\u0107 i prze\u0142\u0105cza je we w\u0142a\u015bciwe miejsca.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">Klasa Suculent\n\n...\n\ndef watering_info()\n\n     return { wateramount: \"Troch\u0119 \" , howto: \"Od do\u0142u\", watering_duration: \"2 weeks\" }\n\nend\n\nend\n\nclass Kaktus\n\n...\n\ndef watering_info()\n\n     return { wateramount: \"Troch\u0119 \" , howto: \"Od do\u0142u\", watering_duration: \"2 weeks\" }\n\nend\n\nend\n\nclass Alocasia\n\n...\n\ndef watering_info\n\n     return { wateramount: \"Du\u017ca ilo\u015b\u0107\", howto: \"Jak wolisz\", watering_duration: \"5 days\" }\n\nend\n\nend\n\nclass Maranta\n\n...\n\ndef watering_info\n\n     return { wateramount: \"Du\u017ca ilo\u015b\u0107\", howto: \"Jak wolisz\", watering_duration: \"5 days\" }\n\nend\n\nend\n\nclass Peperomia\n\n...\n\ndef watering_info\n\n     return { water_amount: \"Dicent amount\",\n\n      how_to: \"Od do\u0142u! Nie lubi\u0105 wody na li\u015bciach\",\n\n      watering_duration: \"1 week\" }\n\nend\n\nend\n\nklasa Ro\u015blina\n\n...\n\ndef watering_info\n\n     return { water_amount: \"Dicent amount\",\n\n              how_to: \"Jak wolisz\",\n\n              watering_duration: \"1 week\" }\n\nkoniec\n\nend<\/code><\/pre>\n\n\n\n<p>W g\u0142\u00f3wnej funkcji watering_infofunction kod b\u0119dzie wygl\u0105da\u0142 nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(plant)\n\n    plant.map(&amp;:watering_info)\n\nend<\/code><\/pre>\n\n\n\n<p>Oczywi\u015bcie funkcj\u0119 t\u0119 mo\u017cna usun\u0105\u0107 i zast\u0105pi\u0107 jej tre\u015bci\u0105. W tym przyk\u0142adzie chcia\u0142em zaprezentowa\u0107 og\u00f3lny <strong>wzorzec refaktoryzacji<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p><strong>Refaktoryzacja<\/strong> to wa\u017cny temat. Mam nadziej\u0119, \u017ce ten artyku\u0142 by\u0142 zach\u0119t\u0105 do przeczytania wi\u0119cej. Te <strong>umiej\u0119tno\u015bci refaktoryzacji<\/strong> pom\u00f3c w wy\u0142apywaniu b\u0142\u0119d\u00f3w i doskonaleniu warsztatu czystego kodu. Polecam lektur\u0119 ksi\u0105\u017cki Martina (Improving the Design of Existing Code), kt\u00f3ra jest do\u015b\u0107 podstawowym i pomocnym zbiorem zasad dotycz\u0105cych czystego kodu. <strong>refaktoryzacja<\/strong>. Autor pokazuje r\u00f3\u017cne transformacje krok po kroku z pe\u0142nym wyja\u015bnieniem i motywacj\u0105 oraz wskaz\u00f3wkami, jak unikn\u0105\u0107 b\u0142\u0119d\u00f3w w <strong>refaktoryzacja<\/strong>. Ze wzgl\u0119du na swoj\u0105 wszechstronno\u015b\u0107, jest to wspania\u0142a ksi\u0105\u017cka dla frontendowc\u00f3w i <strong>programi\u015bci backendu<\/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=\"Zosta\u0144 m\u0142odszym programist\u0105 Ruby\"\/><\/a><\/figure>\n\n\n\n<p><strong>Czytaj wi\u0119cej<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/graphql-ruby-what-about-performance\">GraphQL Ruby. Co z wydajno\u015bci\u0105?<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-and-other-means-of-transport\">Szyny i inne \u015brodki transportu<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-development-with-tmux-vim-fzf-ripgrep\">Rails Development z TMUX, Vim, Fzf + Ripgrep<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>By\u0107 mo\u017ce pisz\u0119 o czym\u015b oczywistym dla wielu, ale by\u0107 mo\u017ce nie dla wszystkich. Refaktoryzacja to moim zdaniem skomplikowany temat, poniewa\u017c polega na zmianie kodu bez wp\u0142ywu na jego dzia\u0142anie.<\/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\/pl\/blog\/krotki-przewodnik-po-refaktoryzacji-dla-poczatkujacych\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/blog\/krotki-przewodnik-po-refaktoryzacji-dla-poczatkujacych\/\" \/>\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 minut\" \/>\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\":\"pl-PL\",\"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\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@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\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@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\":\"pl-PL\",\"@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\\\/pl\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Szybki przewodnik po refaktoryzacji dla pocz\u0105tkuj\u0105cych - 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\/pl\/blog\/krotki-przewodnik-po-refaktoryzacji-dla-poczatkujacych\/","og_locale":"pl_PL","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\/pl\/blog\/krotki-przewodnik-po-refaktoryzacji-dla-poczatkujacych\/","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 minut"},"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":"pl-PL","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":"Szybki przewodnik po refaktoryzacji dla pocz\u0105tkuj\u0105cych - 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":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@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":"pl-PL"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@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":"pl-PL","@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\/pl\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/posts\/3016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/comments?post=3016"}],"version-history":[{"count":12,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/posts\/3016\/revisions"}],"predecessor-version":[{"id":7707,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/posts\/3016\/revisions\/7707"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/media\/3017"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/media?parent=3016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/categories?post=3016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/tags?post=3016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}