![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 100 Pomógł: 0 Dołączył: 11.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
czy może ktoś podrzucić przykład jak zastąpić if, case polimorfizmem ?
Chciałbym to zrozumieć : ) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Taki przykład.
PSEUDOKOD: Kod function drawRectangle() { } function drawCircle() { } switch (figure.type) { case 'rectangle': drawRectangle(); break; case 'circle': drawRectangle(); break; } zamienia sie w: Kod class Rect implements Figure { function draw() { // rysuje prostokat } } class Circle implements Figure { function draw() { // rysuje okrag } } figure.draw(); // wywolujemy polimorficzna metode draw zamiast switch/case. i to był pseudokod, a jak to będzie w konkretnym języku programowania to sobie doczytasz. Ten post edytował PrinceOfPersia 1.05.2015, 13:27:07 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 100 Pomógł: 0 Dołączył: 11.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Mam standardową i pewnie nieoptymalną konstrukcję z if. Czy da się to zrobić optymalnej zgodnie z zasadami clean code?
JAVA
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
wnioskuję, że to nic nie znaczy tylko do debugowania? Więc to olewam. Co do reszty kodu to przede wszystkim, jedyne co tak naprawdę zmieniasz to liczby w parametrach, a czasem nawet nie to:
albo:
Ja bym zanim przechodził na polimorfizm, to zaczął od doprowadzenia tego, żeby to w formie if wyglądało normalnie. Czyli jak robisz to samo:
nie ma sensu tego pisać ponownie. Jak się parametr, który podajesz zmienia:
to nie ma sensu pisać ponownie całej funkcji, skoro możesz sobie wydzielić jakąś zmienną scheduleTime i tam przypisywać 10 albo 15. A potem tę zmienną odpalać:
A co do całokształtu kodu to problem jest z tym, że za cholerę nie wiadomo o co w nim chodzi. Poza tym nie wiem, czy wiesz, ale istnieje coś takiego jak operatory logiczne AND/OR etc. i można ująć kilka warunków w jeden: Kod -1 == punktyUser || -2 == punktyUser || to OR && to AND bo kod, który tam wykonujesz, niczym się nie różni od siebie (oprócz innego tekstu w System.out.println) Cytat A potem tę zmienną odpalać: *miałem na myśli: a potem tę zmienną podawać do odpalanej funkcji. -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Mam standardową i pewnie nieoptymalną konstrukcję z if. Czy da się to zrobić optymalnej zgodnie z zasadami clean code? Optymanlość, a czystość kodu to dwie różne rzeczy, które niekoniecznie idą w parze. Tam gdzie wydajność ma priorytetowe znaczenie, tam rezygnuje się z czystości kodu. Tworzenie dodatkowych warstw abstrakcji zwiększa czytelność kodu, a więc produktywność programistów, ale ma to negatywny wpłw na wydajność. PS. Nie ma czegoś takiego jak "bardziej optymalne" lub "mniej optymalne" . Albo coś jest optymalne, albo nie. Ten post edytował peter13135 3.05.2015, 13:58:03 -------------------- :)
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.05.2025 - 06:06 |