Blog webdeveloperski Patryk yarpo Jar

ECMAScript Crusher

Autor wiadomości Luty 24, 2011

ECMAScript Crusher (ESC)  jest skryptem powłoki systemu Windows (Windows Shell Script) napisanym przez Thomasa Loo. Prócz tego, że całkiem fajnie działa jest darmowy.

Oficjalną strona w chwili pisania artykułu była niedostępna. Kod źródłowy jest jednak ciągle dostępny.

Opiszę zastosowanie w kilku krokach (jeśli wiersz poleceń ci nie obcy przejdź na sam koniec):

Dlaczego new Boolean jest złym pomysłem

Autor wiadomości Luty 23, 2011

Javascript to język w pełni obiektowy. Obiektem jest wszystko: funkcja - obiekt, obiekt - obiekt, zmienna - obiekt... Eh, no i ta pełność ma swoje "widzimisie" i problemy.

Wartości logiczne

W klasycznej logice są dwie: true i false (prawda i fałsz). W JS istnieje jednak konstruktor dla wartości logicznych:

var oBool = new Boolean(false);

Mierzenie czasu wykonania skryptów JS

Autor wiadomości Luty 17, 2011

Czasem przydatna staje się wiedza o tym, które ze znanych rozwiązań jest szybsze. Oczywiście można polegać na teoretycznej wiedzy, podpierać się nawet złożonością algorytmów itd. itd. Często jednak starczy kilka prostych testów. Oto obiekt pozwalający w banalny sposób sprawdzić jak szybko wykonał się skrypt. Nazwałem go yProfiler.

Kod

// obiekt yProfiler - zliczanie czasu wykonania skryptu
// autor: Patryk yarpo Jar
var yProfiler = function()
{
var nTimeStart = 0,
     nTimeStop  = 0,
     nLastDuration = -1,
     oDate = null;

    function fStart()
    {
        oDate = new Date();
        nTimeStart = oDate.getTime();
        return nTimeStart;
    }
    function fStop()
    {
        oDate = new Date();
        nTimeStop = oDate.getTime();
        nLastDuration = nTimeStop-nTimeStart;
        return nLastDuration;
    }
    function fTime()
    {
        // nie wystartowano jeszcze :/
        if (!nTimeStart)
        {
            return false;
        }
        // nie skonczono jeszcze
        if (!nTimeStop)
        {
            fStop();
        }
        if (nLastDuration < 0 || isNaN(nLastDuration))
        {
            nLastDuration = nTimeStop - nTimeStart;
        }
        return nLastDuration;
    }
    function fGetStart()
    {
        return (nTimeStart) ? nTimeStart : false;
    }
    function fGetStop()
    {
        return (nTimeStop) ? nTimeStop : false;
    }
    function fLoop(func, n)
    {
        fStart();
        for(i = 0; i < n; i++)
        {
            func();
        }
        fStop();
        return nLastDuration;
    }

    // konstruktor:
    fStart(); // domyslnie startuje
    return {
        start   : fStart,
        stop    : fStop,
        time    : fTime,
        getStart: fGetStart,
        getStop : fGetStop,
        loop    : fLoop
    };
};

W tym obiekcie można dostrzec właściwości private, o których więcej przeczytasz na stronie Douga Crockforda. Wykorzystałem tu także wzorzec modułowy do stworzenia obiektu (kiedyś opiszę kilka sposobow na produkcję obiektów) dzięki czemu nie trzeba, a nawet nie należy używać operatora new (przeczytaj dlaczego - blog YUI).

Zastosowanie

var time = yProfiler();

function test1()
{
    var n = 10000;
    for(var i=0; i < n; i++)
    {
        var a = a+a;
    }
}
time.start();
test1();
alert(time.stop());

Powyższy kod pozwala na wykorzystanie metody yProfiler.loop(). Przyjmuje ona dwa parametry - pierwszy to referencja na funkcję, która ma być wywołana, drugi - liczba wywołań tej funkcji (patrz prywatną metodę yProfiler.fLoop()). Na koniec wszystko jest wyświetlane za pomocą alertów. Jest jeszcze drugi sposób wywołania.

Zastosowanie 2

var time = yProfiler();
var n = 10000;
alert(time.loop(function(i) { var a = i+i; } ), n);

Jeśli zajrzysz do środka tego obiektu to pierwsza metoda jest niejawnym wywołaniem drugiej. Przyjemnych testów wydajności. Pamiętaj, że nie można traktować wyników jako wyroczni. Wiele zależy od przeglądarki, sprzętu i innych czynników. Nie gwarantuję także, że obiekt ten jest wolny od błędów - używasz na swoją odpowiedzialność.

Wyniki konkursu “Młody redaktor”

Autor wiadomości Luty 16, 2011

Na stronie http://youthcoders.net/blog/1-wpisy/916-wyniki-konkursu-mlody-redaktor.html zostały opublikowane wyniki konkursu "Młody redaktor" organizowanego przez serwis Youthcoders.net pod patronatem helion.pl.

Sposoby tworzenia funkcji w JS

Autor wiadomości Luty 16, 2011

Javascript jest niezwykle ekspresyjnym językiem. Istnieje w niej wiele ciekawych rozwiązań pozwalających tworzyć krótszy lub bardziej czytelny kod. W tej poradzie pokażę dwa różne podejścia do tworzenia funkcji / metod.

Sposób 1 - tradycyjny

function nazwa_funkcji_1()
{
    alert("nazwa_funkcji_1: Ja istnieje!");
}

Jeśli kiedykolwiek tworzyłeś swoje funkcje, to z pewnością zapis ten jest ci dobrze znany. Zapis ten jest używany także w PHP. Po słowie kluczoowym function należy podać ciąg znaków spełniający odpowiednie warunki (nie może zaczynać się od liczby, nie może mieć spacji itp, i td.) po czym należy podać parę nawiasów. W nawiasach można podać argumenty, ale nie trzeba.

Literał obiektowy zamiast konstruktorów

Autor wiadomości Luty 16, 2011

O literale obiektowym  kilka razy pisałem już. Tym razem napiszę o przewadze literału nad konstruktorami `Array' oraz` Object'.

W JS można stworzyć obiekt na dwa sposoby:

Sposób I

var o = new Object();

Sposób II

var o = {};

Zaletą pierwsze sposobu jest czytelność. Każdy, nawet nie znając JS programista będzie wiedział, że `new Object()' stworzy nowy obiekt... No chyba, że nie, zobaczmy taki przykład:

function example() { alert(1); }
example();
example = function() { alert(2); }
example();