Skrócony zapis if

Z pewnością nie raz używałeś instrukcji warunkowej if. Niekoniecznie musiałeś programować w JS, aby się z warunkami spotkać. Często warunki w programie stanowią największą część kodu (choć czasem może to oznaczać, że kod jest źle napisany). Czy muszą zajmować aż tyle miejsca? Nie…

Normalny if wygląda tak:

if (warunek) {
    // wykonaj
} else {
    // wykonaj co innego
}

Jeśli to, co ma zostać wykonane ma jedynie jedną linię kodu, np:

if (i < 0) {
    i--;
} else {
    i++;
}

Można to zapisać krócej:

if (i < 0) i--;
else i++;

Jeśli opuścimy klamry, to zostanie wykonany kod do pierwszego średnika, jako kod warunkowy. Reszta zostanie wykonana liniowo.

Czyli jeśli masz:

if (i < 0) {
    i--;
} else {
    i++;
    inna_zmienna = 7;
}

I opuściłbyś klamry:

if (i < 0)
    i--;
else
    i++;
    inna_zmienna = 7;

to gdy i > 0 jest spełniony, zostanie wykonany taki kod

  1. i–
  2. inna_zmienna = 7

A to przecież nie jest to, czego chcieliśmy. Powyższy zawiera wcięcia, a wcięcia w JS nie tworzą bloku kodu. Gdy usuniemy wcięci łatwiej zauważyć, co się wykona:

if (i < 0)
    i--;
else
    i++;

inna_zmienna = 7;

Warto pamiętać:

  • zawsze używaj klamer
  • jeśli zdecydujesz się z powodów „oszczędności czasu” z nich zrezygnować, zawsze bardzo uważnie stawiaj wcięcia
  • pamiętaj, że wcięcia mogą mylić. Ale UŻYWAJ ich. Tyle, że starannie

Skrócony zapis instrukcji warunkowej

Jednak nie o tym miała być ta porada 🙂 Miałem zamiar pokazać, rzeczywistą możliwość skrócenia kodu, oto i ona:

(i < 0) ? i-- : i++;

Jest równoznaczne pierwszemu listingowi. W takim zapisie nie można używać więcej niż jednej instrukcji. Czyli nie można napisać

(i < 0) ? i--;  inna_zmienna=4; : i++;

Więc po co to?

Bardzo ułatwia to życie, i kod, kiedy masz krótką funkcję, np. min:

function min(a, b) {
     if (a >= b) {
         return b;
     } else {
         return a;
     }
}

Jaka ta funkcja dluuuuga! Fuj! A można ładnie i szybko:

function min(a, b) {
    return (a&gt;=b) ? b : a;
}

Przekonałem, czy jeszcze nie?

To może coś takiego:

var a = ('Kluska' === user) ? "Witaj Klusko" : "Nie znam Cię!";
alert(a);

lub nawet krótsze:

alert(('Kluska' === user) ? "Witaj Klusko" : "Nie znam Cię!");

Jest wiele możliwości wykorzystania tego skrótu. Polecam po eksperymentować 🙂

Bądź jednak czujny. Zbyt uproszczony kod czasem staje się mniej czytelny – lepiej jest napisać dłuższy kod, ale łatwiejszy do  zrozumienia niż krótki i nieczytelny meisterstück kompresji.

Warto przeczytać:

5 komentarzy

    1. Na Windows 7 x64 skrócony zapis działa szybciej o całe 3,4 % co jest w miarę dobrym wynikiem jeśli zauważymy, że warunki stawiamy w kodzie dosyć często 😉

      Nie zapominajmy również o oszczędności w wielkości pliku, co o ile w przypadku komputerów już za bardzo nam nie pomaga, to przy ściąganiu na telefon może mieć spore znaczenie.

      1. Poprawka.

        Po wykonaniu większej ilości testów stwierdzam, że oba zapisy instrukcji warunkowej działają podobnie szybko. Raz wygrywa zapis pełny, a innym razem zapis skrócony ale raczej widać tendencję do równania wyników.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

WordPress spam zablokowany CleanTalk.