Miért állítják, hogy programozóként elhelyezkedésél csak a tudás számít, amikor nem így van?
Vadiddgeneknek ezt kevésvé szívesen meg mostmár talán késő.
Bármilyen kódrészletet mutattam eddig valaha, az elvileg szörnyű volt, még szimpla for ciklus is.
Van amúgy erre a célra szolgáló felület? Oda még talán...
Fél füllel mintha hallottam volna hasonlóról.
De hallgatom, aki nemcsak bántani akar, hanem segíteni is, az írjon esetleg ötletet, merre tovább.
Egy kitétel van: heti 40-45 óra munka mellett csinálható dolog legyen az.
Nemsokára meglesz a 3 hónapom egy cégnél, elvileg mostmár tudok hitelt felvenni.
Pastebin
A 40 soros konzolon alkalmazások biztos beleférnek, és az már egy jó kezdet. A nagyobbaknak meg valami titkos anonim e-mail címmel egy github (véletlenül se jöjjünk rá, hogy ki vagy).
Oszd meg itt, vagy a Programozás témánál, vagy egy kamu Facebook profillal valamelyik facebookos programozók csoportban.
Az a baj, hogy itt kemény stílust kapok, a programozás kategóriában minden kérdés rossz és egyébként is.
Például tudom, hogy ez undorító, de hogyan lehetne rövidíteni:
https://pastebin (pont) com/viKxLQzk
Köszi, hogy mutattál kódot, így remélhetőleg tudok/tudunk olyan visszajelzést adni, amiből tanulni tudsz.
Az elsőre pozitív, hogy próbáltad objektumorientáltan megközelíteni a dolgot, és van ez az ArrayPatterns nevű osztályod (habár a PatternCreator talán találóbb név lenne). Igazi objektum, van neki két adattagja (patternLength és patternDense), és egy viselkedése (ezek alapján generál egy sakktábla mintát), ez így egy korrekt kis objektum.
1.) Alapszabály, hogy ami nem változhat, azt tegyük readonly-vá. Ebben az esetben hogyha létrehozod az ArrayPatterns nevű osztályt, akkor se a patternLength, se a patternsBase mező értéke többet már nem változhat, ezért érdemes őket readonly-vá és private-té tenni, valahogy így.
private readonly int patternLength, patternDense;
Jó dolog törekedni az immutable (változtathatlan) osztályok létrehozására, aminek pont ez a mintája, a konstruktorban megkap minden bemenő értéket, és változtathatatlanra (readonly) állítja őket.
2.) A ChessBoardPattern() függvény logikailag egy mátrixot kellene, hogy visszaadjon (kétdimenziós tömb), szóval List<string> helyett string[][]-t kellene visszaadni, valahogy így: public string[][] ChessBoardPattern().
Ez nagyon fontos dolog, ha bárki ránéz a kódra, ez az első dolog, amit kiszúr. Igen, így valamivel nehezebb megcsinálni, de logikailag egy táblázat az egy kétdimenziós tömb (mátrix), és nem stringek listája.
3.) A logikához/algoritmushoz csak annyit, hogy az látható, hogy alapvetően mindig két különböző sorból fog állni a sakktáblád, például 10-es hossz, és 1-es sűrűség esetén.
"X X X X X" illetve
" X X X X "
Szóval jobban jársz (és szebb a kódod), ha először ezt a kettőt létrehozod, és utána már csak felváltva beteszed őket a listádba (aminek ugye mátrixnak kellene lennie).
Igazából a legnagyobb probléma az a kóddal, hogy nehezen érthető, ránézek és nem tudom, hogy most mi lesz a temp, mi a selectPattern, az ott miért patternLength - patternDense, az meg ott miért i += patternDense.
Az az igazán clean code, ahol ezt egyből látom, és nem kell ilyeneket gondolkodnom, nem kell hosszú perceket azzal töltenem, hogy megértsem a kódot.
Ilyenkor érdemes a különálló részeket (még akkor is, ha csak 1-2-3 sor) külön függvényekbe kiszervezni, és akkor legalább már a függvény nevéből sejthetem, hogy egyáltalán mi történik ott.
Zárójeles megjegyzés, hogy igazából nem teljesen értettem mi volt itt a feladat, mert ha a patternDense nem 1, hanem valami más szám, akkor már nem is sakktábla a minta.
Esetlegesen még le lehetne kezelni a hibás eseteket (pl. negatív számok, vagy ha a dense>=patternlength/2, akkor az már nem is sakktábla lesz).
Egyébként javaslom neked a Tiszta Kód című könyv elolvasását, szerintem nagyon jó, és hasznos.
Rengeteg olyan példa van benne, mikor hasonló kódból mint a tiéd, különféle módszerek segítségével lépésről-lépésre sokkal olvashatóbb kódot csinálnak.
Köszönöm!
Hát, a visszajelzésed alapján annyira nem is rossz. :) Úgy érzem, elsősorban elnevezésbeli dolgokba kötöttél bele, igen, azt is tanulni kell, de nem mindegy azért. :)
Nem feladat volt, magamtól akartam sakktábla-mintát - aztán meg is szívattam magam.
Amikor pár hete teszteltem, 1, 2, 3 és 4-es mintára kijött a sakktábla.
Ebben az osztályban van másik metódus is, ami ugyanezeket az értékeket használja - mintasűrűség, nagyság. Már csak az egyszerűség kedvéért is így csináltam.
Egy konkrét, életből vett feladatot megoldó programomban az egyik osztályban vagy 4 metódus hívogatja egymást, pont azért, mert tényleg minden lépést külön-külön szerveztem, nem lehet ezzel is átesni a ló túloldalára?
Mondjuk ott logikusnak érződik, mert ahogy írtad, ettől jobban látszik, melyik mit csinál. De azért...
Közben arra is gondoltam, át lehetett volna adni az értéket teljes property-knek,
ha a patternDense értéke már 6 lenne, azt ne fogadja el, hanem akkor állítsuk be alapértékre, pl. 2.
private int _patternDense;
public int PatternDense
{
get
{
if (_patternDense < 6)
{
return _patternDense;
}
else
{
return 2;
}
}
}
Ha például 4-szer 4-es mintát szeretnék, akkor is jobb a mátrix? :(
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!