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
@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.
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.
@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...
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?
@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
@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.