C risiu s= 70, Fahrenhei t= 94 eUtus = 6 0 F a h re n h e it« 7
50 Chướng 2: Học những điểm cơ bản về JavaScript
(nested loop) - các n h ã n hiếm khi được sử dụng trong thực tế, mặc dù b iế t chúng h iện hữu là điều quan trọng.
Tạo các n h ã n thì k h á dễ dàng
1. Mở chương trin h JavaS cript sử dụng một bộ bièn tậ p texc, chẳng h ạ n n h ư N otepad.
2. C họn dịng m ã m à bạn muốn đ ặt tên. Các n h ãn p h ải xuất hiện ỏ đầu m ột câu lện h hợp lệ.
3. Gõ n h ậ p m ột tê n n hãn, sử dụng chỉ các ký tự hoặc số. Khơng cho phép các k h oảng trống hoặc những ký tự đặc biệt khác trong tên. 4. K ết thúc n h ã n b ằn g một dấu hai chấm (:).
Ví dụ, tro n g m ã sau đây chúng ta cĩ một tập hợp vịng lặp xếp lồng cũng được tạo n h ãn .
var X, y, z;
outer: for (x = 1 ; X < 20; X++) {
miđle: for (y = 1; y <= x; y++) {
innet: for (z = 1; z <= y; Z++) { document.write ("X = “ + X + "; y = " + y + "z = " + z + "<br>"); } } }
Trong m ã này, chúng ta cĩ ba vịng lặp. Vịng lặp tậ n bên trong tác động lên biến z, được tạo n h ãn là "inner". Vịng lặp giữa bao bọc vịng lặp cĩ tên là "inner", được gọi là "miđle". Và vịng lặp tậ n bên ngồi được đ ặ t tê n là "outer" và bao bọc cả vịng lặp giữa và vịng lặp trong.
Lý do duy n h ấ t để tạo nhãn một vịng lặp là vì các câu lệnh b r e a k và
c o n tin u e được t h iế t k ế để làm việc với các nhãn. B ằn g cách th êm m ã sau đây ngay sau lện h gọi hàm document.Write bên tro n g vịng lặp tận bên trong, b ạ n cĩ th ể kh iến cho tấ t cả ba vịng lặp th o á t sớm:
Chướng 2: Hoc những đ;ể n r.ơ b?n /6 Jiv a S c rp t 51
Điều này tiện lợi khi bạn cĩ một điều kiện bên tro n g m ột vịng lặp tro n g (tuy nhiên, khơng n h ấ t th iế t phải là vịng lặp tậ n bên trong) làm cho bạn muốn dừng xử lý tấ t cả vịng lặp hoặc th ậ m chí chỉ dừng xử lý h ai vịng lặp tậ n bên trong và tiếp tục với vịng lặp ngồị Ví dụ, m ã sau đây được đ ặ t bên trong vịng lặp tậ n bên trong tro n g m ã trước k h iế n cho
các biến V và z khơng bao giờ vượt qua giá trị 1 trong khi X được phép
tă n g lên 20:
break miđle;
G hi comment cho mã
Chương 1 đã nĩi sơ lược về các commọnt. Các com m ent khơng thực sự là m ột loại câu lệnh, mặc dù nĩ thường được gộp chung với nhữ ng câu lện h Ja v a S c rip t khác vì mục đích tiện lợị Cĩ h ai cách để th êm các com m ent bên trong m ột chương trìn h JavaScript.
B ạn cĩ th ể thêm m ột dịng comment bằng cách b ắ t đầu các com m ent b àn g h ai đấu gạch chéo (/').
// Evervthing after the slashes wil< be ignored by JavaScript
Cũng cĩ th ể đính kèm các comment theo m ã hợp lệ trê n cùng m ột dỏng.
var Students = 3; // There will be three students in the class
Một cách khác để tạo comment cho mả là b ằn g các block com m ent. Các block com m ent b ắt đầu với một dấu gạch chéo và m ột dấu sao (/*).
/* This is the start of block comments
Các block commơnt tièp tục cho đến khi gặp p h ải m ột d ấu sao và dấu gạch chéo (*/), th ậ m chí nếu các coiĩiment mỏr rộ n g lê n tr ê n m ộ t dịng.
/* Tliis is the start oí biock comments Even this WÍII be ignored
document.write (’This wiil not be executed either!'); Because it is still considered a comment 7
Khi bạn tự p h á t triể n các chương trìn h Ja v a S c rip t nhỏ, cĩ th ể bạn khơng muơn d àn h nhiều thời gian viết comment cho m ã của m ình. Điều đĩ tốt. Tuy nhiên, bạn cĩ th ể thấy rằng các com m ent hữu dụng vì những lý do sau đây:
■ B ạn cĩ th ể đính kèm m ột thơng báo bản quỵền vớ i chương trìnb.
■ B ạn cĩ tb ểm ơ tả m ột chương trình boặc hàm cĩ chức nđng g ì bằng "tiếng A nh đơn g iả n
52 Chương 2: Học những điểm cơ bản về JavaScript
■ Trong g ừ ỉi đoạn p h á t triển hoặc kh i gỡ rối, đ ơ i k h i bạn m uốn m ã khơng thực th i nhưng bạn khơng m uốn xĩa nĩ.
M Các com m ent cũng cĩ th ể là câc placeholder cho nuỉ m à bạ 12 m uốn thêm m ột thời điểm nào đĩ trong tiỉơng iaị
Nếu b ạn muốn tạo các chương trìn h một cách chuyên nghiệp, cĩ th ể bạn được yêu cầu đưa vào một lượng lớn com m ent để làm cho những người khác dễ hiểu m ã của bạn hơn.
Xác lập một đơi tượng mặc định
Để hiểu những k h ái niệm về các đối tượng trong lập trìn h , việc đưa m ột sự tương đồng sang th ê giới thực là điều hữu ích. Hầu như b ấ t cư những gì trong thực t ế đều cĩ th ể được xem là m ột đối tượng cĩ th ể lập trìn h - m ột xe hơi, m ột m áy truyền hình, m ột tách cà phê, hoặc th ậm chí m ột ngườị Trong lập trìn h , các đối tượng cĩ th ể cĩ các phương thức (m ethod) và các thuộc tín h (property). Các phương thức của m ột đối tượng là những h à n h động m à nĩ cĩ th ể thực hiện tro n g khi những thuộc tín h của m ột đối tượng mơ tả đối tượng đĩ.
Ví dụ, chúng ta tạo m ột đối tượng Person trong Jav aS crip t. Trong th ế giới thực, m ột người thường cĩ các đặc điểm đã ấ n đ ịn h chẳng h ạn như m ột tên, m àu tĩc, màu m ắt và chiều caọ Những thuộc tín h này được định nghĩa là các thuộc tín h của đối tượng Person. T rong thực tế, m ột người cĩ th ể thực hiện các h àn h động chẳng hạn như ăn, ngủ, nĩi chuyện, và nghẹ Những h à n h động này biên dịch th à n h những phương thức của đối tượng Person.
Câu lệnh with
Câu lệnh w ith cho phép bạn truy cập các phương thức và thuộc tín h của m ột đơì tượng m à khơng cần phải xác định tên của đối tượng trê n mọi dịng. Nếu khơng cĩ câu lệnh w ith, bạn sẽ luơn cần xác định tê n của đối tượng m à bạn đang làm việc k ế bên mọi thuộc tín h và phương thức m à bạn muơn truy cập:
person.fullname = "Bob Jones“ ; person.haircolor = "Black"; person.eat 0 ;
person.sleep 0 ;
N hưng khi các câu lện h được bao bọc bằng câu lệ n h w ith, tê n đối tượng được ám chỉ như sau:
with (person) {
fullname = "Bob Jones”; haircolor = “Black"; eat 0 ;
Chương 2: Học những điểm cơ bản về JavaScript 53
sleep v) , }
Khi Ja v a S c rip t đầu tiê n gặp phải th a m chiếu d ẫn đến fullnam e bên trong câu lệnh w ith , trước tiên nĩ s ẽ kiểm tra xem liệu m ột biến c ĩ tên là fullname cĩ hiện hữu hay khơng. Nếu khơng, nĩ sẽ kiểm tra xem liệu đối tương person cĩ mơt thuộc tín h được gọi là fullnam e hay khơng. Như bạn cĩ th ế th ấy , khi bạn cần truy cập cùng m ột đối tượng liên tục trèn nhiều dịng, bao bọc mã trong một câu lệnh w ith cĩ th ể hợp lý.
Câu lệnh w ith cĩ th ể là một câu lệnh tiện lợi để n h à lập trìn h sử dụng - b ấ t cứ những gì tiết kiệm thời gian gõ nhập th ì tiện lợị Nhưng một số n h à p h á t triển cảm thây việc sử dụng câu lệnh w ith cũng làm cho chương trìn h hơi khĩ đọc hơn. Với kỹ th u ậ t copy (sao chép) và paste (dán) tro n g hầu h ết các bộ biên tập text, cĩ thế khơng cĩ nhiều lý do ban cẩn sư dụng câu lệnh này trong các chương trìn h .
with (document) {
write("99 botties ot beer on the walkbr>');
write( 99 bottles of beer<br>“);
w riteflf one of the bottles happens to falkbr>“);
write( '98 bottles of beer on the walkbrxbr>'');
w rito(“08 bcttlis of bcer 0!1 fie w ilkb ¡> '';
w rite('98 bottles of beer<br>’ );
w .ití.("lf ene 0.' tiie ịcítlos happđn.ì tJ ,alkbr> );
write(“97 bcttles of beer on the w alkb rxb rV )-
j
Trong m ã trên , chúng ta bắt đầu bằng việc khai báo rằ n g chúng ta muơn các tà i liệu là địi tượng mãc đinh (defauỉt) Chú ý cách sau đĩ chúng ta cĩ th ể b ắt đầu sử dụng phương thức write() m à khơng tham chiếu đến tà i liệu gì cả.
• • • • • • •
Thủ thuật
Đấi tượng mặc định được xác lập sử dụng câu lệnh with áp dụng chỉ cho mã bên trong các dấu ngoặc cong. Bên ngồi các dấu ngoặc cong, dấỉ tượng sẽ cần được sử dụng một cách tường minh một lần nữạ
Xử lý các lỗi
Cĩ lẽ th ách thức lập trìn h khĩ n h ấ t mà hầu h ế t các n h à lập trìn h đối m ặt thường xuyên là xử lý các lỗi một cách thơng m inh. Trong lập trìn h
54 Chướng 2: Học những điểm cơ bản về JavaScript
JavaS cript, m ột lỗi (error) là m ột sự cố mà trìn h duyệt gặp phải khi nĩ cố chạy một chương trìn h . Các lỗi cĩ th ể được kích khởi bằng một th ứ gì đĩ m à trìn h duyệt đã th ấy và khơng thích, được gọi là một lỗi hệ thống (system error). Hoặc nĩ cĩ th ể được kích khởi bởi m ột th ứ gì đĩ mà chương trìn h đã th ấ y và khơng thích, được gọi là một lỗi ứng dụng (application error).
Một chương trìn h Jav aS crip t cĩ th ể dễ dàng tă n g gấp đơi kích cỡ với việc th êm m ột lượng m ã xử lý lỗi hợp lý. Mã xử lý lỗi thường là m ã thêm vào và n h à lập trìn h phải viết để kiểm tr a nhằm tìm sự hiện hữu của các lỗi và làm m ột điều gì đĩ với chúng. Trong Jav aS crip t, nếu chương trìn h khơng chứa m ã xử lý lỗi, h à n h động mặc định thường là trìn h duyệt trìn h bày sư cố cho người dùng.
Vấn đề với việc xử lý lỗi là tạo m ã xử lý lỗi tố t thường m ất nhiều cơng việc (hoặc nhiều hơn) bằng với thời gian để tạo p h ần cịn lại của chương trìn h . Do đĩ, vì những lý do khác nhau, các n h à lập trìn h thường xuyên bỏ qua bước nàỵ
Viết một chương trìn h (bằng b ất kỳ ngơn ngữ) mà khơng cĩ b ất kỳ mã xử lý lỗi thì quá dễ dàng. Bạn cĩ th ể u cầu máy tín h đi đến cơ sở dữ liệu, đọc một số giá trị, đề nghị người dùng nhập một số dữ liệu, thêm dữ liệu của người dùng vào dữ liệu hiện cĩ, và đ ặt nĩ trở lại vào cơ sở dữ liệụ Điều đĩ cĩ th ể được thực hiện trong một ngơn ngữ lập trìn h chẳng hạn như Visual Basic trong khoảng 30 dịng mã. Nhưng điều đĩ giả định khơng cĩ gì cĩ th ể trục trặc. Nếu bạn nghĩ về nĩ, nhiều th ứ cĩ th ể bị trục trặc:
B Cơ SỜ dữ liệu khơng cĩ sẵn.
B Cơ SỜ d ữ liệu cĩ sẵn nhưng bạn khơng th ể đăng nhập.
R b ạ n cĩ ih ể đăng nhập vào cơ sở dữ liộii nhung d ữ liệu khơng cĩ sẩn. B Dứ liệu mà bạn tray tìm từ cơ sở dứ liệu chứa các giá trị kbơng hợp
lệ.
B Người dùng nhập các giá trị khơng bợp lệ.
u Thêm d ữ liệu của người dũng vào d ữ liệu cơ sở d ữ liệu gây ra một lỗị
B B ạn khơng tbể lĩũi d ữ liệu trở lại sang cơ sở d ữ liệụ
Do đĩ vào lúc bạn thêm mã vào chương trìn h để xử lý t ấ t cả lỗi đĩ, đột nhiên bạn đang xem m ột chương trìn h 120 dịng, th ay vì m ột chương trìn h 30 dịng. Vậy là bạn thấy, trá n h lo lắng về những th ứ n ày thì chắc chắn dễ dàng hơn.
Nhưng khi bạn viết các chương trìn h một cách chuyên nghiệp, bạn phải quan tâm về cách các lỗi được xử lý như th ế nàọ Chương trìn h cĩ bị đổ vỡ khi người dùng gõ nhập sai dữ liệu hay khơng? Hoặc bạn cĩ nên tiếp tục ghi dữ liệu kém vào cơ sở dữ liệu, gây ra các lỗi lầ n k ế tiếp
Chương 2: Học những điểm cơ bản vé JavaScript 55
chương trìn h chạy hay Khcng? Hoặc báo cho người dùng biết sai sĩt của họ và đề nghị họ thử lai cĩ phải là giải pháp tố t n h ấ t hay khơng? Đây là lý do tại sao các lỗi chảng hạn như những lỗi sau cần được đĩn b ắt và được xử lý đúng cách.
Câu lệnh try-catch
Các trìn h duyệt web được th iế t k ế để xử lý các lỗi m ột cách khác nhau ph J thuộc vào loại và phién ban trìn h duyệt, và ờ mức độ nào đỡ trê n các xác lập trìn h duyệt của người dùng. Trong m ột số trường hợp, nếu bạn đưa vào m ột số mã JavaS cript kém bên trong m ột tra n g Web, trìn h duyệt đơn giản khơng chạy nĩ, khơng cĩ thơng báo lỗi hoặc sự chỉ báo khác rằ n g m ột trục trặc nào đĩ đã xảy rạ Trong những trường hợp khác, trìn h duyệt mỏ ra m ột hộp thơng báo với các chi tiế t về lỗi m à nĩ gặp phải và hỏi những người dùng những gì cần làm tiếp theọ Thơng báo lỗi Jav a S c rip t trơng tương tự như saụ
Internet Explorer
Đơi với các n h à p h á t triển JavaScript, cả hai phương thức xử ỉý lỗi mặc định là khơng lý tưởng việc bỏ ợua một lỗi h o à r tồn sẽ npăn chương trìn h thực thị Và hiển th ị một thơng báo lỗi xấu xí cho người dùng cĩ th ể gây bối rối nho nhà lận trìnb - chứ chưa đề cập đến việc ]Arr cho người dùng th ấ t vọng.
C ĩ một sẾ điểm khác tiệ t nhỏ qiữa cĩc cách Netscape vị Microsoft sử dgnq câu lệnh nàq và nliữn.Ị qì mị tkơiKj i ố Ê C M A chính thức địnli nqliTạ Tronq phdn
này, bgn sử dgng câu lệnli như được li6 ỈPỢ bỏi hđu \ìếi các tpìnli duL)ệt web.
Câu lện h tr y -ca tc h được sử dụng để cho phép các chương trìn h tự xử
lý lỗi th ay vì cho phép trìn h duyệt làm điều nàỵ Nĩ thường được sử dụng để bao bọc m ột câu lệnh hoặc tập hợp câu lệnh mà cĩ k h ả năng bị th ấ t bạị Câu lện h cĩ cú pháp sau đây:
try {