MooTools 1.2 - ciągi znaków cz. 2
15 lipca, 2008
W drugiej i ostatniej części kursu poświęconej obiektowi String zajmiemy się metodami konwertującymi ciągi znaków - rgbToHex, hexToRgb, escapeRegExp, stripScript, substitute, toInt oraz toFloat.
Konwersje kolorów raz jeszcze
Dwie metody obiektu String już mieliśmy okazję poznać przy omawianiu obiektu Array - chodzi o metody hexToRgb i rgbToHex - jak pamiętamy zapis:
["10","AA","FF"].hexToRgb();
Używał metody hexToRgb zawartej w obiekcie Array, ale już zapis postaci:
"10AAFF".hexToRgb();
Używa tej samej metody, ale zawartej w obiekcie String.
W wypadku metody rgbToHex stosujemy zapis postaci:
"rgb(10,20,30)".rgbToHex();
lub:
"rgba(10,20,30,0)".rgbToHex();
Pierwszy zapis to kolor w formacie RGB, a drugi to kolor w formacie RGBA (czyli RGB + kanał alpha). W naszym wypadku ponieważ alpha równa jest 0, zostanie zwrócona wartość transparent.
Oczywiście obie metody podobnie jak w wypadku metod obiektu Array przyjmują jako argument wartość logiczną określającą czy chcemy aby wynik był zwrócony w postaci tablicy czy też w postaci zwykłego ciągu znaków.
Konwersje liczb
Skoro już obracamy się w temacie metod konwertujących to zajmijmy się teraz metodami toInt i toFloat - są to odpowiedniki natywnych parseInt i parseFloat, które służą do zamienienia ciągu znaków na liczbę.
Metody te będziemy często wykorzystywać przy pobieraniu szerokości elementów do różnego rodzaju obliczeń:
"100px".toInt();
Powyższy zapis zwróci nam po prostu liczbę 100. Podobnie jest z metodą toFloat:
"10.25em".toFloat();
Zwróci nam liczbę zmiennoprzecinkową 10.25 .
Warto jeszcze zwrócić uwagę na to, że metoda toInt może pobierać podstawę systemu w jakim zapisana jest liczba i zamieniać rezultat na liczbę w zapisie dziesiętnym. Przykładowo jeżeli mamy liczbę w zapisie binarnym:
"1111".toInt(2);
Powyższy kod zwróci nam liczbę 15, bo jej reprezentacja w systemie dwójkowym to właśnie 1111.
Myślę, że w wypadku tych metod więcej tłumaczyć nie trzeba, bo tak jak wspominałem to po prostu natywne metody pod innymi nazwami i przypisane do innego obiektu natywnego. Oczywiście osoby optymalizujące kod powiedzą, że to nie ma sensu, bo zwykłe parseInt() zadziała tak samo, a różnica jest tylko w zapisie - oczywiście mają rację, ale nikt im metody parseInt używać nie zabrania ;) Wszystko zależy od tego jak bardzo zależy nam na optymalizacji kodu i łatwości zapisu.
Usuwanie kodu JavaScript z tekstu
Czasami mamy ciągi znaków zawierające skrypty - dzięki metodzie stripScripts możemy usunąć kod JS z ciągu znaków lub wykonać tenże kod i otrzymać ciąg znaków bez kodu JS. Oczywiście przykłady wyjaśnią tutaj wszystko najlepiej:
"<script>alert('To jest test...')</script>Tekst bez kodu JS".stripScripts();
W powyższym wypadku zostanie zwrócony ciąg znaków:
Tekst bez kodu JS
Gdybyśmy jednak jako argument metody stripScripts podali wartość true:
"<script>alert('To jest test...')</script>Tekst bez kodu JS".stripScripts(true);
To pojawiłby się alert z tekstem "To jest test..." i dodatkowo zostałby zwrócony przez tą metodę ciąg znaków taki jak w poprzednim przykładzie. Zatem metoda stripScripts może służyć zarówno do wykonywania kodu JS zawartego w tekście, jak i do usuwania tego kodu z ciągu znaków.
Prawie jak system szablonów
Ważną zmianą w kodzie MooTools 1.2 jest dla mnie metoda substitute, która ma podobne działanie jak napisana przeze mnie kiedyś klasa Template dla MooTools 1.11. Składnia tej metody wygląda następująco:
tekst.substitute(obiekt, ograniczniki);
Drugi argument jest opcjonalny - jest to tablica znaków, które ograniczają tekst do podmienienia. Podmiana następuje na bazie właściwości obiektu. Przykładowo:
"To jest {test}".substitute({test:"testowy tekst"});
Gdybyśmy chcieli podmieniać teksty postaci: <?text?> to zapiszemy:
"To jest <?test?>".substitute({test:"testowy tekst"},["<?","?>"]);
Metoda ta może być bardzo przydatna gdy mamy jakieś szablony tekstu, gdzie zmieniają się tylko określone parametry - nie musimy wtedy generować długich kombinacji ciąg znaków - zmienna - ciąg znaków - zmienna - itd. Dzięki temu kod wygląda estetyczniej (przynajmniej według mnie ;) ).
Neutralizowanie wyrażeń regularnych
Każdy kto zetknął się kiedyś z wyrażeniami regularnymi wie, że czasami istnieje potrzeba znalezienia tekstu zawierającego znaki specjalne stosowane w wyrażeniach regularnych - aby zautomatyzować procedurę ich "neutralizowania" poprzez dodania przez każdym takim znakiem znaku backslash stworzono metodę escapeRegExp:
"Tekst.dla.metody{escapeRegExp}".escapeRegExp();
Powyższy kod zwróci nam tekst:
Tekst\.dla\.metody\{escapeRegExp\}
Metoda ta jest niezwykle przydatna wtedy gdy tekst, który umieszczamy w wyrażeniu regularnym jest generowany dynamicznie i nie mamy pewności co się w nim znajdzie.
Podsumowanie
Poznaliśmy już wszystkie metody dodane do obiektu String przez framework MooTools 1.2. W kolejnej części zajmiemy się obiektem natywnym Number.
Komentarze do wpisu "MooTools 1.2 - ciągi znaków cz. 2":
Jeszcze nie ma żadnych komentarzy. Twój może być pierwszy.
Dodaj komentarz: