Mootools 1.1 - Number.js
09 czerwca, 2007
Plik number.js to jeden z mniej rozbudowanych składników frameworka mootools - zawiera 5 metod do operowania na liczbach.
toInt
Metoda toInt zwraca z podanego ciągu znaków liczbę całkowitą. Jej użycie jest bardzo proste:
zmienna.toInt();
lub:
('12px').toInt();
Powyższy kod spowoduje zamienienie zmiennej zmienna na liczbę całkowitą. Najczęściej używa się tej metody by uzyskać liczbę oznaczającą długość danego elementu (gdy trzeba usunąć zapis 'px' z końca ciągu znaków). W przykładzie, który zamieszczę po omówieniu kilku metod zauważycie, że zamiana na liczbę całkowitą ma miejsce tylko wtedy gdy dany ciąg znaków zaczyna się od cyfry/cyfr i jest brane pod uwagę pierwsze wystąpienie liczby. To znaczy:
10lol zostanie zamienione na 10, ale już:
lol10 zostanie zamienione na NaN - z ang. Not a Number...
Inny przypadek 10lol10 - nie zostanie zamienione na 1010, ale na 10 (pierwsze wystąpienie ciągu cyfr (lub cyfry)).
toFloat
Metoda toFloat ma podobne działanie co metoda toInt tylko zamiast liczby całkowitej zwraca liczbę zmiennoprzecinkową. Użycie jest takie samo ja w wypadku metody toInt:
zmienna.toFloat();
lub:
('12.5razy').toFloat();
Po wykonaniu tego kodu zostanie zwrócona liczba zmiennoprzecinkowa z danej zmiennej...
Zasady zamiany są podobne jak w wypadku metody toInt - ciąg musi się zaczynać od cyfry, a jedynym znakiem rozdzielającym cyfry może być kropka - wtedy dalsza część zostanie potraktowana jako ułamek dodany do danej liczby:
10.56px zamienione zostanie na 10.56
1,23 zamienione zostanie na 1
isNaN
Skoro już wspominam o metodach toInt i toFloat to pozwolę sobie jeszcze wspomnieć o funkcji isNaN jaką daje nam do dyspozycji sam JavaScript - jest to funkcja, która jako argument pobiera zmienną, którą sprawdza pod względem nie bycia liczbą. Zatem możemy dzięki temu elegancko napisać warunek sprawdzający poprawność podanych argumentów...
isNaN(zmienna);
Funkcja isNaN zwraca true w wypadku gdy dana zmienna nie jest liczbą i false w wypadku gdy dana zmienna jest liczbą...
limit
Metoda limit pozwala określić przedział do jakiego zostanie ograniczona dana zmienna. Pobiera ona dwa argumenty - wartość minimalną i maksymalną danego przedziału:
(150).limit(min,max);
Jeżeli liczba jest mniejsza od dolnej granicy przedziału to jej wartość zostanie zwiększona do tejże granicy, w wypadku gdy liczba jest większa od górnej granicy przedziału wtedy jej wartość zostanie pomniejszona do tej granicy. W wypadku gdy dana liczba mieści się w danym przedziale, jej wartość nie ulegnie zmianie... Przykłady:
10.limit(5,9); // zwróci 9
3.limit(5,9); // zwróci 5
9.limit(5,9); // zwróci 9
6.limit(5,9); // zwróci 6
round
Metoda round służy do zaokrąglania liczby z ustaloną precyzją. Jako argument przyjmuje wielkość precyzji zaokrąglenia. Domyślna wartość to 0, zatem liczba zaokrąglana zostanie zamieniona w liczbę całkowitą (jeżeli jest liczbą zmiennoprzecinkową). Jeśli jako wartość precyzji podamy liczbę większą od zera to liczba będzie zaokrąglana do tylu miejsc po przecinku , w wypadku liczb mniejszych od zera liczba będzie zaokrąglana kolejno do jedności, setek, tysięcy itd.
Składnia metody:
liczba.round(precyzja);
W wypadku zaokrąglania np.: 15 z precyzją 1 otrzymamy 20 natomiast dla liczby 14.9 otrzymamy już 10...
To pora na taki zbiorczy przykład dla wymienionych wyżej metod pliku number.js :
times
Metoda times służy do wywoływania funkcji określoną liczbę razy. Składnia metody:
(ilość_wywołań).times(funkcja);
Dzięki tej metodzie możemy więc wykonać coś w rodzaju pętli określoną liczbę razy. Według mnie jest to dobre rozwiązanie skracające kod - zamiast pisania prostej pętli piszemy liczbę wykonań (lub podajemy zmienną) i wykonujemy dany kod żądaną liczbę razy.
Przykład użycia metody times poniżej:
W następnej części kursu mootools zajmiemy się ostatnim składnikiem grupy Native - plikiem strong.jsm umożliwiającym operacje na ciągach znaków...
Komentarze do wpisu "Mootools 1.1 - Number.js":
1.
Riddle napisał(a):
09 czerwca 2007, 15:20:05
Eeee…
parseInt&parseFloatsą passé?2.
Dziudek napisał(a):
09 czerwca 2007, 15:45:17
@Riddle – na czym bazujesz swoje stwierdzenie o „przestarzałości” wymienionych funkcji JS ? Bo szczerze mówiąc pierwszy raz się z takim stwierdzeniem spotykam… Oczywiście nie warto nadużywać wymienionych funkcji do zamieniania ciągu typu ‘12’ na liczbę bo wystarczy pomnożyć ją przez 1, ale w innych sytuacjach ? Od razu dodam, że rozwiązania, które są ale nie działają między innymi na IE6 odpadają na dzień dobry (bo wiele jest świetnych rozwiązań, które mogłyby zmienić tworzenie i możliwości stron, ale z powodu wymienionej przeglądarki nie ma sensu ich stosować...).
3.
Riddle napisał(a):
09 czerwca 2007, 15:49:28
No ale moment. Po co tworzyć 2 nowe fcje, skoro robią one to samo co
parse__?BTW:
<code/>Powinno być elementem liniowym,<pre><code/></pre>(bc.w Textile) blokowym – bo jak widzisz bałagan się robi.4.
Dziudek napisał(a):
09 czerwca 2007, 15:57:28
@Riddle – to są tak zwane uroki mootools ;] Nie ukrywam, że wiele osób się tego czepi, ale z drugiej strony dla mnie bardziej czytelne jest toInt() niż parseInt() (i przy okazji krótsze – jak używasz tego namiętnie w kodzie to zaoszczędzisz po 3 znaki na każdym użyciu i się zwróci to co poszło na zapisanie samej funkcji w kodzie frameworka (a raczej się na pewno zwróciło bo w samym kodzie toInt i toFloat występuje) ;D ). Zresztą zastanawiam się czy w przyszłości w pliku number.js nie zostanie rozszerzone użycie tych funkcji – mootools dynamicznie się rozwija (mootools 1.1 rev. 566 wydali niedawno a już jest w dev mootools rev. 636) i kto ich tam wie ;)
5.
Dziudek napisał(a):
09 czerwca 2007, 15:59:13
co do błędu z kodem – za CSS tego joggera dopiero się wezmę – na razie nie mam czasu go dopieścić, a jak tworzyłem joggera to miałem maturę przed sobą i trzeba było szybko to robić więc na wszystkich szczegółach się nie skupiałem ;] Ale spokojnie – w title strony pisze, że wersja alpha ;P
6.
Riddle napisał(a):
09 czerwca 2007, 15:59:21
Tak, oszczędzasz swój czas, ale nie czas procesora. Wiesz, właśnie tego nie lubię w bibliotekach. Sam pisząc w jQuery nie robię
$(elem).attr('id', 'identyfikator')tylkoelem.id = 'identyfikator'– bo jest to szybsze, a użycie frameworka tylko dla tej 1 linijki jest nieefektywne. Co innego, gdy mogę połączyć w chainingu 4 metody – ok.7.
Dziudek napisał(a):
09 czerwca 2007, 16:03:34
@Riddle – Racja :) Ale z drugiej strony zależy od podejścia kodera ;) Jeden będzie się troszczył o zasoby i będzie starał się pisać jak Ty wykorzystując obiektowość JS, a drugi będzie pisał korzystając z wszelkich udogodnień frameworka jaki wykorzystuje i twierdził, że czasy 640kB RAMu już za nami ;) Także jest wybór ;)
BTW:
zamiast:
elem.id = 'identyfikator'nie powinno być :
$('elem').id = 'identyfikator'?
8.
Riddle napisał(a):
09 czerwca 2007, 16:07:54
W jQuery? Nie… jeśli już to
$(elem).get(0).id = 'identyfikator'. Raz, że nie użyłem selektora, tylko referencji do węzła DOM, dwa – obiekty jQuery nie posiadają domyślnych metod DOM jak shorthandy atrybutów.9.
Dziudek napisał(a):
09 czerwca 2007, 16:12:34
@Riddle – ok, ok ;] Z jQuery się jeszcze nie bawiłem, ale niedługo wezmę je w obroty, więc póki co już się nie wymądrzam apropo jQuery’owskich zapisów ;]
10.
Nero napisał(a):
05 lipca 2007, 11:15:30
Metoda times() bardzo fajna :) Przypomina do zludzenia mozliwosci Rubiego gdzie liczba jest obiektem i mozna takie tricki robic :D nice ;)
Dodaj komentarz: