Programozz, akár egy profi

|

Néhány apró trükkel nem csak az adott feladat teljesítésére képes, hanem valóban hatékony kódokat is készíthetsz, ezen fortélyokat gyűjtöttük össze cikkünkben.

Az Arduino mikrovezérlő programozásához szükséges alapokat elsajátítani, valamint az esetleges mintakódokat értelmezni nem túlzottan bonyolult feladat, azonban elég egy kicsit eltávolodnod a LED-villogtatástól és könnyedén rájössz, hogy mennyire a felszínét karcolgatod csupán a mikrokontrollerekben rejlő lehetőségeknek. Persze már az alapok elsajátítását követően is érdemes lehet ügyelni arra, hogy ne csupán működő, hanem valóban hatékony kódokat készíts, hisz a későbbiekben ez a precizitás biztosan kifizetődő lesz majd.

A nagyobb volumenű projektek során, illetve, ha más programozókkal csapatban dolgozol az elkészült programjaid megjelenése legalább olyan fontos, mint maga a működő szoftver. Ugyanis csak a megfelelően kommentezett, tagolt és kellően átlátható végeredmény az, amit egy másik csapattárs is komolyabb erőlködés, és a teljes program átböngészése nélkül képes lesz szükség esetén megfelelően módosítani. Cikkünkben megmutatjuk, hogy miként érdemes a kódokhoz nyúlni, ha memóriát szeretnél spórolni, illetve arra is rávilágítunk, hogy milyen beépített funkciókat érdemes kerülnöd kódjaid elkészítése során.

Olvashatóág mindenek felett

A programod készítésekor soha nem azt kell szemed előtt tartanod, hogy számodra mennyire érthető az általad legépelt utasítássorozat, hanem azt, hogy ha egy másik - akár kezdő - programozó rápillant a befejezettnek tekintett művedre mennyire fog kiigazodni a látottakon. Éppen ezért a kódod olvashatósága mindenképp egy olyan szempont, amire erősen figyelned kell, különösen akkor, ha mások számára is elérhetővé teszed. Rengeteg különféle tényező befolyásolja az elkészített soraid értelmezhetőségét, azonban talán a legfontosabb, hogy a megfelelő tagoltságra alaposan érdemes odafigyelned. Hisz így nem csupán igazán szemet gyönyörködtető külsőt ölt majd a felületed, a saját munkádat is megkönnyíted és nem kell majd egy hosszú kódkészítés után sorról sora végigvadásznod, hol is maradt le egy pontosvessző, vagy kapcsos zárójel.

Az olvashatóságot ezen kívül az is jelentősen megkönnyíti, ha a programodban használt változók kellően beszédes elnevezést kapnak.

Ily módon ugyanis még az esetleges rövidítések használata mellett is sokkal könnyeben kitalálod, hogy milyen szerepe is van a kódod belsejében az éppen vizsgált változónak, mint ha csak annyit látsz, hogy int x=0; . Tovább egyszerűsíti a kódod értelmezhetőségét a kódok duplikálásának mellőzése is, hisz amennyiben egy programrészletet többször is használnod kell a készülő szoftvereden belül, akkor sokkal egyszerűbb, ha ezt megfelelően kiemelet függvény segítségével teszed meg, mint az, ha ismételten leírod az utasításokat. Ezzel a lépéssel pedig duplán jól jársz, ugyanis amellett, hogy sokkal átláthatóbbá válik a kódod, még jelentősen rövidül is.

Használj konstansokat

Nem véletlen, hogy a konstans változók elterjedtek a különféle programnyelvekben, hisz jelenlétük megkönnyíti a szoftvered utólagos módosítását. Különösen fontos lehet ez az Arduino mikrovezérlő programozása során, ahol például a kommunikációs pinekre is minden probléma nélkül hivatkozhatsz számszerűsített értékkel. Ha ilyen módon beégeted a programodba a számokat akkor a későbbiekben bizony komoly munkád lesz abban az esetben, ha valami miatt az aktuálisan bevetett pin helyett egy másikat kell használnod, hisz kénytelen leszel egyesével átírnod a kódodban az adott érték összes előfordulását. Ennél hatékonyabb, ha a már említett konstans változók használatával még a programod elején definiálod az értékeket, így, ha módosításra kényszerülnél csupán ezen a ponton kell átírnod őket és a kódod alkalmazkodik a változásokhoz.

Ne késlekedj

Rengeteg programkód használ különféle késleltetéseket bizonyos problémák megoldására, azonban a delay() parancs helyett sokkal elegánsabb megoldásokat is választhatsz arra, ha az idő múlását szeretnéd kihasználni. A delay() utasítás ugyanis csupán annyit tesz, hogy az adott ideig az Arduino minden tevékenységét felfüggeszti és a teljes funkcionalitása kimerül a számolásban.

Tehát ha te szeretnél a késleltetéssel párhuzamosan szenzor adatokat beolvasni, erre nem lesz lehetőséged. Éppen ezért sokkal elegánsabb, ha az idő múlására egy külön időzítőt vetsz be, például a millis() függvény használatával, mely az indításától számított időt mutatja ezredmásodpercekben. Ezen funkció mellett már a párhuzamosan megvalósított műveletek is gond nélkül futnak majd. Természetesen a delay() függvények helyenként hasznosak is lehetnek, azonban tudnod kell, hogy mikor érdemes őket használni és mikor kell őket a lehető legnagyobb ívben elkerülni.

Spórolj és rövidíts

Annak ellenére, hogy a legtöbb feladat végrehajtása során nem fogod elérni az Arduino felülete által felkínált memória maximális méretét, azért a hatékonyság szempontjából érdemes lehet odafigyelned néhány apróságra, hisz a jelentéktelennek tűnő spórolási tippek a nagyobb projektek esetén könnyedén éltet menthetnek. Az egyik ilyen megfontolandó módosítás a soros monitora küldött üzenetek esetén kíméli a memóriát. Elég ugyanis a Serial.println("Hello"); üzenet helyett a Serial.println(F("Hello")); kifejezést használnod és az üzenet nem kerül a RAM-ba, vagyis csak a program-memóriájában tárolódik majd. Amennyiben sok kiíratást használ a szoftvered, ezzel a funkcióval jelentős erőforrásokat szabadíthatsz fel. Ezen kívül szintén komoly mennyiségű memóriát spórolhatsz, ha a megfelelő típusokat használod, hisz semmi értelme float-ként deklarálnod egy számot, ha az int is megfelel. Törekedj mindig arra, hogy a legkisebb méretű tárolótípust nevezd meg az adott változó létrehozásakor, mely a feladatot még mindenféle probléma nélkül képes lesz végrehajtani. Nem csak a memóriával, hanem a kódod hosszával sem árt spórolnod, a C++ ugyanis lehetővé teszi, hogy a szoftvereden belül összevontan használj hosszabb kifejezéseket, melynek köszönhetően egy if-else kapcsolatot a több sornyi kód helyett egyetlen utasításon belül tömöríthetsz.

A feltételes operátorok három részből állnak, az első felük tartalmazza magát a feltételt, ezt egy kérdőjel követi, majd az igaz ág esetén használt érték jön, végül pedig egy kettős ponttal szeparálva a hamis is megjelenik. Ily módon a if (IsLEDOn){ IsLEDOn = false; digitalWrite(LEDPin, LOW);} else { IsLEDOn = true; digitalWrite(LEDPin, HIGH); } függvény helyett használhatod a jelentősen rövidebb IsLEDOn = !IsLEDOn; digitalWrite(LEDPin, IsLEDOn ? HIGH : LOW); verziót is kódodban. Amire mindenképp ügyelj, hogy ez a rövidített kifejezés nem biztos, hogy olvashatóbbá teszi a kódot, amit készítettél, azonban rengeteg extra gépeléstől kímélhet meg a használata.

Használj kommenteket

Az igényesen elkésztett kód nem csak jól olvasható, de tele van különféle megjegyzésekkel is, melyek utat mutatnak a külső szemlélők számára. A megjegyzések megfelelő használatával tudathatod a kódodat éppen értelmezni próbáló programozóval, hogy az általad elkészített függvény mire is képes.

A szépen megfogalmazott instrukciókból pedig akár még a laikusok is megérthetik az elkészített programkódod hogyanjait és miértjeit anélkül, hogy egy mikrovezérlőre feltöltenék a szoftvert. A C++ nyelvben a kommentek elkészítéséhez két opciót választhatsz, amennyiben egy sort szeretnél kommentté alakítani a // segítségével teheted ezt meg, ha azonban hosszabb szöveget kívánsz megjegyzésként hagyni a /* */ jelek közé gépeld az üzeneted.

Úgy tűnik, AdBlockert használsz, amivel megakadályozod a reklámok megjelenítését. Amennyiben szeretnéd támogatni a munkánkat, kérjük add hozzá az oldalt a kivételek listájához, vagy támogass minket közvetlenül! További információért kattints!

Engedélyezi, hogy a https://www.helloworldonline.hu értesítéseket küldjön Önnek a kiemelt hírekről? Az értesítések bármikor kikapcsolhatók a böngésző beállításaiban.