Wanneer u meer en meer begint te lezen over softwareontwikkeling, komt u vaak de uitdrukking "schone code" tegen. In zijn puurste vorm is dit de code die andere mensen gemakkelijk kunnen lezen. Het is expressief en mooi, en je kunt eenvoudig zijn intentie onderscheiden door ernaar te kijken .
Het schrijven van schone code is gemakkelijker gezegd dan gedaan.
Of je nu een Arduino bent Aan de slag met Arduino: een beginnersgids Aan de slag met Arduino: een beginnersgids Arduino is een open-source prototypeplatform voor elektronica op basis van flexibele, gebruiksvriendelijke hardware en software. Het is bedoeld voor kunstenaars, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Lees meer tinkerer, of je bouwt Raspberry Pi Raspberry Pi: De onofficiële zelfstudie Raspberry Pi: de onofficiële zelfstudie Of je nu een Pi-eigenaar bent die meer wil leren of een potentiële eigenaar van dit apparaat voor creditcardformaat, dit is niet niet een gids die je wilt missen. Lees Meer applicaties met Python, of je bent zelfs een webontwikkelaar, er zijn enkele handige tips om te volgen die je code gemakkelijker leesbaar maken voor anderen. Dit is wat je moet weten .
Wees consistent
Misschien is de eerste, en meest voor de hand liggende tip, om consistent te zijn in wat je doet. Een goed voorbeeld hiervan is het volgen van dezelfde patronen bij het benoemen van functies. De absolute basis van programmeren voor beginners (deel 2) De absolute basis van programmeren voor beginners (deel 2) In deel 2 van onze absolute beginnersgids voor programmeren, zal ik over de basisprincipes van functies, retourwaarden, loops en conditionals. Zorg ervoor dat je deel 1 hebt gelezen voordat je dit aanpakt, waar ik de ... Lees meer en variabelen De grondbeginselen van computerprogrammering 101 - Variabelen en datatypes De grondbeginselen van computerprogrammering 101 - Variabelen en gegevenstypes Na een introductie en een korte discussie over Objectgeoriënteerd programmeren voor en waar zijn naamgenoot vandaan komt, ik dacht dat het tijd is om de absolute basis van programmeren op een niet-taalspecifieke manier te doorlopen. Dit ... Lees meer. Kies een naamgevingsconventie en blijf daarbij.
Dus, welke naamgevingsconventie zou je moeten gebruiken?
Nou, als je Python schrijft voor Raspberry Pi, is het antwoord duidelijk. De PEP-8-standaard (de barometer voor goede, schone Python-code) zegt dat variabelenamen in kleine letters moeten zijn, waarbij elk woord wordt gescheiden door een onderstrepingsteken. Bijvoorbeeld: gpio_input en moisture_sensor_reading .
De Arduino-stijlgids zegt impliciet dat je je variabelen moet schrijven in wat bekend staat als Camel Case. Hier worden woorden nergens van gescheiden, maar de eerste letter van elk woord wordt met een hoofdletter geschreven, behalve het eerste woord. Bijvoorbeeld: buttonPressed en temperatureReading .
Er zijn natuurlijk andere stijlen van variabele naamgeving. Het bovenstaande is eenvoudig dat wordt aanbevolen door de officiële stijlgidsen. Maar wat je ook kiest, zorg ervoor dat je eraan vasthoudt en gebruik dezelfde naamgevingsconventie in je hele programma.
Schrijf zinvolle opmerkingen
Reacties zijn een goede manier om uit te leggen wat je programma doet. U kunt aangeven wat elke functie doet en elke variabele vertegenwoordigt in uw eigen woorden. Dit maakt het gemakkelijk voor een externe partij om uw code te lezen, maar maakt uw code ook gemakkelijker te onderhouden, omdat u deze uiteindelijk beter begrijpt.
Maar als je je opmerkingen niet schrijft op een manier die voor de hand ligt en expressief is, dan zou je je misschien minder druk maken.
Wanneer u opmerkingen schrijft, moet u proberen het waarom van de code uit te leggen, naast het hoe. Probeer de intentie overduidelijk te maken en zeg iets over de code die hij zelf niet kan zeggen. Dus in plaats van:
// update het lezen
Overweeg om te schrijven:
// Werk het aantal keren dat de laserstraal is gebroken bij voordat u het tweet
Zorg ervoor dat je volledige, grammaticaal correcte zinnen schrijft. Bovendien zegt de PEP-8-standaard voor Python dat je altijd je opmerkingen en variabelen in het Engels moet schrijven. Dit maakt het eenvoudiger voor anderen om met u samen te werken, mocht u besluiten om uw code vrij te geven als open source, aangezien Engels de lingua franca is van softwareontwikkeling.
De Arduino-stijlgids gaat nog verder en zegt dat je elk codeblok, elke for-lus en elke variabele-verklaring moet becommentariëren.
Persoonlijk vind ik dat een beetje extreem. Als u uitgebreide, expressieve variabelenamen schrijft, is uw code al zelfdocumenterend. Dat gezegd hebbende, aarzel niet om opmerkingen toe te voegen waarvan je denkt dat ze nodig zijn. Gebruik je eigen gezond verstand.
Vereenvoudig uw code
Wanneer je voor de eerste keer leert om te ontwikkelen Hoe leer je zonder al de stress Programmeren zonder al je stress Misschien heb je besloten om te blijven programmeren, of het nu voor een carrière is of gewoon als een hobby. Super goed! Maar misschien begin je je overweldigd te voelen. Niet zo goed. Hier is hulp om uw reis te vergemakkelijken. Read More, je bent vaak vervuld van een immense enthousiasme. Je leest alles wat je kunt over de door jou gekozen taal, kader of platform. Je begint concepten tegen te komen die je nog nooit eerder hebt gekend en je bent te popelen om ze te gebruiken in je eigen code.
Dingen zoals ternaire operatoren, waarmee u de logica van een "if-statement" zoals deze kunt samenvatten:
int x = 5; if ( x< 10) { y = 1; { else { y = 0; }
In een enkele regel, zoals deze:
int x = 5; int y = (x< 10) ? 1 : 0; printf("%i\n", y);
De operators van Ternary zijn zeker cool en ik moedig je aan om ze te lezen. Maar wanneer u code schrijft die anderen gemakkelijk kunnen lezen, kunnen ze het best worden vermeden. Dat is maar een voorbeeld.
De Arduino-stijlgids moedigt u ook aan om verwijzingen, #define-instructies en gegevenstypen anders dan de standaard te vermijden: boolean, char, byte, int, unsigned int, long, unsigned long, float, double, string, array en void. Vermijd datatypes zoals uint8_t, omdat deze minder vaak worden gebruikt, niet worden uitgelegd in de documentatie en niet erg kortzichtig zijn.
Inspringen en gebruik maken van witruimte
Als het gaat om het schrijven van schone code, hebben Python-gebruikers een voordeel, omdat de standaard Python-tolk opdracht geeft dat alle code op een verstandige manier gestructureerd en ingesprongen moet zijn. Als u niet na elke functie en klassenverklaring en voorwaardelijke verklaring niet inspringt, wordt uw programma gewoon niet uitgevoerd.
Op Arduino is er niets dat je ervan weerhoudt om ongestructureerde, gecomprimeerde code te schrijven. Dit is uiteindelijk moeilijk te lezen en moeilijk te onderhouden.
Maar er is niets dat u ervan weerhoudt om uw code beter te structureren.
Stel eerst vast hoeveel u wilt laten inspringen. U moet de tabsleutel oordeelkundig gebruiken, omdat elke teksteditor de ASCII-code anders behandelt dan het tabblad en als u uw code deelt met iemand anders, is er een kans dat ze onbedoeld inconsistenties in uw inspringing introduceren. Deze inconsistenties kunnen je programma breken, vooral als je een witruimte-gevoelige taal gebruikt zoals CoffeeScript. CoffeeScript Is JavaScript zonder de hoofdpijn CoffeeScript is JavaScript zonder de hoofdpijn Ik heb nog nooit zo veel van JavaScript gehouden. Vanaf de dag dat ik mijn eerste regel gebruikte, heb ik altijd mijn best gedaan dat alles wat ik erin schrijf altijd als een Jackson lijkt ... Lees meer of Python. Dit artikel van OpenSourceHacker legt in meer detail uit waarom de tab-toets moet worden vermeden.
Ik gebruik meestal vier spaties voor elke inspringing, maar het totale aantal is aan jou. Zolang je maar consistent bent.
U kunt uw IDE en teksteditor zo configureren dat elk tabblad als een bepaald aantal spaties wordt behandeld, maar u kunt de tabsleutel gebruiken zonder het risico van het introduceren van problemen. Als u Sublime Text 2 gebruikt, bekijk dan hun officiële documentatie. Als u Vim gebruikt, bewerkt u uw .vimrc- bestand met deze regels. De Arduino-editor doet dit automatisch voor u en voegt twee spaties in wanneer u op tab drukt.
Vervolgens moet u gewoon weten waar u uw code kunt inspringen. Als goede vuistregel moet je altijd na elke functieverklaring inspringen, en na elke, anders, voor, terwijl, switch en case- statement.
Veel editors hebben de mogelijkheid om hele blokken met code tegelijk in te knippen. Als u Sublime Text 2 gebruikt, kunt u een sneltoets of toetscombinatie instellen. Anders kunt u de standaardcombinatie gebruiken, die (op OS X) Cmd + [is . In de Arduino-editor kun je de inspringing van je bestand automatisch corrigeren door op Ctrl + T op Windows en Linux en Cmd + T op OS X te drukken.
Het hangt helemaal af van je editor, dus lees de handleiding !
Do not Repeat Yourself
Een van de belangrijkste mantra's van goede softwareontwikkeling is om jezelf niet te herhalen, die vaak wordt verkort tot DROOG.
Het schrijven van DRY-code is ongelooflijk belangrijk, omdat het ervoor zorgt dat de logica van je programma consistent is, je in staat stelt om één keer te veranderen en het globaal te laten weerspiegelen, en je minder tijd aan het schrijven bent om steeds hetzelfde te schrijven.
De beste manier om DROOG te blijven is met een liberaal en genereus gebruik van functies - een herhaalde taak inkapselen met een codeblok dat je keer op keer kunt bellen - en ervoor zorgen dat elke code afzonderlijk en goed geschreven is.
Een goede functie is kort; de PEP-8-gids zegt weinig over de lengte van de functie, maar Clean Code: A Handbook of Agile Software Vakmanschap door Bob Martin (sterk aanbevolen) zegt dat "functies bijna nooit 20 regels lang mogen zijn". Bij voorkeur zouden ze nog korter zijn dan dat .
Functies zouden ook precies één ding moeten doen. Een functie nodig die twee dingen doet? Schrijf twee functies.
Deze tips maken het gemakkelijk om de stroom van een programma te volgen en om het zo nodig te debuggen. Er is ook een extra voordeel voor Arduino-gebruikers, die sterk worden beperkt door opslagbeperkingen, omdat redundanties worden verwijderd. Dit resulteert in kleinere programma's.
Wees expliciet
Een andere belangrijke mantra van softwareontwikkeling is "expliciet is beter dan impliciet" . Het betekent dat je code op het eerste gezicht vrij veel moet schreeuwen wat het doet. De Arduino-stijlgids zegt dat dit ding moet worden vermeden:
if(buttonPressed){ doSomething(); }
Integendeel, je moet duidelijk maken wat er gebeurt. Schrijf in plaats daarvan iets als dit:
if (buttonPressed == True){ doSomething(); }
Uitgaan en code (goed)
Het schrijven van schone code is verrassend eenvoudig. Je moet alleen consequent zijn in alles wat je doet, ontslagen vermijden en expliciet zijn. Onthoud dat schone code alleen code is die leesbaar is.
Er is veel goed leesmateriaal over dit onderwerp. Een goed startpunt is Arduino-handleiding en API-stijlhandleidingen, gevolgd door de PEP-8-standaard als je Python-apps voor de Raspberry Pi aan het bouwen bent. Als je een andere taal gebruikt (zoals Javascript op het Tessel-bordgebouw The Internet of Things, met Tessel: The Node.js Development Board Building The Internet of Things, met Tessel: De Node.js Development Board Tessel is een nieuw ras van ontwikkelbord dat volledig op Node.js draait en na een succesvolle Kickstarter nu het punt bereikt heeft dat het voor iedereen beschikbaar is. Lees meer), kijk op Google voor een officiële stijlgids.
Als u op zoek bent naar een meer academische lezing over dit onderwerp, bekijk dan Clean Code: A Handbook of Agile Software Craftsmanship van Bob Martin. Ik heb het eerder in dit artikel genoemd en het wordt sterk aanbevolen. Hoewel het Java gebruikt om concepten te illustreren, kunnen veel van de ideeën worden doorgegeven aan andere talen, zoals Python en C voor Arduino.
Er zijn ook enkele briljante blogposts online die illustreren hoe je goede, beschrijvende, schone code schrijft. Ik raad je aan "Clean, high quality code: een handleiding over hoe je een betere programmeur kunt worden" te lezen door Arash Arabi die voor butterfly.com.au schrijft, en "The Fundamentals of Writing Clean Code" door Chris Reynolds, die schrijft voor webdevstudios. com.
Hoewel het niet expliciet gerelateerd is aan schone code, is het ook nuttig om te weten welke functies en bibliotheken het best vermeden kunnen worden in de taal van uw keuze. Als je bijvoorbeeld PHP leert, vermijd dan de "mysql" -bibliotheken en als je fysieke producten bouwt met Arduino, zou je nooit de Delay-functie Arduino Delay-functie moeten gebruiken en waarom je Arduino niet zou moeten gebruiken. Vertragingsfunctie en waarom u het niet zou moeten gebruiken Hoewel delay () handig is voor eenvoudige demonstraties van hoe Arduino werkt, moet u het echt niet in de echte wereld gebruiken. Dit is waarom, en wat u in plaats daarvan zou moeten gebruiken. Lees verder .
Vergeet niet dat code die gemakkelijker te lezen is gemakkelijker te onderhouden is. En als je ergens vast komt te zitten, is het gemakkelijker voor iemand om het te lezen en je te helpen.
Heb je tips voor het schrijven van schone code? Heb ik iets gemist? Vertel het me! Laat een reactie achter en laat het me weten.
Photo Credits: Dry Bed (Premasagar), Little TAB Key (Kai Hendry), 2015 (Wikilogia)