Idzie zapisać taki kod ładniej w #python? Tak żeby się takie same linie nie powtarzały?

problem = find_problem()
while problem:
__solve_problem(problem)
___
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

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
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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.
  • Odpowiedz
Zróbmy sobie ankietę (tylko C++ i Java). Kiedy piszecie funkcję w rodzaju:

TYPE makeSth(...) {

....TYPE xxx;

....
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

O konwencje nazewnicze się rozchodzi. Kiedy mamy normalną pętle for jej zmienna nazywa się i, później w pętlach wewnętrznych j, k. W pętli działającej na iteratorach jest to zwykle it lub iter. A w pętli zakresowej? Napiszcie jak zwykle nazywacie zmienną w konstrukcji:

for(typ zmienna : kontener)
#programowanie #stylkodowania #java #cpp
  • 21
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

staram się nigdy nie używać foreach


@kradzionyLogin: Dlaczego? Jest bardzo wygodna i czytelna. Kiedy widzisz normalną pętle for, to pierwsze co robisz, to zastanawiasz się nad jej zakresem. Kiedy widzisz foreach od razu masz pewność, że zakresem jest cały pojemnik.
  • Odpowiedz
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
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Onoki: imo tylko metoda może sugerować czynność, nigdy pole więc dwuznaczności nie będzie z tym open czy m_open a mniej węgiersko :) isActive() -> active, isFinished() -> finished
  • Odpowiedz
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 wykonać tę operację) i jeśli tak wywołuje prywatną, która wczytuje dane do odpowiednich zmiennych.

Metody są powiązane ze sobą 1:1, istnienie każdej z nich jest pozbawione sensu bez istnienia drugiej. Publiczna nazywa się, jakże oryginalnie, "loadFile". Jak powinienem nazwać metodę prywatną, żeby już sama nazwa wskazywała wyraźnie powiązanie z loadFile, tak żeby nikt nie miał wątpliwości że to jest tak naprawdę jedna i ta sama funkcjonalność rozdzielona na dwie metody?

Pytam
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

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.
  • Odpowiedz
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
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Czy ktoś zna tu asemblera? :D

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

1.

if(WARUNEK)
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

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ę z-----o, trzeba zakończyć program i zwrócić informację o błędzie. Napisałem:

void function() {

....if(coś)
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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)
  • Odpowiedz
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

-
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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.
  • Odpowiedz
#stylkodowania

Używać

const
itp kiedy to tylko możliwe. Wbrew pozorom pomaga to ogarnąć szybko co jest czym i co się zmienia, albo nie... No i kompilator też jest bardziej połechtany wtedy.
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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.
  • Odpowiedz
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;
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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
  • Odpowiedz
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
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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 (:
  • Odpowiedz
Ok, to i ja się dołączę :)

Czego w kodzie nie lubię:

1. Nieużywanie tak podstawowej rzeczy jak stałe i pisanie kodu typu

if
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

letter = arg[0] - 97; // 'a' in ASCII


number = arg[1] - 48; // '0' in ASCII

@Onoki: ktoś nei rozgarnięty pisał.. od razu powinien
  • Odpowiedz
@Hauleth: To jest bardzo sensowna rzecz: używać jak najwięcej pure funkcji i niech każda robi tylko JEDNĄ rzecz. Jak się dobrze wymyśli to pisanie metod < 15 linijek nie jest dużym problemem. :)
  • Odpowiedz
@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 *,
  • Odpowiedz