Arduino og Raspberry Pi Beginner? Slik skriver du ren kode
Når du begynner å lese mer og mer om programvareutvikling, kommer du ofte over setningen “ren kode”. I sin reneste form er dette koden som er lett for andre å lese. Det er uttrykksfulle og vakre, og du kan enkelt forstå sin hensikt bare ved ser på det.
Skrive ren kode er lettere sagt enn ferdig.
Enten du er en Arduino Komme i gang med Arduino: En nybegynnersveiledning Komme i gang med Arduino: En nybegynners guide Arduino er en åpen kilde-elektronikk prototyping plattform basert på fleksibel, brukervennlig maskinvare og programvare. Det er ment for kunstnere, designere, hobbyister, og alle som er interessert i å lage interaktive objekter eller miljøer. Les mer tinkerer, eller du bygger Raspberry Pi Raspberry Pi: Den uoffisielle opplæringen Raspberry Pi: Den uoffisielle opplæringen Uansett om du er en nåværende Pi-eier som ønsker å lære mer eller en potensiell eier av denne kredittkortstørrelsesenheten, er dette ikke Det er ikke en guide du vil savne. Les flere applikasjoner med Python, eller du er enda en webutvikler. Det er noen nyttige tips å følge som vil gjøre koden enklere å lese av andre. Her er hva du trenger å vite.
Være konsekvent
Kanskje det første og mest åpenbare tipset er å være konsistent i hva du gjør. Et godt eksempel på dette følger de samme mønstrene når du navngir funksjoner. Det absolutte grunnleggende om programmering for nybegynnere (del 2) Absolutt grunnleggende programmering for nybegynnere (del 2) I del 2 av vår absolutte nybegynnere guide til programmering, vil jeg være dekker grunnleggende funksjoner, returverdier, sløyfer og kondisjoner. Pass på at du har lest del 1 før du takler dette, hvor jeg forklarte ... Les mer og variabler Grunnleggende om dataprogrammering 101 - Variabler og datatyper Grunnleggende om dataprogrammering 101 - Variabler og datatyper Etter å ha introdusert og snakket litt om Objektorientert Programmering før og hvor dennes navn kommer fra, jeg trodde det er på tide at vi går gjennom de absolutte grunnleggende programmering på en ikke-språkspesifikk måte. Dette ... Les mer. Du bør velge en navngivningskonvensjon, og hold deg til den.
Så, hvilken navngivningskonvensjon bør du bruke?
Vel, hvis du skriver Python for Raspberry Pi, er svaret klart. PEP-8-standarden (barometeret for god, ren Python-kode) sier at variabelnavn skal være i små bokstaver, med hvert ord atskilt med en underskrift. For eksempel: gpio_input og moisture_sensor_reading.
Arduino-stilguiden sier implisitt at du bør skrive variablene dine i det som kalles Camel Case. Her er ord ikke adskilt av noe, men det første bokstaven i hvert ord er kapitalisert, bortsett fra det første ordet. For eksempel: buttonPressed og temperatureReading.
Det er selvsagt andre stiler med variabel navngivning. Ovenstående er ganske enkelt det som anbefales av den offisielle stilguiden. Men hva du velger, sørg for at du holder fast ved det, og bruk samme navnekonvensjon i hele programmet.
Skriv betydningsfulle kommentarer
Kommentarer er en fin måte å forklare hva programmet gjør. Du kan angi hva hver funksjon gjør, og hver variabel representerer i dine egne ord. Dette gjør det enkelt for en tredjepart å lese koden din, men gjør også koden enklere å vedlikeholde, etterhånden som du forstår det bedre.
Men hvis du ikke skriver dine kommentarer på en måte som er åpenbar og uttrykksfulle, så kan du ikke så godt bry.
Når du skriver kommentarer, bør du prøve å forklare hvorfor av koden, i tillegg til hvordan. Prøv å gjøre intensjonen tydelig og si noe om koden som den ikke kan si seg selv. Så, i stedet for:
// oppdatering lesing
Vurder å skrive:
// Oppdatere antall ganger laserstrålen er brutt før du tweeter den ut
Pass på at du skriver i full, grammatisk korrekte setninger. I tillegg sier PEP-8-standarden for Python at du alltid skal skrive dine kommentarer og variabler på engelsk. Dette gjør det enklere for andre å samarbeide med deg, bør du bestemme deg for å frigjøre koden din som åpen kildekode, da engelsk er ganske mye lingua franca av programvareutvikling.
Arduino-stilguiden går enda lenger, og sier at du må kommentere hver kodeblokk, hver for løkke, og hver variabel deklarasjon.
Personlig tror jeg det er litt ekstremt. Hvis du skriver verbose, uttrykksfulle variabelnavn, så er koden din allerede selvdokumenterende. Når det er sagt, ikke nøl med å legge til kommentarer der du tror de trengs. Bruk din egen gode vurdering.
Forenkle koden din
Når du lærer å utvikle for første gang Hvordan lære programmering uten all stress Slik lærer du programmering uten all stress Kanskje du har bestemt deg for å forfølge programmering, enten for en karriere eller bare som en hobby. Flott! Men kanskje du begynner å føle deg overveldet. Ikke så bra. Her er hjelp til å lette reisen din. Les mer, du er ofte fylt med en enorm rush av entusiasme. Du leser alt du kan om ditt valgte språk, rammeverk eller plattform. Du begynner å møte konsepter du aldri visste før, og du er alt for ivrig etter å bruke dem i din egen kode.
Ting som ternære operatører, som lar deg kondensere logikken til en “hvis uttalelse” slik som denne:
int x = 5; hvis (x < 10) y = 1; else y = 0;
I en enkelt linje, slik:
int x = 5; int y = (x < 10) ? 1 : 0; printf("%i\n", y);
Ternære operatører er absolutt kule, og jeg oppfordrer deg til å lese opp på dem. Men når du skriver kode som er lett for andre å lese, er de best unngått. Det er bare ett eksempel.
Arduino-stilguiden oppfordrer deg også til å unngå poengter, #define-setninger og datatyper enn standard: boolsk, karbon, byte, int, usignert int, lang, usignert lang, flyt, dobbel, streng, matrise og tomrom. Du bør unngå datatyper som uint8_t, da disse er mindre vanlige, ikke forklart i dokumentasjonen, og ikke veldig tvers.
Indent, og dra nytte av Whitespace
Når det gjelder å skrive ren kode, er Python-brukere til en fordel, da standard Python-tolk mandater at all kode må være fornuftig strukturert og innrykket. Hvis du ikke strekker etter hver funksjon og klassedeklarasjon, og betinget utsagn, vil programmet ditt bare ikke løpe.
På Arduino er det ingenting som hindrer deg fra å skrive ustrukturert, komprimert kode. Dette er i siste instans vanskelig å lese og vanskelig å vedlikeholde.
Men det er ingenting som hindrer deg fra å strukturere koden din heller, heller ikke.
Først må du fastslå hvor mye du skal innhente av. Du bør bruke fanen tasten på en god måte, da hver tekstredigerer behandler ASCII-koden for kategorien annerledes, og hvis du deler koden med noen andre, er det en sjanse for at de uforvarende kan introdusere inkonsekvenser i innrykket ditt. Disse inkonsekvensene kan ødelegge programmet, spesielt hvis du bruker et hvitt-romssensitivt språk som CoffeeScript CoffeeScript, er JavaScript uten hodepine. CoffeeScript er JavaScript uten hodepine. Jeg har aldri gøy å skrive JavaScript så mye. Fra den dagen jeg skrev min første linje ved hjelp av den, har jeg alltid irritert at det jeg skriver i det alltid ender opp som en Jackson ... Les mer eller Python. Denne artikkelen fra OpenSourceHacker forklarer mer detaljert hvorfor tabellen nøkkelen bør unngås.
Jeg pleier å bruke fire mellomrom for hvert innrykk, men det totale nummeret er opp til deg. Bare så lenge du er konsistent.
Du kan konfigurere IDE og tekstredigeringsprogrammet til å behandle hver kategori som et angitt antall mellomrom, men du kan imidlertid bruke tabulatortasten uten risiko for å introdusere problemer. Hvis du bruker Sublime Text 2, sjekk ut deres offisielle dokumentasjon. Hvis du bruker Vim, rediger du bare .vimrc fil med disse linjene. Arduino-editoren gjør dette automatisk for deg, og legger inn to mellomrom når du trykker på kategorien.
Deretter trenger du bare å vite hvor du skal legge inn koden din. Som en god tommelfingerregel, bør du alltid legge inn etter hver funkledserklæring, og etter hver hvis, ellers, til, samtidig som, bytte om, og sak uttalelse.
Mange redaktører kommer med muligheten til å legge inn hele blokker med koden samtidig. Hvis du bruker Sublime Text 2, kan du sette opp en hurtigtast eller tastetrykk kombinasjon. Ellers kan du bruke standardkombinasjonen, som (på OS X) er Cmd + [. I Arduino-editoren kan du fikse filens innrykk automatisk ved å trykke Ctrl + T på Windows og Linux, og Cmd + T på OS X.
Det er helt avhengig av redaktøren din, så les håndboken!
Ikke gjenta deg selv
En av de viktigste mantraene med god programvareutvikling er Gjenta ikke selv, som ofte blir forkortet til TØRKE.
Skrive DRY-kode er utrolig viktig, da det sikrer at logikken i programmet ditt er konsekvent, gjør at du kan gjøre endringer på ett sted og få det reflektert globalt, og du bruker mindre tid på å skrive det samme igjen og igjen.
Den beste måten å bli tørr er med en liberal og sjenerøs bruk av funksjoner - inkapslere en gjentatt oppgave med en blokk med kode du kan ringe igjen og igjen - og sørge for at hver enkelt er tydelig og godt skrevet.
En god funksjon er kort; PEP-8-veiledningen sier lite om funksjonslengde, men Clean Code: En håndbok av Agile Software Craftsmanship av Bob Martin (anbefales) sier at “Funksjonene burde nesten aldri være 20 linjer lange”. Fortrinnsvis ville de være enda kortere enn det.
Funksjoner bør også gjøre nøyaktig en ting. Trenger en funksjon som gjør to ting? Skriv to funksjoner.
Disse tipsene gjør det enkelt å følge strømmen av et program, og til slutt feilsøke det om nødvendig. Det er også en ekstra fordel for Arduino-brukere, som er tett begrenset av lagringsbegrensninger, da redundansene fjernes. Dette resulterer i mindre programmer.
Være eksplisitt
En annen viktig mantra av programvareutvikling er “eksplisitt er bedre enn implisitt”. Det betyr at koden din skal ganske mye rope hva det gjør ved første øyekast. Arduino-stilguiden sier at ting som dette bør unngås:
hvis (buttonPressed) doSomething ();
Snarere bør du gjøre det klart hva som skjer. I stedet skriver du noe slikt:
hvis (buttonPressed == True) doSomething ();
Gå ut og kode (vel)
Skrive ren kode er overraskende enkel. Du må bare være konsekvent i alt du gjør, unngå redundanser, og være eksplisitte. Husk, ren kode er bare kode som er lesbar.
Det er mye bra lesemateriell om dette emnet. Et flott utgangspunkt er Arduino-veiledning og API-stilguider, etterfulgt av PEP-8-standarden hvis du bygger Python-apper for Raspberry Pi. Hvis du bruker et annet språk (som Javascript på Tessel-styret) Bygg Tesselets Internett, Med Tessel: Node.js Utviklingsstyret Bygg Tesselets Internett, Med Tessel: Node.js Utviklingsstyret Tessel er en ny rase av utviklingsbrett som kjører helt på Node.js, og etter en vellykket Kickstarter, har de nå kommet til å være tilgjengelig for alle. Les mer), sjekk Google for en offisiell stilguide.
Hvis du leter etter en mer akademisk lesning om emnet, sjekk ut Clean Code: En håndbok av Agile Software Craftsmanship av Bob Martin. Jeg nevnte det tidligere i denne artikkelen, og det kommer sterkt anbefalt. Selv om det bruker Java for å illustrere konsepter, kan mange ideer videreføres til andre språk, som Python og C for Arduino.
Det er også noen glimrende blogginnlegg på nettet som illustrerer hvordan du skriver god, beskrivende, ren kode. Jeg anbefaler at du sjekker ut “Ren, høy kvalitetskode: en veiledning om hvordan du blir en bedre programmerer” av Arash Arabi skriver for butterfly.com.au, og “Grunnlaget for å skrive ren kode” av Chris Reynolds, skriver for webdevstudios.com.
Selv om det ikke er eksplisitt relatert til ren kode, er det også nyttig å lære hvilke funksjoner og biblioteker som helst unngås best i ditt valg språk. For eksempel, hvis du lærer PHP, bør du unngå “mysql” biblioteker, og hvis du bygger fysiske produkter med Arduino, bør du aldri bruke forsinkelsesfunksjonen Arduino Delay-funksjonen, og hvorfor du ikke bør bruke den Arduino Delay-funksjonen, og hvorfor du ikke bør bruke den mens forsinkelsen () er praktisk For grunnleggende demonstrasjoner av hvordan Arduino fungerer, bør du ikke bruke den i den virkelige verden. Her er hvorfor, og hva du bør bruke i stedet. Les mer .
Husk at kode som er enklere å lese, er lettere å vedlikeholde. I tillegg, bør du noen gang bli sittende fast med noe, er det lettere for noen å lese det og hjelpe deg.
Har du noen tips for å skrive ren kode? Savnet jeg noe? Fortell meg! Gi meg en kommentar nedenfor, og gi meg beskjed.
Foto Credits: Dry Bed (Premasagar), Little TAB Key (Kai Hendry), 2015 (Wikilogia)
Utforsk mer om: Programmering.