Co jest lepsze?
val - testowana wartość
p_left - lewa (dolna) granica przedziału
p_right - prawa (górna) granica przedziału
type - flaga bitowa do oznaczenia czy przedział jest domknięty/otwarty
LCLSD - typ enum, wartość 1 - jeśli flaga jest ustawiona, to przedział jest lewostronnie domknięty
RCLSD - typ enum, wartość 2 - jeśli flaga jest ustawiona, to przedział jest prawostronnie domknięty
if (val > p_left) {
if (val < p_right) return true;
else if (val == p_right && type & RCLSD) return true;
else return false;
}
else if (val == p_left && type & LCLSD) return true;
else return false;
czy może
return (val > p_left && (val < p_right || (val == p_right && type & RCLSD))) ||
(val == p_left && type & LCLSD);
Obydwa fragmenty robią dokładnie to samo. Jest to fragment klasy metody szblonu klasy interval (przedział) która ma sprawdzać czy dana liczba się w nim znajduje. Przedział ma dawać możliwość ustalenia typu (np. otwarty, lewostronnie domknięty, domknięty).
Pierwszy kod jest znacznie czytelniejszy, lecz powtarzam po kilka razy instrukcje return true i return false. Pytanie brzmi czy jest jakaś różnica w wydajności? Domyślam się, że kompilator powinien ten pierwszy kod zoptymalizować, ale czy warto na nim polegać? Choć ta klasa nie będzie miała w moim programie jakiegoś krytycznego znaczenia, więc jej wydajność nie musi być doskonała, lecz jestem pewien, że w przyszłości natknę się na podobne problemy dotyczące znacznie ważniejszych elementów programu...