Autorze, już wiesz, że to nie jest kod na poziomie Seniora.
Całe to kombinowanie, "co zrobić, by mój kod wyglądał profesjonalnie" nie ma sensu, bo jeśli działa, to nie ruszaj.
Jakość kodu dowodzi się testami na różnych poziomach i AI na razie tego nie robi.
Dodam jeszcze, że Senior oddaje kod (release) przejrzany (review) i napisany zgodnie z przyjętymi w projekcie regułami (coding rules), oraz spełniający wymagania klienta (requirements) potwierdzone testami. Ewidentnie żadne z wymienionych cech nie jest spełnione (może poza testami, które twierdzisz, że przeprowadziłeś).
Senior powinien być w stanie wyjaśnić każdą decyzję, którą podjął (design decision). W kodzie napisanym przez AI spodziewałbym się odpowiednich komentarzy w takich miejscach. Jest ich trochę, ale IMO nie każda decyzja jest odpowiednio skomentowana.
Kod napisany przez Seniora będzie zrozumiały dla Juniora, a odwrotnie nie zawsze, a w programowaniu chodzi o to, żeby kod był zrozumiały ze względu na to, że statystycznie dany kod pisze się raz, a czyta wielokrotnie.
W nowoczesnych technikach C++ nie chodzi o wykorzystanie najnowszego C++, a skorzystanie z technik dostępnych dla danego kompilatora. Większość sensownych usprawnień języka zostało dodanych w C++14/17, a ta wersja jest wspierana przez Arduino Avr Core.
Co bym jeszcze zmienił, gdybym chciał rozwijać ten program (ale tylko wtedy):
- pozbył się delay() (to już było wspomniane), ale wiąże się to ze zmianą architektury programu
- std::array zamiast tablic, to te są bezpieczniejsze
- SystemState::STATE_INITIALIZING, to Masło::MasłoMaślane; w przypadku enum class wystarczy Masło::Maślane, bo zawsze używasz zakresu
- użycie "isnan(...)" jest na poziomie juniora, bo zakłada, że wszyscy wiedzą, jak binarnie kodowany jest NaN, którego program faktycznie nie sprawdza. Czytelny kod, to np. rzutowanie stałej constexpr uint32_t DefaultEepromValue = 0xFFFFFFFF; na float
- nie akceptuję decyzji, że "data" nie jest "const" w tego typu przypadkach:
Zaloguj się, aby zobaczyć kod
Gdyby "data" było "const", to może kompilator wygenerowałby lepszy kod.
Temat wymagań wydajnościowych i zachowania w sytuacjach wyjątkowych (np. niskie napięcie, odłączenie sensora, zakłócenia na linii) nawet nie został poruszony.