MooTools 1.2 - operacje na liczbach
15 lipca, 2008
Jeżeli chodzi o obiekt natywny Number to dzięki MooTools 1.2 zyskał on 5 nowych metod, dwie z nich - toInt oraz toFloat już poznaliśmy w poprzedniej części odnoszącej się do metod obiektu String. Dodatkowo istnieją też metody times (druga nazwa tej metody to each), round i limit.
Konwersja liczby na ... liczbę
W obiekcie Number znajdziemy dwie takie same metody jak w wypadku obiektu String - toInt i toFloat, ktoś powie, że to bez sensu - zamieniać liczbę na liczbę. Jeszcze w wypadku metody toInt można ją wykorzystać do zaokrąglania liczby:
(1234.5).toInt();
Powyższy kod zwróci liczbę 1234. Nie zapominajmy też o możliwości konwersji pomiędzy różnymi systemami liczbowymi poprzez podanie podstawy systemu liczbowego jako argumentu metody. Ale jaki jest sens istnienia metody toFloat ? Tłumaczyć można to różnie, a ja zostanę przy wersji, która mówi iż pozwala to nam na uniknięcie błędów JS w pewnych sytuacjach - przykładowo pobieramy jakąś wartość i nie wiemy czy jest to liczba czy ciąg znaków (nie zapominajmy, że typ zmiennej może się dynamicznie zmieniać w JavaScript), a chcemy uzyskać liczbę - wykonujemy wtedy konwersję tej zmiennej:
zmienna.toInt();
I mamy stuprocentową pewność, że uzyskamy liczbę, a nie błąd w konsoli błędów.
Zamiast pętli
Obiekt Number posiada metodę times (jej druga nazwa to each), która powoduje wykonanie danej funkcji określoną ilość razy (jak w pętli for):
(5).times(function(i){alert(i*i);});
Powyższy kod spowoduje wyświetlenie w alertach kwadratów liczb od 0 do 4. Warto jeszcze dodać, że jako drugi argument metoda ta przyjmuje uchwyt dla operatora this (znanego nam skądinąd dzięki metodzie bind obiektu Function). Oczywiście jak wspominałem druga nazwa metody times to each:
(5).each(function(i){alert(i*i);});
Kod ten oznacza dokładnie to samo co poprzedni zapis.
Zaokraglanie liczb
Do zaokrąglania liczb mamy metodę round, która jako argument pobiera wartość precyzji z jaką ma zostać wykonane zaokrąglanie.
Od razu kilka przykładów:
(12345.6789).round(3); (12345.6789).round(2); (12345.6789).round(1); (12345.6789).round(0); (12345.6789).round(-1); (12345.6789).round(-2); (12345.6789).round(-3);
Powyższe przykłady zwrócą kolejno:
12345.679 12345.68 12345.7 12346 12350 12300 12000
Jak widać im większa liczba tym większa precyzja, im mniejsza ujemna liczba tym bardziej zaokrąglona liczba zwracana przez metodę.
Oczywiście jeżeli mocno przekroczymy wartość zaokrąglenia otrzymamy 0 tak jak w tym wypadku:
(12345.6789).round(-10);
Gdy rezultat musi się mieścić w określonym przedziale
Czasami musimy liczby ograniczyć do pewnego przedziału - w obiekcie Number służy do tego metoda limit, która jako dwa argumenty przyjmuje granice przedziału. Znów dla zrozumienia najlepiej będzie podać kilka przykładów:
125.limit(0,200); 125.limit(0,100); 125.limit(1000,2000);
Powyższe przykłady zwrócą kolejno:
125 100 1000
Jak widać w wypadku gdy liczba należy do danego przedziału, jej wartość nie ulega zmianie, ale już w momencie gdy leży poza jedną z granic przedziału, jej wartość jest ustala jako ta granica, którą dana liczba przekroczyła.
Zapomnij o obiekcie Math
Na koniec nie można jeszcze pominąć kolejnego dużego usprawnienia zapisu. Jak pewnie zorientowani w JS wiedzą obliczenie takich wartości jak sinus danej liczby czy logartym przy danej podstawie wymaga użycia obiektu Math. Dobra wiadomość jest taka, że wszystkie metody obiektu Math przeniesiono do obiektu Number - można z nich korzystać na dwa sposoby:
Number.sin(3.14);
lub:
(3.14).sin();
Jak widać drugi zapis jest o krótszy niż tradycyjne:
Math.sin(3.14);
A przy tym wygląda według mnie czytelniej (mam nadzieję, że nie jest to moja subiektywna opinia ;) ).
To teraz przykłady użycia wszystkich metod obiektu Math w nowym wydaniu:
(-25).abs(); (-1).acos(); (0).asin(); (0).atan(); (20).atan2(10); (10.25).ceil(); (0).cos(); (0).exp(); (10.25).floor(); (1).log(1); (100).max(10); (100).min(10); (100).pow(10); (0).sin(); (2).sqrt(); (0).tan();
Jak widać zasada jest prosta - pierwszy argument funkcji w wersji z użyciem obiektu Math jest teraz obiektem do którego odnosi się dana metoda, a kolejne argumenty są podawane jako argumenty metody.
Podsumowanie
Poznaliśmy już prawie wszystkie rozszerzenia obiektów natywnych oferowane przez MooTools 1.2. W kolejnej części kursu omówimy obiekt Hash i tym samym zakończymy omawianie obiektów natywnych w MooTools 1.2 przechodząc do zagadnień programowania obiektowego.
Komentarze do wpisu "MooTools 1.2 - operacje na liczbach":
1.
Bigismall napisał(a):
15 lipca 2008, 23:47:18
Nowy sposób pisania, sprawdza się całkiem nieźle. Artykuły są zwięzłe i szybko się je czyta. Mam nadzieję, że podobnie jak dla wersji 1.1 Zbierzesz na końcu wszystko razem i umieścisz gdzieś w necie. Z opublikownanego w całości kursu v.1.1 korzystałem intensywnie jeszcze do niedawna.
2.
Dziudek napisał(a):
15 lipca 2008, 23:49:13
@Bigismall – no dla mnie też ten sposób się sprawdza, bo napisanie jednej części to góra 3-4h a nie jak kiedyś kilkanaście godzin przy obszernych częściach ;) A zbiorcza wersja oczywiście się pojawi bo to wystarczy zebrać wszystkie wpisy „do kupy”, ostylować i dodać spis treści (a właściwie go przerobić ;)).
Dodaj komentarz: