W literaturze spotkać można dwa określenia. Wzorzec modułu [źródło: Mocne strony JavaScript] oraz wzorzec fabryki [źródło: JavaScript dla Webmasterów]. Ja nie widzę zbyt wielkich różnic w samym kodzie, chodzi raczej o ideę, która przyświecała twórcy. We wzorcu modułu stworzyć coś na wzór przestrzeni nazw, komponent całego systemu. W fabryce po prostu funkcję zwracającą obiekt.

Chciałbym zatem tu pokazać kilka dobrych praktyk jakich warto używać przy tworzeniu obiektów z wykorzystaniem wzorca fabryki / modułu. Część z nich jest nieosiągalna w przypadku stosowania np. tworzenia obiektów z prototypu.
Continue reading

W językach obiektowych takich jak Java czy C++, gdzie obiekty tworzy się wykorzystując jako wzorzec klasę, bardzo ważną rzeczą staje się konstruktor. W JS na dobrą sprawdę konstruktor nie jest potrzebny. Można tworzyć obiekty, które nie posiadają jawnie  zadeklarowanego konstruktora (choćby przez literał obiektowy).

Jeśli jednak ktoś jest bardzo przywiązany do konstruktorów (jak choćby ja) może stworzyć konstuktor:

var MyObjConstr = function(a, b)
{
    this.func = function() { alert('My func1!'); }
    this.a = a;
    this.b = b;
};

var MyObj = new MyObjConstr(1, 'ala ma kota');
MyObj.func();
alert(MyObj.a);
MyObj.a = 10;
alert(MyObj.a);

Continue reading

Javascript posiada wiele sposobów na tworzenie obiektów. Jednym z nich jest wzorzec fabryki obiektów (czasem zwany wzorcem modułu). Chciałbym pokazać, jak można wykorzystując ten wzorzec stworzyć IMO wygodniejsze obiekty.

Kod prostego obiektu

var yPerson = function()
{
    var sName,
        nAge;

    function fName( name )
    {
        sName = name || sName;
        return sName;
    }

    function fAge( age )
    {
        nAge = age || nAge;
        return nAge;
    }

    return {
        name : fName,
        age  : fAge
    };
};

Continue reading

JavaScript jako jeden z najbardziej niezrozumianych języków świata posiada parę właściwości, których ja zrozumieć nie umiem. Nie, abym nie chciał.

Jedną z nich jest fakt, że nie nakazuje wstawiania średników po każdej instrukcji. Jeśli jednak nie wstawisz średnika, może cię srogo ukarać… (trochę mi to przypomina adminów sieci osiedlowej w moim akademiku :P).

Prosty przykład. Co zwróci funkcja?

function simple_example()
{
    return
    { 'value' : 'sialala' }
}

Continue reading

W Javascript nie ma klas, a mimo tego są obiekty (pojęcie “klasa” jest wprowadzane przez niektóre frameworki, np. Dojo Toolkit). Funkcje klas pełnią prototypy i można ich używać w taki sposób, aby wszystko wyglądało jak w tradycyjnym języku zorientowanym obiektowo. Istnieje także inny sposób tworzenia obiektów – z wykorzystaniem literałów obiektowych.

Na podstawie literałów obiektowych powstał także lekkie format wymiany danych – JSON (ang. JavaScript Object Notation – wym. jā’sən, jak imię “Jason”). polecam jako medium przesyłania danych między serwerem i klientem.

Continue reading

W JS zawsze istnieje kilka sposobów na osiągnięcie tego samego efektu. Nie inaczej jest z obiektami. Oczywiście każda z tych metod może jeszcze zostać zmodyfikowana, zapisana inaczej itp. itd.

Dlatego proszę nie traktować tej porady jako jedynej właściwie prawdy.

Zanim zaczniesz czytać kolejne porady z tej serii proponuję przeczytać:

Omówię zatem:

W kolejce czeka jeszcze kilka rozwiązań mieszanych. Jak kiedyś będę miał chwilę, to ta lista się wydłuży 🙂

Okładka JUnit. Pragmatyczne testy jednostkowe w Javie

Im dłużej zajmuję się programowaniem, tym większą uwagę przywiązuję do wytwarzania oprogramowania niż do samego aktu pisania kodu.

Różnica między kimś kto potrafi programować, a osobą znającą składnię danego języka, jest jak różnica między słabym uczniem szkoły podstawowej  (który alfabet zna i podpisać się potrafi) a Adamem Mickiewiczem.

Książka “JUnit Pragmatyczne …” jest jedną z ciekawszych pozycji,  jaką miałem w ostatnim czasie przyjemność przeczytać. Mimo, że sam  raczej niewiele programuję w Javie, to z pewnością wiedza, jaką zdobyłem dzięki tej książce może być wprost zastosowana w innych technologiach (C++, C#, PHP).  Książka w bardzo ciekawy sposób pokazuje po co robić testy jednostkowe. Autorzy stawiają sobie najpierw za cel przekonanie Cię, że WARTO jest  napisać trochę więcej kodu, bo dzięki temu twój kod jest lepszy – stabilniejszy.Continue reading

Jest wiele sposobów na tworzenie obiektów w JS. Każdy ma jakieś wady i zalety. Należy wybrać taki, który nam się najbardziej podoba, i który akurat przy konkretnym zastosowaniu jest najwygodniejszy. W tym artykule pokażę, jak tworzyć w JS obiekty z wykorzystaniem mechanizmu prototypowania.

Język obiektowy bez klas

No tak! Ledwo zacząłeś widzieć korzyści płynące z tworzenia klas i operowaniu na obiektach, a tu Ci ktoś mówi, że nie ma klas w JS:). Ano nie ma. Są za to prototypy. I tak naprawdę to zasada jest bardzo podobna. Zobaczmy kod, bo tak zawsze łatwiej:

Continue reading

W JS nie ma tak przyjaznej i przydatnej funkcji jak `date‘ w php. Można oczywiście nadrobić. Oto przykład prostego rozwinięcia prototypu obiektu Date, pozwalającego na wyświetlenie daty w formacie “dd-mm-yyyy”:

Date.prototype.getDateStr = function( date )
{
    function addChars( par, len, insert )
    {
        var str = par.toString(); // aby moc operowac na liczbie jak na ciagu znakow
        insert = insert || "0"; // jesli nic nie podano - domyslnie wartosc "0"
        len = len || 2; // jesli nic nie podano - domyslnie wartosc 2
        while (str.length < len)
        {
            str = insert + str; // dodaj zero (lub podany znak) z przodu
        }
        return str;
    }

    var today = date || new Date(),
        month = addChars(today.getMonth()+1),
        day   = addChars(today.getDate()),
        year  = today.getFullYear();

    year += (year  <= 99) ? 1900 : 0;

    return  day + "-" + month + "-" + year;
}

Continue reading