2013-05-24 15 views
6

w Go, switch es są znacznie bardziej elastyczne niż w C (i C++), ponieważ mogą one obsługiwać przypadki wyrażeń logicznych i zastąpić duże else - if drabiny pozornie całkowicie, zwłaszcza z domyślnymi bloków .przełącznik Go vs if-else sprawność

switch { 
    case x < 5 && y > 2: 
     //... 
    case y == 1 || x > 2: 
     //... 
    default: 
} 

Czy jest jakaś zaleta sprawność do korzystania z switch nad else - if w Go? Wydaje się, że zwiększona wydajność zostałaby utracona dzięki elastyczności switch. Czy to po prostu od kompilatora, aby to rozgryźć i zobaczyć, czy może on zrobić tabelę skoku?

Czy są jakieś zalety związane z wydajnością korzystania z switch przez if i else?

Odpowiedz

8

Jeśli wszystkie twoje case są stałymi stałymi, to tracisz możliwość przekształcenia switch w tabelę skoków.

W najlepszym razie Go's switch może być odpowiednikiem C++ 's switch, jeśli używasz tylko stałych stałych, ale w przeciwnym razie nie będzie bardziej efektywny niż if/else.

9

To wszystko zależy od kompilatora, aby to zrozumieć i wybrać dobrą strategię implementacji kodu. Zawsze możesz dowiedzieć się, jaki kod generuje kompilator, żądając zestawienia danych wyjściowych kompilatora. Zobacz kompilator Go na stronie -S option.

2

Z pewnością nie ma to znaczenia dla wydajności aplikacji. Prawdopodobnie istnieje jeszcze bardziej złożona sytuacja, w której możesz poprawić wydajność. Podobnie jak zapisanie pojedynczego zapytania SQL jest prawdopodobnie jak 1 milion jeśli/else/switch.

Nie martw się zbytnio o szczegóły i nie skupiaj się na rzeczy na wyższym poziomie.

+5

To bardzo pomocna odpowiedź. Dzięki, że mówisz mi, żebym zlekceważył pytanie, rozumiem to teraz. –

+0

Podobnie jak w przypadku wszystkich optymalizacji, powinny być prowadzone przez pomiary i analizy, a nie martwić się o szczegóły, które mogą nigdy nie mieć żadnego wpływu. Ale jeśli twój przełącznik/obudowa jest głęboko zagnieżdżona w wewnętrznej pętli, jej zachowanie może być bardzo znaczące. Jak już powiedziałem, potrzebne są pomiary i analizy. –