"JavaScript" ir simbolių eilutės

"JavaScript" objektai yra paprasti ir daugiausia susiję su lango turiniu: dokumentais, nuorodomis, blankais ir t.t. Taip pat ji turi nedidelę saują vidinių objektų: Date, Math, String, Array ir Object. Ir nors naujesnėse "JavaScript" versijose (pvz., "Netscape Atlas") jie realizuoti šiek tiek kitaip, mes šiame straipsnelyje laikysimės tik klasikinės "Netscape" 2.0 versijos. Šį kartą apžvelgsime tik eilutes.

Tai dažniausiai naudojamas objektas, kuris sukuriamas tiesiog priskiriant reikšmę kintamajam, pvz.,

var manoVardas = "Vartiklis";

Eilutės turi vieną charakteristiką - ilgį, kuri nurodoma, prie eilutės objekto prijungiant ".length", pvz., tokia komanda išves 9:

alert(manoVardas.length);

Tačiau su eilute galima naudoti daugybę metodų, kurie skirstomi į dvi sritis: eilučių valdymas ir teksto formato nurodymas.

Eilučių valdymo metodai naudojami eilutės turiniui gauti ar pakeisti, pvz.,
"substring" - gražinti nurodytą eilutės dalį;
"indexOf" - gauti simbolio ar jų grupės vietą eilutėje;
"toLowerCase" arba "toUpperCase" - perrašyti eilutę mažosiomis arba didžiosiomis raidėmis.
Pvz.,

var laikinasTekstas = "Pakeisti didžiosiomis".toUpperCase();

Va tik su lietuviškomis raidelėmis problema - bet ar tai rūpi amerikonams? O "Netscape" 2.0 teturėdama tik vieną "String" objektą, iš kurio kuriamos visos eilutės, susiduria su įdomiais šalutiniais efektais. pvz.,

<SCRIPT>
e1 = "pirma eilutė"
e2 = "antra eilutė"
e1.extra = "nauja charakteristika"
alert (e2.extra)
</SCRIPT>

Šiame pavyzdėlyje sukuriamos dvi eilutės. Kai pirmajai priskiriama kokia nors nauja charakteristika, pasirodo, kad ją automatiškai turi ir kita. Tačiau jų turinys yra stabilus ir negali keistis. T.y. eilutę galima keisti tik perrašant į kitą vietą. Todėl "JavaScript" programytė, kuri dažnai keičia eilutes, daug ir šiukšlina greitai sukeldama atminties skirstymo problemas ir klaidos pranešimą "out of memory", kuris ypač skuba "iškišti galvytę" "Windows" 3.1 sistemoje. Klasikinis tokios stichinės nelaimės pavyzdys yra "bėgančios eilutės":

<SCRIPT>
var skaitliukas = 0;
var tekstas = "Vartiklis yra geriausias!";
sukti();
function sukti() {
   var strTmp = tekstas.substring(skaitliukas, tekstas.length)+tekstas.substring(0, tekstas.length-1)
   windows.status = strTmp;
   if (skaitliukas < tekstas.length) skaitliukas++;
   else skaitliukas = 0;
   setTimeout("sukti()", 333);
   // 333 ms yra minimali Netscape 2.0 pauzė
}
</SCRIPT>

O kad išvengti aukščiau minėtų bėdų tereikia pašalinti "strTmp" kintamąjį ir eilutę priskirti tiesiog lango būsenos eilutei. Ir nors tai sumažins atminties rijimą, bet jo nepašalins, nes naudojamas "setTimeout" metodas, kuris per keletą tūkstančių iteracijų vistiek "suvalgys" visą prieinamą atmintį išpranašaudamas "out of memory" pranešimą.

Ach tas nelemtas "Java" noras visur šiukšlinti ir nesurinkti savų žaislų. Ir tai laikoma jos privalumu!

Tiesiog - Java
Lambda išraiškos – Java į naują lygį
Java 8: Optional prieš null
Iš kur Javos tas lėtumas?
Unix komandinės eilutė
Didžiųjų duomenų mitas
Tcl kalba