Wap/wml 1 I. Мобилни технологии, Интернет и wap 1



страница4/10
Дата14.01.2018
Размер6.74 Mb.
#46632
1   2   3   4   5   6   7   8   9   10
) на колодата (т. 15., лекция

3.)
6. Коментари в WMLScript

o аналогично на JavaScript коментарен ред се въвежда с //, а многоредов коментар се загражда с /* ..... */

o вписани коментари не се допускат

o примери

// this is a single-row comment either in WMLScript or in JavaScript

/*

This is a multiple-row comment.



Nested comments are not allowed in here.

*/
7. Типове променливи в WMLScript

o съгл. т. 2. типовете не се декларират, а се разрешават при интерпретацията, като стойностите са булеви, цели, плаващи стойности и символни низове

o обобщения тип invalid се присвоява на променливата когато нейния тип не може да се определи – напр. при неизпълнима конверсия или нулев знаменател

o целите стойности имат три представяния: осмично, десетично и шeстнадесетично

o стойности с плаваща запетая могат да се представят с десетична точка или в експоненциален вид


Стр. 3 от 9


WAP/WML 7

o символните низове съдържат нула и повече символи, заградени в кавички (“...”) или апострофи (‘...’); специални символи в низа се въвеждат с \: напр. в комбинациите

\’, \”, \\ и \/ стойност има само втория символ, а \n и \t се интерпретират като нов ред и табулация

8. Идентификатори в WMLScript

o идентификаторите на променливи, функции и директиви (в последния случай етикети) са буквено-цифрови низове, стартиращи с буква или “_” и несъвпадащи със служебните думи на езика

o кодирането им е по стандарта Unicode (16 бита) и употребата на кирилица е допустима

o малки и главни букви се интерпретират като различни

o еднакви идентификатори на различни елементи от една категория естествено са недопустими в рамките на един компилационен модул, но се допускат еднакви идентификатори на различини категории елементи – напр. функция, променлива и директива (което не е признак на добър програмен стил)

o служебни (запазени) думи в езика са: access, agent, break, continue, div, div=, domain, else, equiv, extern, for, function, header, http, if, invalid, meta, name, path, return, typeof, url, use, user, var и while

o допълнителни запазени думи за бъдещо разширение на езика са: case, catch, class, const, debugger, default, delete, do, enum, export, extends, finally, import, in, lib, new, null, private, public, sizeof, struct, super, switch, this, throw, try, void и with
9. Променливи в WMLScript

o променливите се декларират явно преди обръщение към тях в програмата, като се ползва служебната дума var, последвана от [eдин] идентификатор и евентуално стойността на променливата, въведена със знак “=”

o имплицитната стойност на декларирана, но неинициализирана променлива е празен символен низ: “”

o типа на променливата се установява при интерпретацията

o обхвата на променливата е до края на функцията, в която е декларирана

o пример: обръщение към WMLScript функция root(varName,number), която извиква библиотечна функция за изчисляване на квадратен корен; резултатът се връща към викащия код с използване на променливата sqr_rt:






newcontext="true">






Number:

title="Number:"/>

Square Root: $nbsp $(result)






Стр. 4 от 9



WAP/WML 7

съдържание на WMLScript файла ex5-07_09.wmls extern function root(varName,number) {


// Variable declaration:

var sqr_rt;


if (number < 0) {

sqr_rt = number;

}

else
}


else {

sqr_rt = Float.sqrt(number);

} WMLBrowser.setVar(varName,sqr_rt); WMLBrowser.refresh();



10. Област на стойностите в WMLScript

o променливите с целочислените стойности се кодират с 32 бита, т.е. могат да варират от -231 до +231 (или по-точно [-2 147 483 648, 2 147 483 647] които граници са също така резултат на библиотечните функции съответно Lang.minInt() и Lang.maxInt())

o променливите с плаваща запетая също се кодират с 32 бита и тяхната област може да се получи с библиотечните функции Float.minFloat() и Float.maxFloat())

o променливите-низове имат произволна дължина и съдържание, като текущата дължина на низа може да се получи с библиотечната функция String.length(string_Id)

o стойността на булевите променливи е true или false

o пример – приложение на библиотечни функции за проверка на области и мощност:



"http://www.wapforum.org/DTD/wml_1.1.xml">




newcontext="true">




name="1">













name="3">





Your name: $nbsp

name="my_str" title="User string"/>
The smallest integer: $(int1)
The biggest integer: $(int2)
The smallest F.P. value:

$(float1)

Стр. 5 от 9




WAP/WML 7

The biggest F.P. value:



$(float2)

Your string has $nbsp $(result)

$nbsp char/s

съдържание на WMLScript файла ex5-07_10.wmls extern function Isize(varName1,varName2) { WMLBrowser.setVar(varName1,Lang.minInt()); WMLBrowser.setVar(varName2,Lang.maxInt()); WMLBrowser.refresh();

}

extern function Fsize(varName1,varName2) { WMLBrowser.setVar(varName1,Float.minFloat()); WMLBrowser.setVar(varName2,Float.maxFloat()); WMLBrowser.refresh();



}

extern function Ssize(varName,string) {

// Declaration of variable result:

var result = String.length(string);

// Substituting the result: WMLBrowser.setVar(varName,result);

// Refreshing WML document: WMLBrowser.refresh();

}
11. Конверсия на типовете в WMLScript

o при установяване стойността на променливите – напр. чрез форма за потребителско въвеждане – ако новата стойност на променливата е извън нейната област (напр. по- голяма от maxInt или по-малка от minInt), интерпретаторът генерира събитие-грешка и типа на променливата се конвертира в invalid

o специално за променливите с плаваща запетая при по-малка абсолютна стойност от допустимата конверсията се извършва към стойност 0.0

o при булева операция върху не-булеви изрази/променливи последните се конвертират до булеви стойности



12. Оператори за присвояване на стойности и аритметика в WMLScript

o операторът “=” се използва за присвояване на стойности на променливите; той е бинарен оператор т.е. изисква два операнда, като присвояването става отдясно наляво

o присвояваните стойностите могат да бъдат и във формата на изрази от променливи

(вкл. модифицираната променлива) и оператори

o допуска се и съкратен запис на изразите за присвояване, когато в тях участва модифицираната променлива

o аритметичните оператори манипулират числови стойности и също са бинарни

o примери за присвояване с аритметични изрази в разширена и съкратена форма

var x = 3;

x = x + 6; x += 6; // събиране и присвояване x = x – 6; x -= 6; // изваждане и присвояване x = x * 6; x *= 6; // умножение и присвояване x = x / 6; x /= 6; // деление и присвояване

x = x div 6; x div= 6; // деление по модул и присвояване на цялата част

x = x % 6; x %= 6; // деление по модул и присвояване на остатъка
13. Побитови оператори върху числови аргументи в WMLScript

o тези операторите се използват за побитови операции върху числови аргументи (които се разглеждат като низ от битове) и имат следната форма:



<< преместване наляво (умножение по степените на 2)
Стр. 6 от 9

WAP/WML 7

>> преместване надясно със запазване на знака (деление по степените на 2)

>>> преместване надясно с конверсия към положителна стойност

& конюнкция

| дизюнкция

^ сума по модул 2

~ отрицание (унарен оператор)

<<= преместване наляво и присвояване

>>= преместване надясно и присвояване

>>>= преместване надясно с положителна конверсия и присвояване

o пример:

a = a << 2 //преместване 2 позиции наляво т.е. умножение по 4
14. Унарни оператори върху числови аргументи в WMLScript

o това са оператори, които изискват един операнд и имат префиксен и постфиксен запис

o при прификсна операция операторът се записва преди операнда и операцията върху аргумента се извършва преди изчисляване стойноста на израза

o при постфиксна операция операторът се записва след операнда и операцията върху аргумента се извършва след изчисляване стойноста на израза

o използват се следните унарни оператори

++ увеличение с единица

-- намаление с единица

~ побитово отрицание (само в префиксна форма)

o пример:

var index1 = ++i // стойността на i се инкрементира преди присвояването

var index1 = i++ // стойността на i се инкрементира след присвояването
15. Логически оператори в WMLScript

o операторите “!”, “&&” и “||” се използват за логически операции върху булеви променливи и имат следната форма:

! отрицание

&& конюнкция (логически И)

|| дизюнкция (логическо ИЛИ)

o последните два оператора са условни, т.е. при определено условие оценката на израза може да се извърши само на базата на първия оператор – напр. при конюнкция между два булеви изрази, от които първият има стойност false, не е необходимо да се изчислява втория, тъй като резултатът от операцията е false


16. Оператор с три аргумента в WMLScript

o този оператор “?:” (означаван като tertiary operation) се използва за кратка форма на

if-else израз със следния синтаксис:

var a, b = 6, c = 7;

if (b

a = c; }


else {

a = b; }


// кратка форма със същата семантика

a = (b < c ? c : b)


17. Оператор за конкатенация на символни низове в WMLScript

o символни низове се конкатенират с оператор “+”, който има и форма за конкатениарне с присвояване “+=”


Стр. 7 от 9

WAP/WML 7

o за по-сложни операции върху низове се използват функциите на стандартна библиотека String


18. Оператори за сравнение в WMLScript

o тези оператори сравняват стойностите на два аргумента от еднакъв тип и изразът има булева стойност

o освен числови аргуманти могат да се сравняват булеви, като true се приема за по- голямо от false, и низове, при които низ, предхождащ по азбучен ред се приема, че има по-голяма стойност

o използват се следните сравнителни оператори:

== равенство

!= неравенство

> по-голямо

< по-малко

>= по-голямо или равно



<= по-малко или равно

o пример





newcontext="true">






Your argument: $nbsp

name="new_argument" title="Argument:"/>
Comparison result: $nbsp$(result)


съдържание на WMLScript файла ex5-07_18.wmls extern function compare(varName,number) {


// This function compares user argument

// to 10, if input is numerical.

// Otherwise input is compared to string

// "lion".

// Intialize local variables, to which

// the comparison is done:

var myNumber = 10;

var myString = "lion";


// Result is saved into this variable:

var result;


// Type of input:

if (Lang.isInt(number)) { // Input can

//be converted into integer


// Conversion:

number = Lang.parseInt(number);

Стр. 8 от 9


WAP/WML 7

if (number < myNumber) { // Comparison of numbers result = "New number is smaller.";

}

else if (number == myNumber) {



result = "New number is equal to basic number.";

}

else {



result = "New number is bigger.";

}

}



else { // Input is not integer
// Input should be handled as string:

number = String.toString(number);


// Comparison of two strings:

if (number < myString) {

result = "Alphabetically before.";

}

else if (number == myString) {



result = "Alphabetically identical.";

}

else {



result = "Alphabetically after.";

//

}



}

}

// Refreshing the result into the document: WMLBrowser.setVar(varName,result); WMLBrowser.refresh();





19. Оператор за валиденост на типа isvalid

o този оператор връща true ако неговия аргумент (литерална стойност или израз) е (или може да се конвертира до) някой от валидните типове – цял, плаващ, низ или булев

o пример

var i = 5;

var str = “FMI”;

var isItValid = isvalid i; //true var isItValid = isvalid str; //true var isItValid = isvalid (10/0); //false

Стр. 9 от 9

VIІI. Функции и изрази в WMLScript
1. Синтаксис на WMLScript функциите

WAP/WML 8



o функциите в WMLScript представляват адресируеми блокове код в рамките на компилационния модул, които изпълняват определени задачи и евентуално връщат стойност към викащия код

o декларацията на функция съдържа нейния идентификатор и списък от параметри

o когато декларацията на функция се въвежда с ключ extern, тя е достъпна за външни обръщения (извън компилационния модул) – напр. от WML документ или от външна скрипт функция

o списъкът параметри задава интерфейса на функцията; той може да бъде и празен, като в такъв случай обмен на стойности може да се извърши с помощтта на функции от библиотеката WMLBrowser – вж. примера от т. 3., лекция 7.

o програмният код (т. нар. програмен блок) на функцията следва нейната декларация и се загражда с фигурни скоби - { и }

o не се допуска вписване на функция във функция – т.е. декларация на функция не може да присъства в програмния блок на друга функция

o идентификаторите на функции са уникални в рамките на един компилационен модул,

но могат да съвпадат с идентификатори на променливи или етикети на директиви



2. Интерфейс на WMLScript функциите

o обръщението към функция съдържа и списък с реални параметри, съответстващ по брой и ред на списъка формални параметри от декларацията на функцията; параметрите се разделят със запетая и списъка им е в кръгли скоби независимо дали съдържа елементи или е празен

o външно обръщение към функция винаги съдържа и URL на компилационния модул

(което дава възможност за разграничаване на едноименни функции в различни файлове); URL адреса – абсолютен или относителен – предхожда иденитфикатора на функцията и се отделя с диез #

o обръщението към стандартна библиотечна функция съдържа идентификаторите на библиотеката и на функцията, разделени с точка

o при често обръщение към дълги URL може да се ползва директивата url, която декларира конвенция за обръщението към даден адрес по следния синтакисис:


use url My_URL http://courses.fmi.uni-sofia.bg/WAP_WML/ex_files/sample.wmls

// Reference to the script notation My_URL

var a = My_URL#fact(6);

o обръщение към вътрешна функция (в същия компилационен модул) съдържа само идентификатора й (и списъка параметри), като се допуска рекурсия и обръщение към функция преди нейната декларация

o параметрите се обработват от програмния блок на функцията като локални променливи – с разликата че локалните променливи се инициализират от кода на функцията

o освен чрез стойностите на параметрите, всяка функция връща стойност също и чрез своя идентификатор, на който се присвоява стойността на дадена променлива с израза


return variable_identifier;
а когато return не е включен в програмния блок, на идентификатора на функцията се присвоява стойност празен низ; допуска се повече от един return за функция
Стр. 1 от 7


WAP/WML 8

o пример


"http://www.wapforum.org/DTD/wml_1.1.xml">




newcontext="true">






Number:


$(result)





WMLScript код във файла ex6-08_02.wmls:
extern function testReturns(number, result) {

// calls to functions that are not yet declared

var result1 = dummyFunc(number);

var result2 = fact(number);

var c = number;

var answer = "Dummy function returns: " + result1 +

"||| The factorial of " + c + " is: " + result2; WMLBrowser.setVar(result,answer); WMLBrowser.refresh();

}
function dummyFunc(someNumber) {

var a = someNumber;

var b = fact(a);

// The function returns an empty string

// as there is no return statement

}
function fact(nmbr) {

var fact = 1; // return value when nmbr <= 0

//variable and function with the same identifier (not recommended)

if (nmbr > 0) {fact = nmbr * fact(--nmbr);} // Recursive function call

return fact; // Function returns the value of the variable fact

}
3. Изрази в WMLScript

o изразите представляват операции върху променливи и се разделят с “;”

o празните изрази се състоят само от “;” и се ползват за създаване на безкрайни цикли или изчакване на събитие:


for (;;) { // do something in eternal loop
}

while (!signal(device)); // wait here until signal(device) becomes true

o програмният код, заграден във фигурни скоби, образува блок; програмен блок е тялото на функцията, както и блоковете на команди за цикъл и условно изпълнение на блок

o блоковете са прозрачни по отношение на декларираните променливи – обхвата на променливата е от нейната декларация до края на функцията (независимо от границите на блоковете)


Стр. 2 от 7



WAP/WML 8

4. Условно изпълнение в WMLScript

o реализира се с команда if-then-else, като клаузата else e опция

o допуска се йерархично включване на if-блокове, което се използва за избор между няколко алтернативи (тъй като в WMLScript няма case команда)

o пример – вж. т. 18., лекция 7. и ex5-07_18.wmls


5. Условен цикъл while

o блокът на цикъла се изпълнява след предварителна проверка на условието на цикъла, при което е възможно цикълът изобщо да не бъде изпълнен или пък да се изпълнява безкрайно:


while (0.1 > 0) { // block statements of this eternal loop

}

o проверка на условието се изпълнява след всяко изпълнение на блока на цикъла



o пример:

"http://www.wapforum.org/DTD/wml_1.1.xml">









$(result)



WMLScript код във файла ex6-08_05.wmls:

extern function whileStatement(result) {


var i = 10;

var j = 0;

var answer = "";
while (i > j) {

answer += i + " is bigger than " + j + ".\n";

j++;

} WMLBrowser.setVar(result,answer); WMLBrowser.refresh();


}
6. Цикъл for

o блокът на цикъла се изпълнява за последователни стойности на управляващата променлива, която може да бъде декларирана в самата команда на цикъла (отново с обхват до края на цялата функция)

o условието за край на цикъла се проверява преди всяко изпълнение на вложения блок и не е обичайно управляващата променлива да бъде модифицирана в тялото на блока

(но тъй като това е допустимо, цикълът for може да се счита за безусловен само при определени условия :)

o префиксните и постфиксните записи на операции върху управляващата променлива в командната декларация на цикъла се изпълняват респективно преди и след изпълнението на целия блок

o последователността на записите в условната част на командата е: начална стойност на управляващата променлива, условие за край и итеративна операция:


Стр. 3 от 7

WAP/WML 8

for (initial value; condition; increment)

o пример

"http://www.wapforum.org/DTD/wml_1.1.xml">










$(result)





WMLScript код във файла ex6-08_06.wmls:

extern function forStatement(result) {


var c


var c

var p


//

}
var counterplus = 0;

var counterminus = 0;

var plus, minus;

var answer = "";
// Variable i can be declared also inside the

// for condition!

for (var i = 1; i <= 4; i++) {

plus = counterplus++;

minus = --counterminus;

answer += "Iteration " + i + ": " + plus + " | " + minus + " *\n";

} WMLBrowser.setVar(result,answer); WMLBrowser.refresh();



7. Команда break

o тази команда прекратява изпълнението на цикъл – for или while – като управлението се предава към командата (или операцията) непосредствено след блока на цикъла

o използването й е допустимо само в блока на for или while цикъл

o пример


"http://www.wapforum.org/DTD/wml_1.1.xml">







Number (-10..10):




Сподели с приятели:
1   2   3   4   5   6   7   8   9   10




©obuch.info 2024
отнасят до администрацията

    Начална страница