(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': data().getTime(),įvykis:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Greitas pradedančiųjų "Refactoring" pradžiamokslis - The Codest
The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2020-06-24
Programinės įrangos kūrimas

Greitas pradedančiųjų refaktorizavimo pradžiamokslis

The Codest

Marta Swiatkowska

Jaunesnysis Software Engineer

Galbūt rašau apie tai, kas daugeliui akivaizdu, bet galbūt ne visiems. Manau, kad refaktoringas yra sudėtinga tema, nes jis apima kodo keitimą nedarant įtakos jo veikimui.

Todėl kai kuriems nesuprantama, kad refaktoringas iš tikrųjų yra programavimo sritis, be to, tai labai svarbi programuotojo darbo dalis. Kodas nuolat tobulėja, jis bus keičiamas tol, kol bus galimybė pridėti naujų funkcijų. Tačiau jis gali įgauti tokią formą, kuri nebeleis efektyviai pridėti naujų funkcijų, ir bus paprasčiau perrašyti visą programą iš naujo.

Kas yra refaktoringas?

Paprastai išgirstate atsakymą, kad tai yra kodo struktūros keitimas, taikant keletą refaktorizavimo transformacijų, nedarant įtakos stebimam kodo elgesiui. Tai tiesa. Neseniai taip pat susidūriau su apibrėžimu pagal Martin Fowler savo knygoje “Esamo kodekso projektavimo tobulinimas” kur jis aprašo refaktoringas kaip “didelių pokyčių darymas mažais žingsneliais”. Jis apibūdina refaktoringas kaip kodo pakeitimas, neturintis įtakos jo veikimui, tačiau jis pabrėžia, kad tai turi būti daroma mažais žingsneliais.

Knygoje taip pat rekomenduojama, kad refaktoringas neturi įtakos kodo veikimui ir nurodo, kad ji neturi jokios įtakos testų išlaikymui bet kuriuo metu. Jame žingsnis po žingsnio aprašoma, kaip saugiai atlikti refaktoringas. Man patiko jo knyga, nes joje aprašomos paprastos gudrybės, kurias galima naudoti kasdieniame darbe.

Kodėl mums reikia refaktorizavimo?

 Dažniausiai jos gali prireikti, kai norite įdiegti naują funkciją, o dabartinės versijos kodas to neleidžia arba tai padaryti būtų sudėtingiau nekeičiant kodo. Be to, jis naudingas tais atvejais, kai pridėti daugiau funkcijų neapsimoka laiko atžvilgiu, t. y. greičiau būtų perrašyti kodą iš naujo. Manau, kartais pamirštama, kad refaktoringas kodas gali būti švaresnis ir lengviau skaitomas. Martinas savo knygoje rašo, kaip jis atlieka refaktorizaciją, kai jaučia nemalonius kvapus kode, ir, kaip jis sako, “visada lieka vietos geresniam”. Ir čia jis mane nustebino matydamas refaktoringą kaip kasdienio darbo su kodu elementą. Man kodai dažnai būna nesuprantami, juos skaityti yra šiek tiek patirtis, nes kodas dažnai būna neintuityvus.

Gerai parengtos programos skiriamasis bruožas yra jos Moduliarumas, dėl kurios pakanka žinoti tik nedidelę kodo dalį, kad būtų galima atlikti daugumą pakeitimų. Be to, dėl modulinės struktūros naujiems žmonėms lengviau įsitraukti ir efektyviau pradėti dirbti. Norint pasiekti tokį modulinį pobūdį, susiję programos elementai turi būti sugrupuoti, o ryšiai turi būti suprantami ir lengvai randami. Vienos taisyklės, kaip tai padaryti, nėra. Kai vis geriau žinote ir suprantate, kaip kodas turėtų veikti, galite grupuoti elementus, tačiau kartais taip pat tenka testuoti ir tikrinti.

Viena iš refaktorizavimo taisyklių YAGNI, tai akronimas, reiškiantis ‘You Aren't Gonna Need It’ ir kilęs iš eXtreme programavimas (XP) daugiausia naudojamas Agile programinės įrangos kūrimas komandos. Trumpa istorija, YAGNI sako, kad reikia daryti tik naujausius dalykus. Tai iš esmės reiškia, kad net jei ko nors gali prireikti ateityje, dabar to daryti nereikėtų. Tačiau mes taip pat negalime užgniaužti tolesnių plėtinių, ir čia svarbus tampa moduliavimas.

Kalbėdami apie refaktoringas, reikia paminėti vieną iš svarbiausių elementų, t. y. bandymus. Svetainėje refaktoringas, turime žinoti, kad kodas vis dar veikia, nes refaktoringas nekeičia jos veikimo būdo, o keičia jos struktūrą, todėl visi testai turi būti atlikti. Geriausia po kiekvieno nedidelio pakeitimo atlikti tos kodo dalies, su kuria dirbame, testus. Tai suteikia mus patvirtinimas, kad viskas veikia taip, kaip reikia, ir sutrumpinamas visos operacijos laikas. Būtent apie tai savo knygoje kalba Martinas - kuo dažniau atlikti bandymus, kad nereikėtų žengti žingsnio atgal ir gaišti laiko ieškant transformacijos, kuri kažką sugadino.

Kodo pertvarkymas be bandymų yra vargas ir didelė tikimybė, kad kažkas bus ne taip. Jei įmanoma, geriausia būtų pridėti bent keletą pagrindinių testų, kurie suteiktų mums šiek tiek užtikrintumo, kad kodas veikia.

Toliau išvardytos transformacijos yra tik pavyzdžiai, tačiau jos tikrai naudingos kasdienėje programavimo veikloje:

  • Funkcijos išskyrimas ir kintamųjų išskyrimas - jei funkcija yra per ilga, patikrinkite, ar yra kokių nors mažesnių funkcijų, kurias būtų galima išskirti. Tas pats pasakytina ir apie ilgas eilutes. Šios transformacijos gali padėti rasti pasikartojimų kode. Dėl Mažųjų funkcijų kodas tampa aiškesnis ir suprantamesnis,
  • Funkcijų ir kintamųjų pavadinimų keitimas - norint gerai programuoti, labai svarbu naudoti teisingus pavadinimus. Tinkamai parinkti kintamųjų pavadinimai gali daug ką pasakyti apie kodą,
  • Funkcijų grupavimas į klases - šis pakeitimas naudingas, kai dvi klasės atlieka panašias operacijas, nes taip galima sutrumpinti klasės ilgį,
  • Įterpto teiginio perrašymas - jei sąlyga pasitvirtina specialiu atveju, išveskite grąžinimo teiginį, kai sąlyga įvyksta. Tokio tipo testai dažnai vadinami apsauginiu sakiniu. Pakeitus įterptinį sąlyginį teiginį išėjimo teiginiu, pasikeičia kodo akcentai. Konstruktyve if-else abiem variantams priskiriamas vienodas svoris. Kodą skaitančiam asmeniui tai yra pranešimas, kad kiekvienas iš jų yra vienodai tikėtinas ir svarbus,
  • Įveskite ypatingą atvejį - jei kai kurias sąlygas savo kode naudojate daug kartų, galbūt verta joms sukurti atskirą struktūrą. Dėl to daugumą specialiųjų atvejų patikrinimų galima pakeisti paprastais funkcijų iškvietimais. Dažnai pasitaikanti reikšmė, kuriai reikia specialaus apdorojimo, yra null. Todėl šis modelis dažnai vadinamas nuliniu objektu. Tačiau šis metodas gali būti naudojamas bet kuriuo specialiu atveju,
  • Sąlyginio nurodymo polimorfizmo pakeitimas.

Pavyzdys

Tai straipsnis apie refaktoringas ir reikia pavyzdžio. Toliau noriu parodyti paprastą refaktorizavimo pavyzdį naudodamas Įterpto teiginio perrašymas ir Sąlyginio nurodymo polimorfizmo pakeitimas. Tarkime, turime programos funkciją, kuri grąžina a hash su informacija, kaip laistyti augalus realiame gyvenime. Tokia informacija tikriausiai būtų pateikta modelyje, tačiau šiame pavyzdyje ji pateikta funkcijoje.

def laistymo_info(augalas)
     result = {}
     if plant.is_a? Suculent || plant.is_a? Kaktusas
         result = { water_amount: "A little bit " , how_to: "Iš apačios", laistymo trukmė: "2 savaitės" }
     elsif plant.is_a? Alocasia || plant.is_a? Maranta
         result = { water_amount: "Didelis kiekis", how_to: laistymo_duration: "Kaip jums patogiau", laistymo_duration: "Kaip jums patogiau": "5 dienos" }
     elsif plant.is_a? Peperomia
         result = { water_amount: "Dicent amount",
             how_to: "jie nemėgsta vandens ant lapų",
             laistymo trukmė: "1 savaitė" }
     else
         result = { water_amount: "Dicent amount",
             how_to: "Kaip jums patogiau",
             watering_duration: "1 savaitė"
             }
     pabaiga
     grąžinti rezultatą
 pabaiga

Idėja yra pakeisti, jei grįžti:

if plant.isa? Suculent || plant.isa? Cactus

     result = { wateramount: "A little bit " , howto: "Iš apačios",

Į

return { water_amount: " , how_to: "Iš apačios",laistymo_trukmė: "2 savaitės" } if plant.is_a? Suculent || plant.is_a? Cactus

grąžinti { vanduosuma: “Šiek tiek” , kaipį: “Iš apačios”, laistymastrukmė: “2 savaitės” } if plant.isa? Sukulentinis || plant.is_a? Kaktusas

Ir taip toliau, kol pasieksime funkciją, kuri atrodo taip:

def laistymo_info(augalas)

return result = { wateramount: " , howto: "Iš apačios", laistymo trukmė: "2 savaitės" } if plant.isa? Suculent || plant.is_a? Cactus

return result = { wateramount: "Didelis kiekis", howto: "Kaip jums patogiau", laistymo trukmė: "5 dienos" } if plant.isa? Alocasia || plant.is_a? Maranta

return result = { water_amount: "Dicent amount",

          howto: "jie nemėgsta vandens ant lapų",
          wateringduration: "1 savaitė" } if plant.is_a? Peperomia

return result = { water_amount: "Dicent amount",

          how_to: "Kaip jums patogiau",

          laistymo trukmė: "1 savaitė"

          }

pabaiga

 Pačioje pabaigoje jau turėjome grąžinimo rezultatą. Geras įprotis - tai daryti žingsnis po žingsnio ir išbandyti kiekvieną pakeitimą. Šį if bloką galėtumėte pakeisti perjungimo atveju (switch case) ir jis iš karto atrodytų geriau, be to, nereikėtų kiekvieną kartą tikrinti visų if. Tai atrodytų taip:

def laistymo_info(augalas)

swich plant.class.to_string

case Suculent, Cactus

     { wateramount: "Šiek tiek " , howto: "Iš apačios", laistymo trukmė: "2 savaitės" }

atvejis Alocasia, Maranta

     { wateramount: "Didelis kiekis", howto: "laistymo trukmė: "5 dienos" }

atvejis Peperomia

     { water_amount: "Dicent amount",

          how_to: "jie nemėgsta vandens ant lapų",

          laistymo trukmė: "1 savaitė" }

else

     { water_amount: "Dicent amount",

            how_to: "Kaip jums patogiau",

       laistymo trukmė: "1 savaitė" }

pabaiga

pabaiga

Tada galite taikyti Sąlyginio nurodymo polimorfizmo pakeitimas. Taip sukuriama klasė su funkcija, kuri grąžina tinkamą reikšmę ir perjungia jas į tinkamas vietas.

klasė Suculent

...

def laistymo_info()

     return { wateramount: " , howto: "Iš apačios", laistymo_trukmė: "2 savaitės" }

end  end

pabaiga

klasė Cactus

...

def laistymo_info()

     return { wateramount: " , howto: "Iš apačios", laistymo_trukmė: "2 savaitės" }

end  end

pabaiga

klasė Alocasia

...

def laistymo_info

     return { wateramount: "Didelis kiekis", howto: "laistymo trukmė: "5 dienos" }

pabaiga

pabaiga

klasė Maranta

...

def laistymo_info

     return { wateramount: "Didelis kiekis", howto: "laistymo trukmė: "5 dienos" }

pabaiga

pabaiga

klasė Peperomia

...

def laistymo_info

     return { water_amount: "Dicent amount",

      how_to: "jie nemėgsta vandens ant lapų",

      laistymo trukmė: "1 savaitė" }

pabaiga

pabaiga

klasė Plant

...

def laistymo_info

     return { water_amount: "Dicent amount",

              how_to: "Kaip jums patogiau",

              laistymo trukmė: "1 savaitė" }

pabaiga

pabaiga

Pagrindinėje laistymo_infofunkcijoje kodas atrodys taip:

def laistymo_info(augalas)

    plant.map(&:watering_info)

pabaiga

Žinoma, šią funkciją galima pašalinti ir pakeisti jos turiniu. Šiame pavyzdyje norėjau pateikti bendrą refaktorizavimo modelis.

Santrauka

Pertvarkymas yra didelė tema. Tikiuosi, kad šis straipsnis paskatino perskaityti daugiau. Šie refaktorizavimo įgūdžiai padės jums sugauti klaidas ir patobulinti švaraus kodo dirbtuves. Rekomenduoju perskaityti Martino knygą (Improving the Design of Existing Code), kuri yra gana paprastas ir naudingas taisyklių rinkinys. refaktoringas. Autorius žingsnis po žingsnio parodo įvairias transformacijas, pateikia išsamius paaiškinimus, motyvaciją ir patarimus, kaip išvengti klaidų. refaktoringas. Dėl savo universalumo tai puiki knyga frontend ir backend kūrėjai.

Tapti jaunesniuoju "Ruby" kūrėju

Skaityti daugiau

"GraphQL Ruby". O kaip dėl našumo?

Bėgiai ir kitos transporto priemonės

"Rails" kūrimas naudojant TMUX, "Vim", Fzf + Ripgrep

Susiję straipsniai

Išmaniojo telefono sveikatos priežiūros programėlės su širdies piktograma ir kylančia sveikatos diagrama, pažymėtos The Codest logotipu, iliustracija, vaizduojanti skaitmeninės sveikatos ir sveikatos technologijų sprendimus.
Programinės įrangos kūrimas

Sveikatos priežiūros programinė įranga: Sveikatos priežiūros paslaugos: tipai, naudojimo atvejai

Įrankiai, kuriais šiandien naudojasi sveikatos priežiūros organizacijos, nė iš tolo neprimena prieš kelis dešimtmečius naudotų popierinių kortelių. sveikatos priežiūros programinė įranga dabar padeda sveikatos sistemoms, pacientų priežiūrai ir šiuolaikiniam sveikatos priežiūros paslaugų teikimui klinikinėse ir...

GERIAUSIAS
Abstrakti mažėjančios stulpelinės diagramos su kylančia rodykle ir auksine moneta, simbolizuojančia ekonomiškumą arba taupymą, iliustracija. Viršutiniame kairiajame viršutiniame kampe pavaizduotas The Codest logotipas ir šūkis "In Code We Trust" šviesiai pilkame fone.
Programinės įrangos kūrimas

Kaip padidinti savo Dev komandą neprarandant produkto kokybės

Didinate savo kūrėjų komandą? Sužinokite, kaip augti neprarandant produkto kokybės. Šiame vadove aptariami ženklai, kad atėjo laikas didinti komandą, komandos struktūra, įdarbinimas, vadovavimas ir įrankiai - ir kaip The Codest gali...

GERIAUSIAS
Programinės įrangos kūrimas

Sukurkite ateičiai atsparias žiniatinklio programas: The Codest ekspertų komandos įžvalgos

Sužinokite, kaip The Codest puikiai kuria keičiamo dydžio interaktyvias žiniatinklio programas, naudodama pažangiausias technologijas ir užtikrindama vientisą naudotojų patirtį visose platformose. Sužinokite, kaip mūsų patirtis skatina skaitmeninę transformaciją ir verslo...

GERIAUSIAS
Programinės įrangos kūrimas

10 geriausių Latvijoje įsikūrusių programinės įrangos kūrimo įmonių

Naujausiame mūsų straipsnyje sužinokite apie geriausias Latvijos programinės įrangos kūrimo įmones ir jų inovatyvius sprendimus. Sužinokite, kaip šie technologijų lyderiai gali padėti pakelti jūsų verslo lygį.

thecodest
Įmonių ir didinimo sprendimai

"Java" programinės įrangos kūrimo pagrindai: A Guide to outsourcing Outsourcing Successfully

Išnagrinėkite šį esminį vadovą, kaip sėkmingai outsourcing "Java" programinę įrangą kurti, kad padidintumėte efektyvumą, įgytumėte patirties ir sėkmingai įgyvendintumėte projektus su The Codest.

thecodest

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

    The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

    Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

    Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian is_ISIcelandic lt_LTLithuanian