Since you live in the US, you must enter a state.
Please go back and enter one.
Bây giờ bạn có thể hiện thị thông báo bằng cách thi hành một đến URL #nostate.Vấn đề là WML đó không cung cấp một phương pháp để thực hiện việc kiểm tra đơn giản này. Vừa không có bất cứ phương pháp nào để kiểm tra việc gởi dữ liệu đến server, có server kiểm tra giá trị và từ chối chúng, và sau đó gởi một thông báo lỗi tất cả phương pháp trả về. Trừ khi dùng WMLScript .
2.1.2 WMLScript to the Rescue
Dùng WMLScript để giải quyết vấn đề, dùng task để gởi dữ liệu đến server để gọi WMLScript thay vì load một thẻ WML.
/* Calculate factorial of n. */
result *= n;
}
return result;
}
Dấu ngoặc mốc xoắn, cú pháp for ở giữa, và cú pháp return tại cuối là tất cả tượng tự nhau cho những ngôn ngữ như C, java, JavaScript, hay C++. Dòng function và dòng var có thể ít quen thuộc, chúng sẽ đề cập trong chương sau. Những lời chú thích WMLScript có thể 2 forms: giống như trong C, bắt đầu với /* và kết thúc */ và giống trong C++, bắt đầu với // và tiếp tục cho đến khi kết thúc dòng
Trong WMLScript có phân biệt dạng chữ, bao gồm tên hàm (function), tên biến, giá trị chữ (literal values), từ khoá (keywords), và mọi thứ còn lại.Khoảng cách thì không.Bất cứ chỗ nào bạn có thể đặt một khoảng trống, bạn có thể đặt nhiều nếu bạn muốn và cũng bao gồm cả items như linebreaks và tabs và được tính đơn giản như khoảng trống.Ví dụ trong đoạn mã trích ngắn sau:
if (x)
a = b;
else if (y)
foo (c, d);
Chỉ cách khoảng mà thật sự yêu cầu là một trong giữa else và if vì nó tách rời 2 từ khoá. Đoạn có thể viết :
if(x)a=b;else if(y)foo(c,d);
Không có thay đổi thuộc tính nó tại tất cả. Chỉ có nguyên nhân cho tất cả thêm khoảng cách trong phiên bản đầu là có thể đọc được.
2.1.3.1 Thư viện Chuẩn (Standard Libraries )
Vì ngôn ngữ chính WMLScript đã làm đơn giản đến mức thu nhỏ, nhiều task không được làm ngay lập tức.Ví dụ, không có thao thêm ký tự riêng lẻ từ Strings.May mắn, những hàm này lại được chứa trong thư viện chuẩn đã được định nghĩa trong ngôn ngữ WMLScript và được thi hành tất cả.Vì vậy, chúng thành hiệu quả của chính ngôn. Thư viện bao gồm các hàm mở rộng, bao gồm quá trình chuyển đổi giữa các kiểu dữ liệu khác, xử lý chuỗi string, và số chấm động. Mức độ cao hơn, hàm để giải quyết URLs và trình bày hộp thoại (dialog boxes) đến người dùng.
2.1.3.2 Bytecode
Trên trình duyệt, WMLScript được biên dịch sang bytecode trước khi truyền. Bytecode này là một dãy các mã được truyền cho máy tính và công việc của WMLScript hiển thị trên thiết bị rất dễ dàng. Có 2 loại WMLScript interperter và WMLScript virtual machine(hay WMLScript VM) thì thường được dùng thay thế cho nhau. WAP biên dịch mã code cho bạn nếu cần. Lý do là giảm kích thước và giấu mã source gốc. Phương pháp này hay kia, không có sự khác nhau trong code của bạn.
2.1.3.3 Functions
Giống như bất kì ngôn ngữ nào khác, WMLScript hỗ trợ functions, giống như ví dụ check() cho dễ dàng hơn. Mặt khác, WMLScript code chỉ cho phép một hàm bên trong. Tương tự như ngôn ngữ như C, Java và ngôn ngữ khác như JavaScript và Perl
2.2 Những kiểu dữ liệu , biến và chuyển đổi của WMLScript ( WMLScript Datatypes, Variables, and Conversions)
WMLScript là một ngôn ngữ không mạnh. Đây có nghĩa là bạn chưa bao giờ chỉ định kiểu dữ liệu của biến hay kiểu trả về của một hàm nhưng chính WMLScript chuyển đổi giá trị trả về. Ví dụ, giá trị 1234 là integer, nhưng nếu bạn sử dụng hàm thư viện String.length( ), mà mong chờ một chuỗi (string), nó chuyển hoàn toàn thành chuỗi string "1234", chiều dài là 4. Tương tự , nếu bạn cố đánh giá biểu thức:"1234" * "2"
Cả giá trị là được chuyển đổi thành integer trước khi dùng, và kết quả là integer 2468.
2.2.1 Datatypes and Literals
WMLScript có 5 kiểu dữ liệu: string, integer, floating-point number, Boolean, chỉ định kiểu không hợp lệ( invalid). Mọi giá trị trong WMLScript thuộc một trong những kiểu dữ liệu này, mặc dù hầu hết có thể chuyển đổi đến những kiểu khác. (Một literal là một hằng số rõ ràng bao gồm trong một code.)
2.2.1.1 Strings
Strings trong WMLScript có thể là chuỗi những kí tự Unicode. Chúng có thể kèm theo dấu nháy đơn hay đôi trong đoạn trích dẫn.WMLScript hỗ trợ việc chỉ định các ký tự đặc biệt trong strings như là dòng mới, đoạn trích dẫn, những ký tự mà không thể xem được source(như là ký tự trung quốc nếu file source của bạn là ASCII).
Table trình bày shows escape sequences đặc biệt, mà trình bày ký tự đặc biệt
Những ví dụ của chuỗi chữ bao gồm :
""
'foo'
"Hello, World!"
'String with embedded single \' and double " quotes'
"String with embedded single ' and double \" quotes"
'Price is \24317 (seventeen pounds)'
"Price is $17 (seventeen dollars)"
'To include a backslash, use \\'
2.2.1.2 Integers
Những giá trị Integer là đuợc lưu trữ 32-bit integer. Literal integers có thể được chỉ định trong bát phân, thập phân, hệ thập lục nhưng không làm ảnh hưởng chính số đó, integers luôn luôn hiện thị như thập phân khi được chuyển thành strings. Ví dụ của những chữ integer hợp lệ bao gồm:
17
42
0
0105
00007777
01232
0x00
0x2A
0x3e8
0x7fffffff
2.2.1.3 Booleans
WMLScript cung cấp giá trị Boolean, trình bày true hoặc false. Hai giá trị chữ hợp lệ Boolean là
true
false
Chú ý rằng những chữ này là phân biệt dạng chữ(case-sensitive.)
2.2.1.4 Số dấu chấm động (Floating-Point Numbers)
Giá trị chấm động Float trong WMLScript được lưu trữ trong IEEE , mà định dạng là 32-bit floating-point.Những số này cho phép gần bằng 3.4e+38 để lưu trữ.Sử dụng hàm thư viện Lang.float() để biểu diễn kiểu Float .Ví dụ dấu chấm động hợp lệ bao gồm :
.0
0.0
0E+0
0e23
0.44
1.0
10E6
10e-6
123.456e-7
.42e+23
Chú ý rằng 4 giá trị đầu tiên trình bày tất cả cùng giá trị 0
2.2.1.5 Invalid
Kiểu giá trị thứ 5 của WMLScript, invalid là điều mà bạn cần phải chu ý. Nó hỗ trợ hiển thị một giá trị đơn giản mà các kiểu khác không có. Ví dụ, biểu thức (1/2) cho giá trị dấu chấm động là 0.5. Biểu thức (1/0) không thể định giá (chia cho 0 là không hợp lệ), và kết quả là invalid. Tương tự hàm thư viện, cho tính căn bậc hai của một số trả về không hợp lệ khi cho số âm. Nếu được yêu cầu, có thể tham khảo một giá trị chữ invalid như sau:
Invalid
Gán invalid == invalid là chưa bao giờ true, ngay cả đây có thể một chữ không quen biết hay thậm chí sai. Trong thực tế, kết quả biểu thức liền trước cũng là invalid. Hầu như tất cả thao tác trong WMLScript cho một kết quả invalid nếu bất kì những đối số của chúng là invalid.
Ví dụ :
1 + (1/0)
(1/0) == (-1/0)
1/(1/0)
2.2.2 Variables
WMLScript chỉ cung cấp biến cục bộ và truy xuất đến biến WML (luôn luôn là giá trị string) Không có biến toàn ,một biến WMLScript có thể lấy một giá trị bất kì của 5 kiểu dữ liệu, bao gồm invalid. Biến được khai báo với cú pháp var. Biến có thể được chỉ định cách nhau bởi dấu phẩy như là :
var foo;
var x, y, z;
var a, b, c, d, e, f, g, h, i, j;
Biến phải khai báo trước khi dùng, ví dụ sau là không đúng:
function foo ( )
{
wibble = 2;
var wibble;
}
Tất cả những biến được khởi tạo hoàn toàn từ chuỗi empty, "". Nếu giá trị nào đó là một số bắt buộc thì khai báo như sau:
var foo = 17, bar = 42;
hay
var foo, bar;
foo = 17;
bar = 42;
Biến sẽ được đọc ra đầu tiên trong trình duyệt. Ví dụ 2.1 cập nhập lại giá trị mới cho biến.
Example 2.1. Outline of a Function Called from WML
extern function called_from_wml ( )
{
/* First read variables from browser context.
* These could also be passed in as function arguments.
*/
var username = WMLBrowser.getVar ("username");
var password = WMLBrowser.getVar ("password");
/* Next, process those variables. */
username = validate_username (username);
password = validate_password (password);
/* Write back new values. */
WMLBrowser.setVar ("username", username);
WMLBrowser.setVar ("password", password);
/* Finally, a refresh task. */
WMLBrowser.refresh ( );
}
** Phạm vi biến (Variable Scope)
Chỉ khai báo một lần một biến trong phạm vi một hàm. Ví dụ:
function foo (x)
{
if (x) { var y = 42; }
return y;
}
Phạm vi biến y: từ lúc y được khai báo cuối hàm (function), vì vậy cú pháp return là valid. Nếu x là false thì var y = 42 chưa bao giờ được thi hành. Tuy nhiên, khởi tạo y sau đó đặt giá trị 42 vào thì biến y thật sự thi hành.Thật vậy, hàm này chạy khi nó được viết như sau:
function foo (x)
{
var y;
if (x) { y = 42; }
return y;
}
2.2.2 Variable Names
Tên biến hợp lệ trong WMLScript chỉ chứa mẫu tự hay chữ, con số và đường gạch dưới từ ngữ . Ký tự đầu tiên không thế là 1 con số; nó phải là một chữ hay đường gạch dưới.Ví dụ, từ khoá như for, function
và var là tất cả không hợp lệ là tên biến. Những từ sau là tất cả từ khoá:
Sau đây là tất cả ví dụ của tên biến hợp lệ:
x
foo
___name_with_underscores__ _
ThisVariableNameIsImpracticalBecauseItIsTooLong
xy17
_0
Sau đây là ví dụ của những tên biến không hợp lệ:
17xy
(starts with a digit)
name with spaces
(space isn't a letter, digit, or underscore)
while
(is a keyword)
switch
(is a reserved word)
2.2.3 Quá trình chuyển đổi kiểu (Type Conversion )
Những thao tác WMLScript chuyển đổi toán hạng đúng yêu cầu. Ví dụ, thao tác * cho phép nhân có thể đem lại kết quả integers hay floating points, cho nên toán hạng đầu tiên phải được chuyển thành một trong những kiểu này.Nếu một đối số không thể được chuyển, kết quả là invalid.
2.2.3.1 Quá trình chuyển đổi thành String(Conversion to String )
• Integers chuyển đổi thành một string . Ví dụ, integer 1234 chuyển thành string "1234", và integer -42 chuyển thành string "-42".
• Floating-point numbers (số dấu chấm động) chuyển thành một string.Ví dụ, số dấu chấm động (floating-point number ) 0.2 có thể chuyển thành bất kì strings "0.2", "2e-1", ".2", "0.2e+0", và v.v.v...
• Boolean true là được chuyển thành string "true", và Boolean false là được chuyển thành string "false".
• invalid không thể chuyển thành một string.
2.2.3.2 Quá trình chuyển đổi thành Integer (Conversion to Integer )
•Một string chuyển thành integer.Ví dụ strings "1234" và cả "+1234" chuyển đổi thành integer 1234, nhưng string "1234x" không thể được chuyển
• Kiểu dấu chấm động không chuyển đổi thành một integer.
• Boolean true chuyển thành 1, và Boolean false chuyển thành 0.
• invalid không thể chuyển thành một integer.
2.2.3.3 Quá trìnhh chuyển đổi thành số dấu chấm động (Conversion to Floating-Point Number )
•Một chuỗi string chứa một số chấm động (floating-point of a number) thì chuyển thành số đó. Không có strings nào khác có thể được chuyển. Ví dụ, string "5.0e-1" chuyển thành số dấu chấm động là 0.5; string "5.0x" không thể chuyển được
•Nếu quá trình chuyển kết quả của một số lớn hơn hiển thị định dạng trong dấu chấm động thì chuyển đổi thất bại (vì kết quả là invalid).
• Nếu chuyển đổi kết quả trong dấu chậm động thiếu thì kết quả là lấy 0.0.Ví dụ, string "1e999" không thể chuyển và string "1e- 999" chuyển thành 0.0.
• Integers được chuyển thành tương ứng là giá trị kiểu dấu chấm động (floating-point).
• Boolean true là chuyển thành dấu chấm động (floating-point) 1.0, Boolean false là chuyển thành dấu chấm động ( floating-point )0.0.
• invalid không thể chuyển thành một số dấu chấm động (floating-point number.)
2.2.3.4 Quá trình chuyển thành Boolean (Conversion to Boolean )
• Chuỗi empty là được chuyển thành false. Tất cả chuỗi khác là chuyển thành true. Có nghĩa là "" thành false, nhưng "false" chuyển thành true!
• Integer 0 là được chuyển thành false.Tất cả integers khác được chuyển thành true.
• Floating-point 0.0 là được chuyển thành false. Tất cả giá trị chấm động khác thì được chuyển thành true.
• invalid không thể chuyển thành một giá trị Boolean
Chia sẻ với bạn bè của bạn: