Vraag JavaScript-accolades op nieuwe regel of niet? [Gesloten]


Op het werk plaatsen we accolades op de volgende regel, maar thuis doe ik het tegenovergestelde. Welke heb je liever? (K & R vs OTBS)

function something() {
    // ...
}

function something()
{
    // ...
}

Veel JavaScript-bibliotheken lijken de OTBS te gebruiken (een echte brace-stijl). Ik wil ze graag volgen voor consistentie tussen andere JavaScript-projecten, maar ziet de K & R-stijl er niet leesbaarder uit?

Opmerking: we kennen het probleem met retourneren en accolades in JavaScript, dat is altijd een uitzondering. Dat is echter slechts één geval.


38
2017-07-10 10:15


oorsprong


antwoorden:


Dit is een heilige oorlog waar je nooit een bruikbaar antwoord op krijgt! Houd gewoon vast aan wat iedereen in het project gebruikt en maak geen ruzie!

Voor wat het waard is, ben ik een K & Rite. Ik vind dat de OTBS veel visuele ruimte tussen een openingsstructuur en de volgende verklaring plaatst, wanneer die twee lijnen vaak sterk gerelateerd zijn, dus beter samen kunnen worden gepresenteerd, zonder een tussenliggende bijna lege regel. Ik hou ervan om mijn lege regels te behouden voor het scheiden van blokken gerelateerde statements.

In een coderingsstijl die toch al veel witruimte heeft, kan dit relatief onbelangrijk zijn. Maar persoonlijk waardeer ik terseness, zodat ik meer van het programma op het scherm kan houden.

Ik koop niet dat het hebben van de open-brace op een andere kolom dan de close-brace een probleem is. Het is nog steeds eenvoudig om de blokvorm net vanaf de inspringingen te zien. Tenzij je hangende inkepingen gebruikt. Doe dat niet. Maar dat is helemaal weer een Heilige Oorlog.


30
2017-07-10 10:31



Douglas Crockford geeft een reden om de K & R-stijl te kiezen1:

Ik gebruik altijd de K & R-stijl, waarbij ik de { aan het einde van een regel in plaats van aan de voorkant, omdat het een vreselijke ontwerpblunder in JavaScript vermijdt return uitspraak.

De blunder waarnaar hij verwijst is hoe JavaScript omgaat met de return verklaring anders in de volgende twee scenario's:

return {
   'status': 'ok'
};

... en:

return 
{
   'status': 'ok'
};

De eerste retourneert een object met een status eigendom, terwijl de laatste zal terugkeren undefined omdat puntkomma invoeging.


1  Douglas Crockford: JavaScript: The Good Parts: Style (pagina 96) - ISBN: 978-0596517748.


133
2017-07-10 10:52



Ik volg de JavaScript-coderingsconventie van Douglas Crockford, die werd geïnspireerd door de Java-stijlrichtlijnen van Sun.

Hier is een link naar het: http://javascript.crockford.com/code.html


18
2017-07-10 10:37



Naar mijn mening hangt het ervan af wie nog meer met jouw code zal werken. Als je aan een C # -team werkt en veel verantwoordelijkheden deelt, zet het dan op een nieuwe regel en vermijd het onvermijdelijke gekibbel dat anders zou volgen. Als je met veel PHP (of oudere JS-programmeurs) werkt, zet het dan op de eerste regel om precies dezelfde reden.

Maar als je op zoek bent naar iets gezaghebbenders, zegt Douglas Crockford dat de openingsband zou moeten altijd op de bovenste regel staan. Zijn redenering, als ik het me goed herinner, is dat het consistent is met de rest van de taal. Kortom, omdat dit een geldige maar (waarschijnlijk) onjuiste code is:

function myFunc() 
{
    return 
    {
      ok: true
    };
} 

... je moet universeel vermijden open accolades op een nieuwe regel te plaatsen. Waarom? Omdat programmeerstijl zou moeten niet leiden tot syntactische ambiguïteit.

De voorbeeldcode hierboven is geldig omdat deze volledig syntactisch correct is en er geen uitzonderingen worden gemaakt als u dit schrijft. In plaats van een object letterlijk terug te geven, {ok:true}, het zal terugkeren undefined en de onderstaande code zal niet worden bereikt. Plaats de openingsschoren één lijn omhoog en het object wordt letterlijk teruggestuurd zoals je misschien verwachtte.

De vraag is, vind je dat argument overtuigend genoeg?


12
2017-07-10 10:49



Geen van beide is beter dan de ander. Kies er gewoon een en gebruik deze consequent.


6
2017-07-10 10:17



Allemaal subjectief. Sommige zijn iets beter, maar het verschil is te verwaarlozen. Het belangrijkste om te doen is om consistent te blijven in al uw code.

Persoonlijk geef ik de voorkeur aan de weggestopte stijl, met 4 'echte' tabbladen.

function a () {
    als (b) {
        do;
    } else {
        DO2;
    }
}

5
2017-07-10 10:19



Ik geef de voorkeur aan hen op dezelfde regel, maar vooral omdat ik anonieme functies vaak als argumenten door geef ... het bespaart wat ruimte en maakt de functiedefinitie minder beledigend. Dit is natuurlijk slechts een mening en ik ben het met Bytecode Ninja eens dat consistentie het belangrijkste is.


3
2017-07-10 10:18



Zoals in veel antwoorden staat, is het vooral belangrijk dat je een stijl vindt waaraan jij (en / of je teamgenoten, indien van toepassing) vasthouden. Persoonlijk geef ik de voorkeur aan dezelfde regel als ik heb geconstateerd dat het plaatsen van accolades op de nieuwe regel kan leiden tot veel bijna lege regels als je werkt met sluitingen en geneste functies, waardoor code minder leesbaar voor me is (hoewel, waarschijnlijk niet voor de meeste mensen...)


0
2017-07-10 10:28