Mình biết rồi, nhưng ở đây là If Hook nên mới siêu!
Bạn có 3 cách viết:
1.
a = Hook
if a then
2. if Hook = TRUE then
3. if Hook then
------------
Bạn biết gì về cấu trúc: IF đk THEN?
đk là biểu thức trả về giá trị lôgíc - boolean.
Khi gặp cấu trúc IF đk ... thì trước tiên biểu thức đk được tính giá trị, sau đó tùy giá trị thế nào mà thực hiện code.
Ta có các biến lôgíc, các hàm trả về giá trị lôgíc ... Chúng được kết nối với nhau bởi OR, AND, và >, <, >=, <=, = (với 2 vế không nhất thiết là các giá trị lôgíc).
Với a, b, HamGiDo(...) as boolean, c, d as Long thì:
TRUE, FALSE, a, b, HamGiDo, (a or b), (a or b) and HamGiDo, c = d, (c = d) and b, c >=<= d v...v đều là biểu thức.
Có thể nói TRUE, FALSE, a, b, HamGiDo là những biểu thức đơn.
Với IF HamGiDo THEN thì cũng như mọi khi thôi, tức trước tiên cần tính giá trị của "biểu thức" HamGiDo. Việc tính giá trị của biểu thức HamGiDo là việc xác định giá trị trả về bởi HàmGiDo, tức code của HamGiDo phải được thực hiện và giá trị trả về sau khi thực hiện code là giá trị của biểu thức.
Hàm Hook sau khi thực thi thì trả về giá trị Boolean cũng chính là giá trị của biểu thức điều kiện, thế thôi.
Khi bạn tính biểu thức trong đó có sin(x) (Riêng sin(x) cũng là biểu thức rồi) thì bạn "bấm" máy tính tay (tức thực hiện code tính sin): x --> sin, còn khi máy nó gặp HamGiDo thì nó "thực hiện code" của HamGiDo và có kết quả do hàm trả về.
Kiểu viết 2 và 3 như trên kết quả là như nhau nhưng thực hiện có sự khác nhau đấy nhé.
Ta tính giá trị của biểu thức (a = b), a và b có thể có dạng tổng quát vd. a = x + y, b = k + l + m + n
Việc tính được giá trị của a hay b vẫn chưa xong. Giá trị của biểu thức (a = b) được tính như sau:
1. tính a
2. tính b
3. tính a = b (so sánh)
Với a, b as boolean tương tự. Tính được a hay b TRUE hay FALSE vẫn chưa kết luận được gì về giá trị của biểu thức a = b. a có thể = FALSE, b = FALSE nhưng a = b = TRUE.
Với IF Hook then thì có được giá trị trả về của Hook cũng chính là giá trị của đk thì việc xác định đk kết thúc.
Với IF Hook = TRUE then thì dù có được giá trị do Hook trả về thì giá trị của đk vẫn chưa được xác định. Phải thực hiện phép so sánh Hook
= TRUE mới có được giá trị của đk.
------------
Cũng nên nhớ là nếu bạn có hàm Hichic và bạn viết: call Hichic (Hichic) thì có nghĩa là: code của Hichic được thực hiện nhưng kết quả trả về không dùng làm gì cả, không được lưu ở đâu cả.
Nhưng khi bạn có:
a = Hichic
b = 5 + Hichic
IF Hichic > a + sin(xyz) THEN
....
Thì không chỉ là code của Hichic được thực thi mà giá trị do nó trả về còn dùng cho các tính toán tiếp theo.
Vì vậy với cùng một hàm Hichic thì "chỗ này" bạn cần giá trị do hàm trả về thì bạn viết: a = Hichic, nhưng ở "chỗ khác" bạn không cần giá trị trả về mà chỉ cần thực thi code thôi (hàm không chỉ trả về giá trị mà hàm có thể làm nhiều việc trong code) thì bạn viết: call Hichic. Bạn có thể viết a = Hichic nếu muốn nhưng không bắt buộc.