Gra. Klasyczny podział na model i widok. Załóżmy, że każdy obiekt ze świata gry jest reprezentowany przez dwie klasy, jedną w modelu i jedną w widoku. Główna klasa abstrakcyjna w widoku nazywa się Sprite. Jak byście nazwali główną klasę abstrakcyjną w modelu, tak żeby to nie był Object ani Entity? Creature też nie może być, bo trawa czy inny nożyk pod to nie podchodzi.
#programowanie #stylkodowania
@CamelCase: możesz też dopisać na koniec nazwy rolę jaką pełni klasa. Np. w MVVM masz podział na Model, View, ViewModel.

View - widok, wszystko co jest związane z wyglądem.
ViewModel - logika dla widoku.
Model - obiekt biznesowy (np. samochód, pracownik, produkt).

Jak tworzy się widok o nazwie EmployeeDashboard, to ViewModel ma nazwę EmployeeDashboardViewModel. Może coś podobnego zastosuj.
Tym razem pytanie do programistów Javy. :)


Jak wiadomo, wypada aby gettery które zwracają boolean zaczynały się nie od get, a od is. No to mamy na przykład klasę Book, a dowolna książka może być akurat otwarta lub zamknięta. I załóżmy, że w tej klasie jest pole typu boolean, które określa czy jest zamknięta czy otwarta. No więc skoro metoda nazywa się isOpen(), to jak powinno nazywać się pole? Po prostu open,
No to teraz mam proste, wydawałoby się pytanie. :) O nazewnictwo się rozchodzi.

Załóżmy, że mam potrzebę wczytywać dane z pliku. Oczywiście wczytywanie z pliku jest operacją, która może się z różnych względów nie powieść, więc jak bozia przykazała rozdzieliłem to na dwie metody. Publiczna otwiera plik o zadanej nazwie i sprawdza czy wszystko jest w porządku (czy prawidłowy typ pliku, czy można z niego czytać, czy spełnione są inne warunki pozwalające
Być może masz rację, że takie rozwiązanie jest najlepsze. Choć do bólu, proste jest piękne. Wiesz może, czy stosuje się je w poważnych projektach?


@Onoki: Np. PIMPL, uƶywany na pewno w Qt i pewnie w gazylionie innych projektów.

Implementacje standardowej biblioteki mają podprzestrzenie nazw "detail", gdzie trzymają implementacje szablonów, pewnie są inne przykłady ale cięƶko mi się teraz myśli.
Czy ktoś spotkał się kiedyś z kontrolerem będącym singletonem w MVC, w Javie? Otóż zaimplementowałem mój kontroler jako mediator i póki co muszę przekazywać referencje do niego do każdego panelu, menu, przycisków i tak dalej. Zdaję sobie sprawę, że singleton to antywzorzec, ale akurat przypadku kontrolera - mediatora wydaje mi się bardzo naturalna jego implementacja (jako, że i tak ma być tylko jeden i praktycznie wszystko musi mieć do niego dostęp). Co
Czy ktoś zna tu asemblera? :D

Mamy dwa sposoby zapisu tego samego kodu (taki sam przepływ sterowania):

1.

if(WARUNEK) {

return COŚ;

}

// w przeciwnym razie

2.

if(WARUNEK) {

return COŚ;

} else {

// w przeciwnym razie

}

Wiadomo, że w lepszym stylu jest zapis pierwszy - brak redundancji, wygląda po prostu lepiej. Ale słyszałem też, że na poziomie asemblera przy drugim zapisie mamy dwa skoki zamiast jednego (po jednym
Teraz dość filozoficzne pytanie z C++ i w ogóle programowania będzie.

Załóżmy, że chcę mieć funkcję, która wykonuje jedną z dwóch operacji w zależności od tego, który z dwóch teoretycznie przeciwstawnych warunków jest spełniony. Jeżeli żaden to niechybnie oznacza, że coś się #!$%@?ło, trzeba zakończyć program i zwrócić informację o błędzie. Napisałem:

void function() {

....if(coś) {

........operacja1();

....} else if(coś_innego) {

........operacja2();

....} else {

........std::unexpected();

....}

}

Kod dobrze spełnia
@Onoki: Kompilator jest w stanie wydedukować (w określonych przypadkach), ƶe if/else if obsługuje wszystkie moƶliwe przypadki.

Przy okazji, nie lepiej rzucić wyjątkiem, niƶ wołać

std::unexpected
? (które jest, nota bene, deprecated)
Pytanie z gatunku tych, na które każdy ma odpowiedź i uważa, że jest ona jedynie słuszna. :)

Jaką stosujecie kolejność elementów w klasie? Ja stosuję:

- pola, po kolei publiczne, chronione, prywatne

- konstruktory, jw.

- destruktor (w c++)

- settery

- gettery

- metody, publiczne, chronione, prywatne

Czy to jest w ogóle jakoś usystematyzowane, jaka ta kolejność powinna być?

#stylkodowania
@Hauleth: @Marmite: Widzę, że nie tylko ja nie przepadam za tą metodą. I w sumie też mi się nigdy nie zdarzyło jednego

=
wpisać w ifa. Nie wiem, może jak ktoś jest bardzo roztrzepany, ale wtedy tak na prawdę nie powinien pisać kodu wcale.
@kolakao:

bool operator==(Klasa k);
to trochę minie kuje, bo lepiej

bool operator==(const Klasa& k) const;
Od razu wiadomo co i jak i jak ktoś się walnie i coś przez przypadek zmieni to mu kompilator się wyłoży, a nie będzie trzeba szukać bez sensu.
A co powiecie na notację węgierską? Ktoś tego w ogóle używa? :)

Ja przyznam się, że pisząc w C++ stosuję taki bajer, że wszystkie nazwy pól jakiejś klasy kończę znakiem podkreślnika, np:

int liczba;

Mam z tego dwie korzyści:

1. W konstruktorach i seterach mogę używać argumentu o dokładnie tej samej nazwie, a nie jakichś jednoliterowców:

setLiczba(int liczba) {

liczba
= liczba;

}

2. W każdym miejscu od razu widzę co
A to może i ja się dołączę :D #stylkodowania na przykładach z #javascript ale związany nie tylko z nim

1. NIE RÓB TEGO KU*WAAAA!

if($(this).length !== 0) {

$(this).val(...);

$(this).css(...);

return $(this).hasClass(...);

}

ciągłe wywoływanie tego selektora NO CZY DO CIEBIE NIE DOCIERA ŻE TO A) BIJE PO OCZACH B) ZMNIEJSZA WYDAJNOŚĆ C) PO COŚ JEST TEN CHAINING? Aż na samą myśl mnie to wkurza :D

2. Stosowanie jakichś cudacznych super trików
@nvll: Jak dla mnie świadome rezygnowanie z pisania dobrego, zoptymalizowanego kodu raczej nie jest dobrym podejściem.

@Ginden: Czemu raz widzę jak używasz nowej wersji dodatku do odpowiedzi, a raz jak starej? :S
To w ramach #stylkodowania i ja mam pytanko do Was.

Czy stosujecie (samodzielnie, bądź wymagane jest od Was w projektach) limit na liczbę znaków w linii?

Różne IDE czy przewodniki kodowania (takie jak PEP8) zalecają 80 czy 120 znaków w lini. Nie chodzi o to, żeby nawalać linie po 250 znaków, ale czy faktycznie jest sens, by trzymać się tak sztywno tych reguł. Co o tym sądzicie?

#programowanie
@noisy: Baardzo często trzeba widzieć co najmniej 2 pliki na raz, a wtedy 80 linii się bardzo przydaje. Osobiście już się do tego limitu tak przyzwyczaiłem że na oko widzę że coś za długi ten kod i mnie to razi (:
@sylwke3100: Wielu teoretyków do OOP uważa za dobre minimalizowanie przepływu danych między obiektami. Coupling też się zwiększa przez takie coś: Car::Engine::turnOn() vs Car::Engine::setRunning(bool), getter/setter niepotrzebnie eksponuje wnętrze obiektu.

Albo inny przykład:

IObject & GameUniverse::getObject(Identifier id); // IObject *, std::shared_ptr?

std::vector GameUniverse::getAllObjects();

vs

void GameUniverse::forObject(Identifier id, std::function); // lub predykat zamiast id

void GameUniverse::forEachObject(function...);

Tutaj dzięki temu, że Obiekt nie wychodzi poza GameUniverse dużo łatwiej zrobić np locki.