Att hålla din kod elegant och inga kodkloner samtidigt som du bygger upp en enorm Rails-applikation kan vara ett betydande test, oavsett för en skicklig utvecklare. Lyckligtvis finns det en pärla som gör denna kodrefaktorering mycket enklare. För väldigt många människor kommer död/slösande kod att utvecklas efter en tid. Andra kommer att hamna i en sådan situation när de tar över äldre projekt. Om du har chansen att hålla din kod underhållbar och optimerad, ta en titt på en pärla som har gjort jobbet åt mig.
Flay undersöker kod för strukturella likheter. Skillnader i bokstavliga värden, variabel, klass, metodnamn, blanksteg, programmeringsstil, klammerparenteser vs gör/slut, rekvisita kontra gör/slut, och så vidare förbises, vilket gör detta helt rad. Den är lämplig för att känna igen både korrekta och nära matcher, och upptäcker med säkerhet några ställen i Active Record där mönstren upprepas. I sitt nuvarande tillstånd är Flays utdata mycket primitiv: en lista med upprepade kodnoder, tillsammans med en vikt att rangordna dem efter och radnummer och filnamn där den upprepade koden visas. Kod som flay rapporterar som jämförande är ett anständigt verktyg för refaktorering.
Kommando för att installera
sudo gem install flay
Kommando för att se utdata
Cd "Sökväg till din projektmapp"
flay "sökväg till mappen"
T.ex.: flay ./app/controllers - Identifierar koddupliceringen i alla kontroller.
flay ./app - Identifierar koddupliceringen i hela projektet
flay ./app/controllers/example_controler.rb - Identifierar koddupliceringen i specificerad styrenhet.
Exempel på utgång
En utdata genereras av de kodduplicerade områdena så här:
sridevi@carmatec-MS-7788$ flay ./app/models/*.rb Totalpoäng (lägre är bättre) = 1666 1) Liknande kod finns i :call (massa = 170) ./app/models/example.rb:8 ./app/models/example.rb:9 ./app/models/example.rb:10 ./app/models/example.rb:11 ./app/models/example.rb:15 ./app/models/ example.rb:17 ./app/models/example.rb:19 ./app/models/example.rb:20 ./app/models/example.rb:22 ./app/models/example.rb:23 2 ) Liknande kod finns i :defs (massa = 154) ./app/models/example.rb:260 ./app/models/result.rb:195 3) Liknande kod finns i :defs (massa = 138) ./app /models/feedback.rb:62 ./app/models/example.rb:54 ./app/models/result.rb:51 4) Liknande kod finns i :call (massa = 136) ./app/models/example .rb:12 ./app/models/example.rb:13 ./app/models/example.rb:14 ./app/models/example.rb:16 ./app/models/example.rb:18 ./ app/models/example.rb:21 ./app/models/example.rb:24 ./app/models/example.rb:25 5) IDENTISK kod som finns i :defn (massa*2 = 128) ./app/ models/result.rb:7 ./app/models/summary_report.rb:7 6) IDENTISK kod finns i :defn (massa*2 = 120) ./app/models/example.rb:17 ./app/models/ exempel.rb:23
Appens totala poäng på 1666 (råden "lägre är bättre" stämmer) kan ses i dess individuella komponenter som visar områden som ger mest valuta för pengarna. För erfarna utvecklare som arbetar på egen hand eller i ett litet team kan Flay vara onödigt. Men på större projekt (som det jag körde det på) eller de med nybörjare eller medelstora programmerare kan det hjälpa till att öka underhållsbarheten för din kodbas.
Nedan är en bildrepresentation av hur man refaktorerar koden i rails-appen. Till exempel, om samma kod duplicerar i många kontroller, håll den i ApplicationController och anrop metoden med hjälp av filter.