Kommentarer
- " ärligt talat är koden lättare att läsa " Yttrande eller fakta?
- IThinkTheyAreBothAboutTheSame but_i_think_mixing_them_is_pretty_bad.
- @dietbuddha: Jag läste bara ' but_i_th id = ”97408c6b94″>
mycket snabbare än ' IThinkTheyAreBothAboutTheSame '. Jag ' är ganska säker på att det kan bevisas vetenskapligt. 🙂
Svar
Jag håller med om att det beror på språket du använder till viss del; koden tenderar att se snyggare ut när dina symbolnamn följer samma formatering regim som språket ”inbyggda och lagerbibliotek.
Men där det finns ett val, föredrar jag understrykning framför kamfodral, av en enkel anledning: Jag tycker att den stilen är lättare att läsa. Här” s ett exempel: vad tycker du är mer läsbart? Detta:
aRatherLongSymbolName
eller detta:
a_rather_long_symbol_name
Jag tycker att understrykningsversionen är mycket lättare att läsa. Min hjärna kan ignorera understrykningarna mycket lättare än att det kan upptäcka små / stora bokstäver i kamfallen, särskilt där gränserna ligger mellan tecken som liknar andra tecken i motsatt fall eller siffror (I/l
, O/0
, t/I
, etc). Till exempel lagrar den här booleska variabeln ett värde som anger om en Igloo har byggts med rätt planeringstillstånd (utan tvekan ett vanligt användningsfall för oss alla):
isIllicitIgloo
Jag tycker att den här versionen är mycket lättare att läsa:
is_illicit_igloo
Kanske ännu värre än ett svårläst symbolnamn är ett lättläst symbolnamn. Bra symbolnamn är självdokumenterande, vilket för mig betyder att du ska kunna läsa dem och förstå deras mening med en överblick. (Jag är säker på att vi alla läser kodutskrifter i sängen för nöjes skull, men ibland grokar vi också i bråttom.) Jag tycker ofta att det med kamelhöljesymbolnamn är lätt att läsa dem fel och få fel intryck. av en symbol ”semantik.
Kommentarer
- Ett problem med understrykning: användbarhet. För de flesta (europeiska) tangentbord måste man skriva understreckstecknet. ner SHIFT-tangenten. Du måste också göra det för camelCase, men jag kan bekvämt hålla SHIFT intryckt med pinky och skriva vilken bokstav som helst – men eftersom understrykningsknappen är precis bredvid SHIFT-tangenten, är att trycka på båda samtidigt ganska besvärligt och avbryter skrivflödet.
- För det första tyckte jag att camelCase var lättare att läsa – även om det senare är uppenbart annorlunda.
- Detta beror verkligen på vad du ' är vana vid. Jag tycker att camelCases är lättare att läsa, och dessutom är de ' kortare än motsvarande understrykningsnamn.
- Jag hatar att skriva understrykningar.
- " användbarhet " är irrelevant för detta. Koden skrivs vanligtvis bara en gång av en person, men låt ' säga i storleksordningen 1-10 gånger och redogöra för viss redigering och potentiell parprogrammering. Men kod läses vanligtvis dussin / hundratals / tusentals gånger av en eller potentiellt många människor. Att göra kod lätt att läsa är därför flera storleksordningar viktigare än att ha kod lätt att skriva.
Svar
Jag tycker att du borde använda namngivningskonventionen som antagits av din plattform. understryksfält kommer att se konstigt ut i C # -kod, som camelCase i Ruby =)
Kommentarer
- Konsistens är en nyckel. Oavsett om du håller med om den lokala konventionen eller inte kommer du att göra din egen tid enklare (och alla andra ' s) genom att vara konsekventa. (Om inte den lokala konventionen i sig är inkonsekvens.) Dessutom är läsbarheten mestadels ett falskt argument: läs tillräckligt med kod som du ' upptäcker att det är liten skillnad om du inte bestämmer att den är oläslig.
- Håller helt med. Jag tycker bara att det är bättre att använda plattformskonvention istället för anpassade, för till exempel kommer nya killar i team att känna sig mer bekväma med det.
- Men ve dem som arbetar på två plattformar med två konventioner , där vissa föredrar och andra föredrar den andra!
- Om plattformen har två konventioner, ber jag ' alla lagmedlemmar att rösta på en konvention som de är bekväma med =)
Svar
Ärligt talat spelar det ingen roll så länge alla i laget använder Chansen är att den ena eller den andra är mer naturlig för dig, även om den verkliga vikten är kodens läsbarhet på lång sikt och då är det viktigt att alla följer samma namnregler.
Kommentarer
- du har rätt, men jag ' jag försöker ta reda på människors åsikt om häxan skulle vara bättre att använda (låt ' säger för hela laget) och varför … medan jag förstår att vissa människor bara kan vara vana vid någon konvention eller andra känner sig mer naturliga med den andra.
Svar
Baserat på ett svar svaret från John Isaacks:
”Ärligt talat är koden lättare att läsa” Yttrande eller faktum?
Jag bestämde mig för att göra en del undersökningar och hittade detta dokument . Vad har vetenskapen att säga om ämnet?
- Kamelhölje har en större sannolikhet för korrekthet än understrykningar. (oddsen är 51,5% högre)
- I genomsnitt tog kamelfallet 0,42 sekunder längre 13,5% längre.
- Träning har ingen statistiskt signifikant inverkan på hur stil påverkar korrekthet.
- De med mer träning var snabbare på identifierare i kamelstil.
- Träning i en stil, påverkar söktiden negativt för andra stilar.
I mitt blogginlägg om ämnet granskar jag vetenskapliga papper och gör följande slutsats.
Endast långsamhet i kamelfallet ( 2) är verkligen relevant för programmering och avfärdar de andra punkterna som irrelevanta på grund av moderna IDE: er och en majoritet av camelCase-användare i studien. Diskussionen (tillsammans med en omröstning) finns i blogginlägget.
Jag är nyfiken på hur den här artikeln kan ändra åsikter. 🙂
Kommentarer
- Naturligtvis avfärdar du alla andra punkter på grund av din preferens för understrykningar och de andra punkterna ' hjälper inte ditt fall …
- @Charles: Ja och nej, IMHO Jag ger bra argument för varför de kan avvisas, och vissa av dem diskuteras till och med som problematiska av själva tidningen. A uppföljningsdokument undersöker några av problemen med denna uppsats , och resultaten understryks.
Svar
Kopiera de smartaste killarna
När det gäller programmeringsspråk, kopiera stilen för språkutvecklaren.
Till exempel kodar jag C exakt som det görs i K & R.
Sedan när någon försöker starta en tråkig kodning stilkonversation, jag kan säga dem ”ta upp det med Dennis Ritche och låt mig veta vad han säger.”
Kommentarer
- Originalet är inte Alltid den bästa. Det finns många dåliga metoder i K & R-evangelieboken om C. Innan detta startar ett flammekrig … läs några av MISRA-rekommendationerna.
- Glöm inte ', K & R skrevs när det inte finns några GUI-IDE. Det mesta arbetet gjordes på 80×25 teckenterminaler, så skärmutrymmet var högt, vilket gjorde att
if (...) {
sparade en rad! Dessa dagar ' är mer skärmutrymme – skulle K & R vara annorlunda om det skrivs idag med högupplösta GUI IDE och flera bildskärmar inställningar? - Ja, men när någon säger att de kodar C som K & R får de rekvisita för att vara gamla skolor.
- @quickly_now , ta upp det med Dennis Ritchie och låt mig veta vad han säger!
- Jag antar mycket formatering från MS: _internalToClassOnly, accessibleByGetter, PublicVariable.
Svar
I allmänhet föredrar jag camelCase. Det beror dock på att jag under det mesta av min karriär har arbetat i språk och miljöer där stilguiderna normalt rekommenderar camelCase. (Java, ECMAScript, C ++). Du, som PHP-person, har sannolikt motsatt preferens.
Som sagt, när du går längre än treOrFourWords, eller om du använder initialismer somXmlForExample, slutar det vara så läsbart.
Det är därför emacs ger oss glasögonläge.
Kommentarer
- +1 för att få mig att upptäcka glasläge! Jag testade det bara på en kodfil som använder camelCase och märkte hur det omedelbart började se bättre ut (montering med massor av etiketter i camelCase).
- Okej, vad är glasögonläge?
- gnu.org/software/emacs/ manual / html_node / emacs / Glasses.html
Svar
camelCase
Detta är en av få ställen jag alltid väljer” typ-förmåga ”framför läsbarhet. CamelCase är bara lättare att skriva, och att vara trevligare för mina fingrar vinner ut över en liten läsbarhetsökning för mig.
förutsätter naturligtvis att projektet inte bygger på en befintlig kodbas med en annan standard.
Kommentarer
- Jag håller inte ' Jag håller inte med det, du skriver bara en gång, men du måste läsa den flera gånger efteråt
Svar
Det är en intressant fråga, jag har tänkt på det många gånger. Men det finns inget definitivt svar, tror jag.
Enligt de ”kulturella” konventionerna är det ett bra val. ”Kulturell” betyder i det här fallet konventioner som sätts upp i teamet / företaget och de bär i princip även språk / plattformskonventionerna. Det hjälper andra att läsa / använda din kod enkelt och kräver inte ytterligare ansträngningar och tid för att komma in på sättet att förstå din kod.
Ibland är det intressant att bryta accepterade noteringar. Ett av mina små projekt (på Python) Jag använde underscored_names
för verktygsfunktioner / ”skyddade” metoder och Java-stil methodNames
för metoder. Mitt team var nöjd med det 🙂
Svar
Beror på programmeringsspråket.
Jag överväger att använda fallet i samma båt för huruvida de ska använda ungerska notationer:
- Python: understrykningslåda, ingen ungerska notation
- C ++: camelCase, ungerska notation
Kommentarer
- @Kevin Cantu: Egentligen är namnet Javascript i PascalCase snarare än camelCase …
- @Guffa: tryck på é!
- @Kevin Cantu: på JavaScript:
XMLHttpRequest
< – Jag hatar det här namnet wi en passion. - hypotheticalReasonsToNukeRedmond.push (XMLHttpRequest)
- @Lionel: Egentligen används ungerska notationen nästan aldrig i C ++, eftersom C ++ redan kontrollerar dina typer. Det ' är mer av en historisk artefakt än någonting annat.
Svar
Båda!
Jag utvecklar mycket i CakePHP och använder antingen CamelCase
eller $underscored_vars
på följande sätt (även utanför CakePHP-projekt):
- filnamn –
/lowercased_underscored.php
Typiskt men värt att nämna. - klasser –
class CamelCase extends ParentObject
. Observera att när du använderCamelCase
är det ursprungliga tecknet inte gemener. Jag tycker attcamelCase
ser riktigt konstigt ut. - variabler –
$are_variables_underscored === TRUE;
- variabler som innehåller instanser –
$CamelCase = new CamelCase();
- arraynycklar –
$collection["underscored_keys"];
- konstanter – Jag tror alla kan komma överens om att konstanter ska vara
ALL_CAPS_AND_UNDERSCORED
. - metoder –
$CamelCase->foo_method_underscored();
- statiska metoder –
CamelCase::just_like_regular_methods();
Kommentarer
- måste hålla med dig, med det första tecknet att vara lägre fall gör mig galen! Jag hatar camelCase med en passion.
- I Java där namnen typiskt är camelCased börjar klassnamnen faktiskt med en stor bokstav. Detta för att skilja dem från metodnamn.
Svar
Jag föredrar personligen underscore_case
eftersom jag tycker att det är mer läsbart, men håller med de andra svararna som påpekar att överensstämmelse med den befintliga kodbasen är mycket viktigare.
Jag har dock ett motexempel för dem som säger ” följ konventionen för ditt språk och dess bibliotek ”.
Tidigare skrev vi C-kod i Windows med underscore_case
och kallade PascalCase
Win32-funktioner:
if (one_of_our_conditions_is_true()) { call_one_of_our_functions(); CallSystemFunction(); }
Den visuella skillnaden mellan våra funktionsnamn och Microsofts funktionsnamn var ett hjälp snarare än ett hinder, eftersom det visade tydligt när koden gick in i ”systemland”.
Dessutom kunde jag ändra min redaktörs syntaxmarkeringsregler för att visa dem i olika färger, vilket gav ytterligare visuella ledtrådar när jag försökte förstå okända delar av koden (eller till och med mina egna).
Svar
Jag gillar verkligen Dylans bara-normala-streck-eftersom-de-är-enkla att skriva-och-lätta – att läsa.
Gilla
result-code := write-buffer(file-stream, some-string)
Men jag antar att eftersom detta språk är ganska obskyr, så är det här lite av ämnet. .. 🙁
Kommentarer
- Jag är också trött på att trycka på shift för att skriva understreck.
- Detta är vanligtvis inte möjligt för variabelnamn, eftersom " – " vanligtvis betyder minus.
Svar
Jag lärde mig att använda camelCase på universitetet. Jag har använt några olika konventioner under de senaste åren men föredrar camelCase framför allt annat. Jag tror att jag kommer ihåg att jag läste någonstans att camelCase faktiskt är det lättaste att läsa och förstå.
Kommentarer
- ja det ' är inte lättare eftersom du läser någonstans, det ' är lättare eftersom det var den första du arbetade med och huvudsakligen eftersom du är mer van vid det, till exempel är jag ' bekvämare med understrykningslåda.
- som i i ' har läst att en studie gjordes och fann att den var bättre ..
Svar
Som de flesta har nämnt – Använd den befintliga standarden. Om det är ett nytt projekt, använd standarden för det språk och de ramar du kommer att använda.
Och bli inte förvirrad, det handlar inte om läsbarhet (vilket är subjektivt), det handlar om att vara konsekvent och professionell. Alla som har arbetat i en kodbas med många ”standarder” pågår kommer att förstå.
Svar
Jag använder ibland en mix: module_FunctionName. Alla (icke-statiska) funktioner i mina moduler börjar med en modulförkortning.
Till exempel en funktion för att skicka buffertinnehåll på I2C-bussen:
i2c_BufferSend()
Alternativet i2c_buffer_send
visar inte tillräckligt stor skillnad mellan prefix och funktionsnamn. i2cBufferSend
blandar i prefix för mycket (det finns ett stort antal I2C-funktioner i den här modulen).
i2c_Buffer_send
kan dock ha varit ett alternativ.
Mitt svar är att du anpassar dig efter det som fungerar bäst för ditt projekt (ditt språk, din SW-arkitektur, …), och jag ville påpeka att det kan vara användbart att blanda dessa stilar.
myGeneralOpinionIsThatNamesAreMuchHarderToReadInCamelCase. Jag_respekterar_faktan_som_något_ kunde_tänka_på annat sätt_men_Jag_för_verkligt_förstå_varför.
Kommentarer
- +1 för de sista 2 raderna, men jag rekommenderar inte att du kombinerar namngivningskonventioner, du bör hålla fast vid en ellerannat.
- Så länge konventionen är väl definierad (prefix + understrykning + PascalCase) …
- Jag vill använda understrykningar för att separera delar av ett namn som har semantiskt ojämnhet syften, särskilt om gemensamhet på båda hälften kan vara betydelsefull. Till exempel rutinerna
Motor1_Start()
,Motor2_Start()
,Motor1_Stop()
ochMotor2_Stop()
har en relation som kan vara mindre tydlig utan understrykningen.
Svar
Personligen , Jag föredrar camelCase, men i vissa teckensnitt tycker jag att understrykningar är lättare att läsa.
Jag föreslår att om du behöver använda prefix för att skilja olika variabler, ska du använda ett språk som låter dig skapa namnområden eller objekt eller något för att hålla den informationen.
myName = 7 bobsName = 8 // :( me.name = 7 bob.name = 8 // :D
På samma sätt, om du behöver skilja på olika typer, varför inte använda ett språk som tillåter dem?
var intThingy = 7; // :( int thingy = 7; // :)
När du har fått det rakt och du inte bara använder namnet som metadata, så har du inte tillräckligt långa namn för att det spelar mycket roll om du föredrar den extra tangenttryckningen eller inte.
Kommentarer
- En av anledningarna till att jag använder camelCase eller understrykning är att jag inte ' t måste hitta objektdefinitionen för att urskilja vad det är.
Svar
Till en början håller jag med dafmetal . Det är av yttersta vikt att du inte blandar olika programmeringsstilar. Att göra detta i en och samma fil är det värsta du kan göra IMHO. I olika filer är det distraherande, men inte dödligt.
Nästa sak du måste göra är att namnge regler som är populära för det språk du skriver på. Min C ++ -kod för instnace kommer att ser annorlunda ut än något för Python uppenbarligen (PEP8 är en trevlig guide här)
Du kan också använda olika namngivningskonventioner för att hänvisa till olika saker, så mycket som du förmodligen använder UPPER_CASE för konstanter (detta gäller bara vissa språk), kan du använda denna stil för lokala variabelnamn, medan du använder camelCase till exempel / medlemsvariabler. Detta kanske inte behövs när du har saker som self
eller this
.
Uppdatera
Låt oss ta ett fall där du har plattformen Foo witch rekommenderar inte några namnkonventioner och det är lagledarens val att välja en. Du är den lagledaren, varför skulle du välja camelCase eller varför understryka_case.
Det finns egentligen inga fördelar för varandra. Denna fråga är väldigt subjektiv och när den väl enats om kommer den inte att göra någon skillnad. Det finns alltid dessa religiösa krig om dessa små saker. Men när du väl har anpassat dig till något av dem, tycks diskussionerna vara helt överflödiga.
För att citera Alex Martelli i en mycket liknande fråga:
Visst, jag blir trött, i Ruby, av att skriva det dumma ”slutet” i slutet av varje block (snarare än bara oavbruten) – men då får jag undvika att skriva det lika dumma ”:” vilken Python kräver i början av början av varje block, så att ”det är nästan en tvätt :-). Andra syntaxskillnader som” @foo ”kontra” self.foo ”, eller den högre betydelsen av fall i Ruby vs Python är egentligen lika irrelevanta för mig.
Andra bygger utan tvekan sitt val av programmeringsspråk på just sådana frågor, och de genererar de hetaste debatterna – men för mig är det bara en exempel på en av Parkinsons lagar i aktion ( beloppet för debatt om en fråga är omvänt proportionell mot frågan ”s faktiska betydelse ).
Källa
Om du är lagledare går du bara med en. Eftersom den ena inte har några fördelar framför den andra, kan du bara kasta tärningar eller välja vad du gillar mer.
Svar
Jag läste för flera år sedan att programmerare som inte talar engelska som modersmål tenderar att hitta understrykningsfall lättare att förstå det kamelfallet – men jag kan inte hitta referensen, och jag har ingen aning om det är sant.
Svar
För programmeringsspråk har jag använt, som Java, Python, C ++, jag har antagit ett tydligt format:
- ClassNamesArePascalCase
- methodNamesAreCamalCase
- variable_names_are_underscore
- CONSTANT_VARIABLES_ARE_CAPITAL_VARIABLES
Detta gör att jag kan omedelbart urskilja vad jag har att göra med. Jag har funnit att det är användbart att upprätthålla för mig själv, och det bör vara lätt att följa för någon annan som läser koden. Jag tycker att som andra nämnde konsistens är viktigast. Så jag hittar mitt format för att vara tillräckligt enkel för att underhålla, samtidigt som jag ger tydliga skillnader mellan typer av namn. Jag kan tänka mig gränssnitt_Names_Are_Like_This och Abstract_Classes_Are_Like_This som möjliga tillägg, men verkar vara mer komplicerade att följa och kanske inte lika användbar en skillnad att göra. > Jag har också funnit det användbart att vara strikt och namnge saker i PascalCase som en HTML-parser som HtmlParser istället för HTMLParser eller HTMLparser. Eftersom jag tror att det är lättare att komma ihåg den strikta regeln och håller ordgränserna tydligare (tyvärr kräver det felstavande saker som HTML eller SQL). På samma sätt med camelCase, htmlParserMethod istället för HTMLParserMethod eller HTMLparserMethod.
UPPDATERING :
Jag har sedan dess funnit användning för att utöka dessa regler till att inkludera privata variabler.- _private_variable_names_are_prefixed_with_an_underscore – _PRIVATE_CONSTANT_VARIABLES_ARE_PREFIXED_WITH_AN_UNDERSCORE
I Java betyder det att privata fält per definition är i ett annat namnområde än lokala variabler, vilket innebär att du kan hoppa över 4 div = ” fält. Andra format Jag har sett prefix med ”m
”, men de här formaten använder också camelCase för variabelnamnen. Detta gör det också möjligt för mig att göra en åtskillnad mellan fält som endast ska kunna nås internt av klassen (och gör det super klart när det händer utanför klassen object._field_x
sticker ut).
Svar
Om det beror på mig skulle jag inte genomdriva eller antyda användningen av en viss stil eftersom vi som programmerare skulle kunna läsa en symbol IfItIsInCamelCase eller in_underscore_space eller till och med in_SomeOtherStyle och förstå vad det betyder. Att behöva spendera lite tid på att analysera symbolen är ingen stor kostnad i det stora schemat av saker.
Nu är huvudargumentet för en konvention antar att du först vet vad formatet på ett funktions- / variabelnamn är och inte behöver leta upp det – är det LoadXMLFile, loadXMLFile , LoadXmlFi le, load_xml_file? Nu skulle jag motverka det argumentet genom att säga ”Skaffa en IDE som stöder automatisk komplettering av intellisense-stil!” (dock inte alltid möjligt).
Men i slutändan spelar det ingen roll vilken stil du använder för att kompilatorn / tolk inte bryr sig riktigt. Det som är viktigt är att namnet är användbart:
NumberOfPrisonersReleasedByAccident manufacturer_name distance_EarthToMoon
Tre olika stilar, men du vet exakt vad var och en gör.
Kommentarer
- Jag ber mig skilja, källans utseende är viktigt. Se " Den pragmatiska programmeraren " ' teorin om trasiga fönster. Varierande namnkonvention gör utseendet värre. pragprog.com/the-pragmatic-programmer/extracts/software-entropy
- @Gauthier: Även om jag håller med ' trasigt fönster ' idé, jag tror inte ' t kapitalisering av symboler utgör en ' trasigt fönster '. Det är verkligen en avslappnad kod och mitt nuvarande projekt har verkligen mycket av det som jag försöker städa när jag kan.
- Jag håller med. Jag kan läsa alla tre lika bra. Det spelar ingen roll '. Jag använder bara vad filen använder, sedan oavsett vilket språk som föreslås (python) och sedan vad jag känner att projektet kommer att tjäna bäst av. (Jag brukade programmera på gwbasic, och det var allt lock – de gamla goda dagarna!)
Svar
Kan verka dumt, men jag gillar inte understrykningar eftersom understrykningen är tunn och gömmer sig i text med flera rader och jag saknar den. Även i vissa (många) textredigerare och / eller utvecklingsmiljöer, när du dubbelklickar på ett symbolnamn för att markera det för att kopiera eller dra och släppa det, systemet kommer inte att markera hela symbolen, det markerar bara en del av symbolen, mellan angränsande understrykningar. Det gör mig nötter.
Svar
Jag brukar föredra camelCase av den dumma anledningen att jag gör det mesta av min utveckling i Eclipse (för Java, PHP och JavaScript), och när jag Ctrl + ← eller Ctrl + → genom ord, det stannar faktiskt vid camelCase-gränserna.
Dvs. myIntVariable
skulle behandlas av Eclipse som 3 ord när Ct rl + ← → ” genom det.
Jag vet att det är en konstig konst, men jag föredrar att jag kan redigera mellanorden i ett camelCase-namn.