Strategier för Motstånd Kod i JavaScript

0
32

Nyligen, jag var tvungen att gräva i ämnet kod avskrivningar i JavaScript. Jag känner att detta ämne får mindre täckning även om det kan spela en viktig roll i vissa projekt, särskilt när man arbetar i större grupper eller arbetar med externa Api: er.

I JavaScript-land, jag vet inte av någon verklig branschstandarder för avvärjande av JavaScript. Det kan vara olika för varje team, bibliotek eller leverantör.

Det är därför mitt mål här är att sammanfatta mina slutsatser och tankar om detta ämne, tillsammans med några av god praxis när det är dags att markera en JavaScript-metod föråldrade en kodbas.

Vad betyder “avskrivningar” egentligen betyder?

Låt oss först börja med att klargöra att avskrivningar är bara en status som tillämpas för att ett program har. Det indikerar att denna funktion bör undvikas, typiskt eftersom det har ersatts.

Avskrivningar kan också indikera att funktionen kommer att tas bort i framtiden. Funktioner är föråldrat—snarare än omedelbart tas bort för att ge kompatibilitet bakåt, och att ge programmerare som har använt de har tid att få sin kod i enlighet med den nya standarden.

Dessutom ett föråldrat har tyder på att det inte blir någon ytterligare utveckling från denna punkt och framåt. Det bör inte arbeta något annorlunda ut än den gjorde i en tidigare version (om dokumentation uttryckligen står något annat). Så, i allmänhet, det bör vara samma som den var när den avskrivningar åtgärder som hände.

Det kanske eller kanske inte fungerar i den senaste versionen—inga garantier!

Emellertid, eftersom det inte finns någon sann industri standarder som följs inJavaScript-land, detta kan vara lite olika per lag, bibliotek eller leverantör.

När man ska välja bort koden och när du ska ta bort det?

Det är viktigt att notera att ett föråldrat programvara funktion eller metod är fortfarande en del av programmet! Överväga “utfasade” märken som bara en status av koden. Om programvaran har faktiskt kommer att tas bort i framtiden beror på vad just den programvara team beslutar.

I min mening, av stora team eller projekt som förlitar sig på externa Api: er eller bibliotek borde välja bort först, sedan ta bort senare (efter en rimlig tid, men du definiera det). Åtminstone, ge åtminstone en stor version bump innan faktiskt tar bort föråldrat kod så att användarna har en chans att anpassa sig till förändringar.

Du kanske vill titta på Semantisk Versionshantering, en enkel uppsättning regler och krav som dikterar hur version nummer tilldelas och ökas. Med tanke på en version nummer STÖRRE.MOLL.LAPP, steg den STORA versionen när du gör oförenliga API-förändringar, MINDRE version när du lägger till funktionalitet på en bakåt-kompatibla sätt, och PATCH version när du gör-bakåt-kompatibel buggfixar.

Om din programvara är snabbt förändras och utvecklas och du är nedsättande en funktion, försök att kommunicera med din projektledare om denna funktion förväntas uppstå senare. Om du väljer att välja bort, istället för att ta bort, kan det vara mycket lättare för dig att återgå bör du behöver.

För mindre grupper eller projekt med interna metoder och Api: er, gå vidare och ta bort första snarare än att välja bort. Ibland är det bara inte vettigt att slösa tid och avskrivningar endast ökar komplexiteten bara för den skull att följa bästa praxis.

Hur att markera en metod föråldrade

Här är fem bra metoder jag har hittat de mest användbara:

  1. Lägg till ett @deprecated JSDoc flaggan.
  2. Nämna den version som metod var längre.
  3. Räkna ut en tidsram för när denna metod kommer att raderas, inklusive vilken version det kommer att ta plats. Annars, baserat på min erfarenhet, det stannar för evigt 🙂
  4. Använda kommentarer för frikostigt tolkat till förmån för andra utvecklare eller ditt framtida jag. Detta är mycket användbart om din användning-fallet är att skriva ett bibliotek som andra använder som ett beroende för sitt arbete.
  5. Lägg till en konsol varningsmeddelande som indikerar att funktionen är föråldrat.

Här är ett mer praktiskt exempel där jag använder alla fem metoder:

/**
* En magisk metod som multipler siffror.
*
* @deprecated [#1] sedan version 2.3 [#2].
* [#3] Kommer att tas bort i version 3.0.

* [#4] I fall du behöver för liknande beteende, genomföra det på egen hand,
* företrädesvis i vanilj JavaScript
* eller använd multiplyTheSameNumber metod istället,
* om samma nummer skall multipliceras flera gånger, så här:
* multiplyDigits([5, 5, 5]) === multiplyTheSameNumber(5, 3)
*
* @param {array} _digits – siffror att multiplicera
*/
funktion multiplyDigits(_digits) {
konsolen.varna(“Anropar en metod depricated!”); // [#5]

// ….
}

För att undvika upprepning i konsolen varningar eller om du planerar att välja bort flera metoder och att du har deras ersättare, kan det vara mer praktiskt att använda en hjälpare:

/**
* Skapa ett föråldrat / föråldrade beteende för metoder i ett bibliotek.
* [Hp]{@link: https://stackoverflow.com/q/21726472/1333836}
*
* @param {funktion} replacementFunction
* @param {string} oldFnName
* @param {string} newFnName
* @return {funktion}
*/
const Oboslete = function(replacementFunction, oldFnName, newFnName) {
const wrapper = function() {
konsolen.varna(“VARNING! Föråldrade funktion som kallas. Funktionen ‘” + oldFnName + “‘ har blivit föråldrat, använd nya ‘” + newFnName + “‘ – funktion i stället!”);

replacementFunction.gäller(detta argument);
}
omslaget.prototypen = replacementFunction.prototyp,

tillbaka omslag;
}

Att linda upp

Jag skulle föreslå att få ditt team på samma sida och ärva avskrivningar metoder som är mest lönsamma för ditt projekt eller använd fall, oavsett om det är att anta den praxis som vi har beskrivit här eller andra.

Observera att det finns vissa tillfällen när raderingen är mer förnuftigt än avskrivningar. Ibland, investera ansträngningar att välja bort något helt enkelt inte värt det. Igen, det är helt upp till dig och vad som känns bäst för ditt projekt.

Vet du andra bra lösningar när du markerar en metod som föråldrade i JavaScript? Låt mig veta i kommentarerna!

Hp

De idéer som jag delat här var inspirerad av kommentarer som jag hittade på Software Engineering Stack Exchange och på StackOverflow.