Dobre praktyki programistyczne

Zredukuj liczbę instrukcji „if”, część 1

17.04.2011

Instrukcja if jest często używana w prawie każdym kodzie. Niestety, zmniejsza ona czytelność kodu źródłowego i ma wpływ na wydajność (ale raczej w językach niskiego poziomu). Poniżej prezentuję przykłady użycia if i propozycje zmian.

Operator warunkowy

Często występuje potrzeba przypisania wartości do zmiennej lub zwrócenia wartości, zależnie od spełnienia określonego warunku. Zamiast użyć if/else lepiej poslyżyć się operatorem warunkowym:

Przed   
  1. String result;
  2. if (isOk()) {
  3. result = "True";
  4. } else {
  5. result = "False";
  6. }

Po   
  1. String result = isOk() ? "True" : "False";

Opóźniona/wczesna inicjalizacja

Kiedy tworzysz nowy, duży obiekt, sprawdź, czy opóźniona inicjalizacja rzeczywiście zwiększy wydajność. Jeśli nie, wczesna inicjalizacja będzie prostszym rozwiązaniem.

  1. Object instance;
  2.  
  3. Object lazyInit() {
  4. if (instance == null) {
  5. instance = new Object();
  6. }
  7. return instance;
  8. }

  1. Object lazyInit() {
  2. return instance = instance == null ? new Object() : instance;
  3. }
  1. Object instance = new Object();
  2.  
  3. Object earlyInit() {
  4. return instance;
  5. }

Puste kolekcje zamiast null

Kiedy metoda zwraca kolekcję, musisz sprwdzić czy nie jest to null, zanim zaczniesz przeglądać kolekcję. Chyba, że metoda zwraca pustą kolekcję zamiast null.

Null   
  1. void nullChecking() {
  2. Object[] array = nullArray();
  3. if (array != null) {
  4. for (Object o : array) {
  5. //zrób coś
  6. }
  7. }
  8. }
  1. void withoutNullChecking() {
  2. Object[] array = emptyArray();
  3. for (Object o : array) {
  4. //zrób coś
  5. }
  6. }

Leave a Response