EDIT: const int kommer alltid optimeras precis som en constexpr om inte kompilatorn suger. Det enda sättet att faila där är ifall du använder "extern const int".
Kodningsmönster och algoritmer, möjligen språket också.
constexpr var en bra idé, även om det inte spelade någon roll i det här fallet. Jag har lärt mig att folk förväntar sig C++-idiom även om målet är att så snabbt som möjligt att slänga ihop något litet på det här viset. Det blir liksom svårt för folk att läsa det, om man säger så.
Även om andra mer erfarna hade använt sig av funktioner på det här viset (typ C-style) så hade de inte använt globaler, utan de hade för läsbarhetens skull låtit funktionerna ta en referens/argument så att "allt finns där" i en och samma funktion. Jag debatterade/disktuerade (elller som många uppfattar det, sade emot) först om att använda globaler istället, men mina argument höll inte. Det är också alldeles för enkelt att slänga dit en extra parameter och har många fördelar, du kan t.ex. placera argumenten som skickas (de som innnan var globalerna) i sjävla game-loopen. Testning, som jag inte tänkt på, underlättas då man kan testa funktionerna separat.
Sedan var det något om putsning, typ bättre namn och flytta runt saker. Det hade jag kunnat göra men orkade inte. Jag tappade mig på kommentererna också. T.ex. /* Draw block */ void drawblock();. Att flytta runt saker inser jag nu ändå inte hade gjort i närheten lika mycket som att ge funktionerna parametrar och helt enklet plocka bort globalerna.
Sedan finns det folk som inte dogmatiskt skulle använda sig av namespace och uppdelade filer här och håller med om att det är okej att slänga ihop allt i en enda fil om det är tillräckligt litet och man vet att det så ska förbli, för ibland vet man helt enkelt att "detta är det", t.ex. när man testar nya algoritmer för tetris och bara så snabbt som möjligt vill få det gjort där fancy överabstrakta funktioner inte tjänar något.
Citat:
... och den dagen du har ett projekt som växer så att du vill dela upp kod i headers och moduler får du gå in och byta till constexpr. Varför inte använda det från början?
Varför? För att du vill använda C++ och det vore väl bra om du använde språkets styrka. Även om man inte måste använda OOP i C++ så finns det fördelar i framförallt läsbarhet.
Men visst, för småprojekt som ryms på ett par skärmsidor är det strunt samma vilken kodningsstil man använder.
Vad jag ställer mig frågande till är vad du egentligen vill diskutera. Är det språket, kodningsmönster eller algoritmerna?
Varför? För att du vill använda C++ och det vore väl bra om du använde språkets styrka. Även om man inte måste använda OOP i C++ så finns det fördelar i framförallt läsbarhet.
Men visst, för småprojekt som ryms på ett par skärmsidor är det strunt samma vilken kodningsstil man använder.
Vad jag ställer mig frågande till är vad du egentligen vill diskutera. Är det språket, kodningsmönster eller algoritmerna?
Kodningsmönster och algoritmer, möjligen språket också.
constexpr var en bra idé, även om det inte spelade någon roll i det här fallet. Jag har lärt mig att folk förväntar sig C++-idiom även om målet är att så snabbt som möjligt att slänga ihop något litet på det här viset. Det blir liksom svårt för folk att läsa det, om man säger så.
Även om andra mer erfarna hade använt sig av funktioner på det här viset (typ C-style) så hade de inte använt globaler, utan de hade för läsbarhetens skull låtit funktionerna ta en referens/argument så att "allt finns där" i en och samma funktion. Jag debatterade/disktuerade (elller som många uppfattar det, sade emot) först om att använda globaler istället, men mina argument höll inte. Det är också alldeles för enkelt att slänga dit en extra parameter och har många fördelar, du kan t.ex. placera argumenten som skickas (de som innnan var globalerna) i sjävla game-loopen. Testning, som jag inte tänkt på, underlättas då man kan testa funktionerna separat.
Sedan var det något om putsning, typ bättre namn och flytta runt saker. Det hade jag kunnat göra men orkade inte. Jag tappade mig på kommentererna också. T.ex. /* Draw block */ void drawblock();. Att flytta runt saker inser jag nu ändå inte hade gjort i närheten lika mycket som att ge funktionerna parametrar och helt enklet plocka bort globalerna.
Sedan finns det folk som inte dogmatiskt skulle använda sig av namespace och uppdelade filer här och håller med om att det är okej att slänga ihop allt i en enda fil om det är tillräckligt litet och man vet att det så ska förbli, för ibland vet man helt enkelt att "detta är det", t.ex. när man testar nya algoritmer för tetris och bara så snabbt som möjligt vill få det gjort där fancy överabstrakta funktioner inte tjänar något.
__________________
Senast redigerad av kakelpanna 2017-09-08 kl. 21:34.
Senast redigerad av kakelpanna 2017-09-08 kl. 21:34.
