Wpis z mikrobloga

Mirki, mam mały problem:
Załóżmy, że jakiś przedmiot może mieć jakość od 1 do 100, zależnie od jego jakości wyświetlać się będzie inny napis:
- 1-30 - słaba jakość
- 31-70 - średnia jakość
- 71-100 - dobra jakość
Funkcja na pobieranie napisu będzie używana bardzo często, w związku z tym pojawia się pytanie: jak ją zrobić?

Mam dwa pomysły:
- Zrobić to na ifach

if (quality <= 30) {

return 1;

} else [...]

- Zrobić to na tablicy asocjacyjnej i z niej pobierać wartość

[1] = 1,

[2] = 1,

...

[31] = 2,


Która z tych opcji będzie miała większą wydajność.
#programowanie
  • 21
  • Odpowiedz
@Crypton3: robisz błąd myśląc o tym. Znaczącej różnicy tu nie będzie (jeśli jakakolwiek) a Ty tracisz czas. Tu powinieneś patrzeć na czytelność i łatwość utrzymania czyli opcja pierwsza wygrywa.
  • Odpowiedz
@lukasz1985m: no tak a jesli jest to JS to nie tablicami a obiektami i koniecznie asocjacyjnymi...

Wszystko zalezy od jezyka. Jak mozna wogole dywagowac nad optymalizacja kodu jesli nie znamy jezyka? :)
  • Odpowiedz
@karer: Język to LUA, mało znany język skryptowy :-)
@IrvinTalvanen: Piszę gry na mobilki, a tam to warto optymalizować gdzie się tylko da. Drugi sposób też jest dość czytelny, można napisać funkcję, która wygeneruje taką tablicę przy starcie gry.
  • Odpowiedz
Drugi sposób też jest dość czytelny, można napisać funkcję, która wygeneruje taką tablicę przy starcie gry.


@Crypton3: dobrze a wiesz ze taka tablica musi zostac przeszukana w jezykach dynamicznych? Nie wiem jak z LUA ale generalnie 1 IF jest najszybszym co moze byc. Samo przeszukanie to wiele ifow wiec z gory bedzie wolniejsze.
  • Odpowiedz
@lukasz1985m: z tym hashowaniem jest roznie bo na przyklad tablice takze czesto sa hashowane wiec wcale nie jest to takie szybkie za kazdym razem.

Skoki po pamieci tez kosztuja. Warunek z IF moze zostac przekompilowany na polecenia procesorowe. Jednak przeszukiwanie jak zauwazyles juz nie.

Tak sobie pomyslalem ze moze zrobic 100 przypadkow CASE. Zlo wcielone...
  • Odpowiedz
Ale on nie będzie niczego przeszukiwał jeśli użyje LUT. Zrozum.


@lukasz1985m: widzisz przeszukanie nastepuje jak odnosisz sie do wartosci w pamieci i do tego pije. Jesli chodzi o kompilowanie przez JIT to prymitywy nie sa kompilowane do niczego tylko po prostu interpretowane. Prymitywy i operacje na nich mozna raczej bardzo latwo zamienic na mnemoniki prawda?

Zreszta o czym tutaj dyskutujemy?
  • Odpowiedz
@Crypton3: To tylko 2/3 ify, serio marnujesz czas na optymalizacje tego :D
Napisz to tak by było ładnie i dobrze, a potem profiluj jakimś narzędziem, do każdego języka itd powinno się coś znaleźć do profilowania.
I szukaj tych metod które powodują największe "opóźnienia" w kodzie, i je optymalizuj, aż uznasz że jest już ok, i/lub bardziej się nie da lub nie opłaca.

LUA z tego co wiem ma bardzo dobrego JIT-a
  • Odpowiedz
@lukasz1985m: LUT do dwóch porównań. Genialne. Nie dość że prawdopodobnie będzie wolniejsze, to jeszcze potencjalnie zaśmieci cache jakimś gównem i zabraknie miejsca na ważniejsze rzeczy.Możesz zgłosić się po swoje 15kpln.
  • Odpowiedz
@lukasz1985m: Masz rację, nie ma sensu. Idź poczytać jakiś wstęp do wprowadzenia do podstaw optymalizacji i nie wypisuj takich bzdur. LUT do dwóch porównań. Mistrzostwo świata.XD
  • Odpowiedz