nghĩ r ng nó không nh h
ng gì đ n ch
ng trình, và lúc có nh h
ng thì đó s là bài h c cho b n.
ằ
ả
ưở
ế
ươ
ả
ưở
ẽ
ọ
ạ
D.3 L i logic
ỗ
CH
NG TRÌNH TÔI VI T RA KHÔNG HO T Đ NG ĐÚNG.
ƯƠ
Ế
Ạ
Ộ
L i logic r t khó tìm, vì trình biên d ch và h th ng lúc th c thi không cung c p thông tin gì v s tr c
ỗ
ấ
ị
ệ ố
ự
ấ
ề ự ụ
tr c. Ch có b n m i bi t r ng ch
ng trinh c n ph i th c hi n đi u gì.
ặ
ỉ
ạ
ớ
ế ằ
ươ
ầ
ả
ự
ệ
ề
B
c đ u tiên là t o l p m t k t n i gi a n i dung ch
ng trình và bi u hi n mà b n quan sát đ
c.
ướ ầ
ạ ậ
ộ ế ố
ữ
ộ
ươ
ể
ệ
ạ
ượ
B n c n gi thi t v đi u th t s mà ch
ng trình đang th c hi n.
ạ ầ
ả
ế ề ề
ậ ự
ươ
ự
ệ B n c n t h i mình nh ng đi u sau:
ạ ầ ự ỏ
ữ
ề
•
Có đi u gì mà ch
ng trình c n ph i làm nh ng d
ng nh nó không làm hay không? Hãy tìm ra đo n
ề
ươ
ầ
ả
ư
ườ
ư
ạ
mã l nh th c hi n tính năng đó và ch c r ng nó đ
c th c thi khi b n nghĩ r ng l ra nó ph i ch y.
ệ
ự
ệ
ắ ằ
ượ
ự
ạ
ằ
ẽ
ả
ạ
•
Có đi u gì đang di n ra mà l ra không nên có nó? Hãy tìm đo n mã trong ch
ng trình mà th c hi n
ề
ễ
ẽ
ạ
ươ
ự
ệ
tính năng đó r i xem li u nó có đ
c th c khi trong khi đáng l thì không.
ồ
ệ
ượ
ự
ẽ
•
Có đo n mã nào t o ra m t hi u ng mà không nh b n mong đ i không? Hãy ch c r ng b n hi u đ
c
ạ
ạ
ộ
ệ ứ
ư ạ
ợ
ắ ằ
ạ
ể
ượ
đo n mã nghi v n, đ c bi t khi nó liên quan đ n vi c kích ho t ph
ng th c Java. Hãy đ c tài li u v
ạ
ấ
ặ
ệ
ế
ệ
ạ
ươ
ứ
ọ
ệ
ề
nh ng ph
ng th c, r i th b ng nh ng tr
ng h p ki m tra đ n gi n. Có khi chúng l i không làm vi c
ữ
ươ
ứ
ồ
ử ằ
ữ
ườ
ợ
ể
ơ
ả
ạ
ệ
mà b n nghĩ r ng chúng s làm.
ạ
ằ
ẽ
Đ l p trình, b n ph i có m t mô hình t
ng t
ng v cách th c ho t đ ng c a ch
ng trình. N u b n
ể ậ
ạ
ả
ộ
ưở
ượ
ề
ứ
ạ ộ
ủ
ươ
ế
ạ
vi t m t ch
ng trình mà không th c hi n đúng vi c b n mong đ i, thì th
ng là v n đ không n m
ế
ộ
ươ
ự
ệ
ệ ạ
ợ
ườ
ấ
ề
ằ ở
ch
ng trình; nó n m mô hình t
ng t
ng c a b n.
ươ
ằ ở
ưở
ượ
ủ
ạ
Cách t t nh t đ s a mô hình t
ng t
ng cho đúng là chia ch
ng trình thành nh ng b ph n (th
ng
ố
ấ ể ử
ưở
ượ
ươ
ữ
ộ
ậ
ườ
là các l p và ph
ng th c) r i ki m tra ch y th t ng b ph n m t cách đ c l p. M t khi b n th y s
ớ
ươ
ứ
ồ
ể
ạ
ử ừ
ộ
ậ
ộ
ộ ậ
ộ
ạ
ấ ự
khác bi t gi a mô hình và th c t , b n s có th gi i quy t v n đ .
ệ
ữ
ự ế ạ ẽ
ể ả
ế ấ
ề
Sau đây là m t s l i logic thông th
ng c n ph i ki m tra:
ộ ố ỗ
ườ
ầ
ả
ể
•
Luôn nh r ng phép chia nguyên làm tròn xu ng. N u b n mu n c ph n th p phân, hãy dùng
ớ ằ
ố
ế
ạ
ố
ả
ầ
ậ
s
ố double.
•
S ph y đ ng ch là g n đúng, nên b n đ ng l thu c vào đ chính xác tuy t đ i.
ố
ẩ
ộ
ỉ
ầ
ạ
ừ
ệ
ộ
ộ
ệ ố
•
Nói chung, hãy dùng s nguyên cho nh ng th đ m đ
c và dùng s ph y đ ng cho th đo đ
c.
ố
ữ
ứ ế
ượ
ố
ẩ
ộ
ứ
ượ
•
N u b n dùng toán t gán (
ế
ạ
ử
=) thay vì toán t b ng (
ử ằ
==) trong đi u ki n c a m t l nh
ề
ệ ủ
ộ ệ if, while, ho c
ặ for,
b n có th s nh n m t bi u th c v m t cú pháp thì đúng nh ng v ng nghĩa thì sai.
ạ
ể ẽ
ậ
ộ
ể
ứ ề ặ
ư
ề
ữ
•
Khi b n áp d ng toán t b ng (
ạ
ụ
ử ằ
==) v i đ i t
ng, nó s ki m tra identity. N u b n có ý mu n ki m tra
ớ ố ượ
ẽ ể
ế
ạ
ố
ể
đ t
ng đ
ng, hãy dùng ph
ng th c
ộ ươ
ươ
ươ
ứ equals.
•
Đ i v i các ki u d li u do ng
i dùng đ nh nghĩa,
ố ớ
ể
ữ ệ
ườ
ị
equals s ki m tra identity. N u b n mu n m t kí
ẽ ể
ế
ạ
ố
ộ
hi u khác cho t
ng đ ng, b n ph i ghi đè lên nó.
ệ
ươ
ồ
ạ
ả
•
K th a có th d n đ n nh ng l i logic r t chi li, b i b n có th ch y mã l nh đ
c k th a mà không
ế ừ
ể ẫ
ế
ữ
ỗ
ấ
ở ạ
ể ạ
ệ
ượ ế ừ
nh n ra nó. Hãy xem m c “Lu ng th c thi” trên.
ậ
ụ
ồ
ự
ở
TÔI CÓ M T BI U TH C L N VÀ GAI GÓC MÀ CH NG HO T Đ NG THEO S MONG Đ I.
Ộ
Ể
Ứ
Ớ
Ẳ
Ạ
Ộ
Ự
Ợ
Vi c vi t nh ng bi u th c ph c t p cũng t t mi n là chúng d đ c, nh ng chúng có th làm vi c g l i
ệ
ế
ữ
ể
ứ
ứ ạ
ố
ễ
ễ ọ
ư
ể
ệ ỡ ỗ
g p khó khăn. Thông th
ng nên ch nh m t bi u th c thành m t lo t các l nh gán cho nh ng bi n
ặ
ườ
ẻ
ỏ ộ
ể
ứ
ộ
ạ
ệ
ữ
ế
t m th i.
ạ
ờ