-
Giờ hãy nói về thứ mà ta đã dùng
-
trong toàn bộ thời gian này: Hàm.
-
Bất cứ khi nào bạn đã sử dụng các lệnh như rect() hoặc fill() hoặc text(),
-
ta đã gọi các hàm và hàm đó vẽ nên
-
những gì ta bảo chúng làm.
-
Một hàm thực sự là gì?
-
Đó là một bộ code mà ta nhóm lại với nhau
-
và được đặt tên bởi ta muốn
-
dùng hàm đó nhiều lần.
-
Hãy nghĩ về rect()? Hàm rect() làm gì?
-
Nó chỉ vẽ bốn dòng thôi, phải không?
-
Ta chỉ có thể làm điều đó bằng cách dùng hàm line(), phải không?
-
Và ở đây ta thứ trông giống hình chữ nhật.
-
Nhưng ta nhận ra rằng ta muốn
-
vẽ một hình chữ nhật rất nhiều lần,
-
và nó sẽ thực sự phiền toái
-
khi phải làm toán mỗi lần để thử và tìm ra
-
cách vẽ một đường từ góc này sang góc khác
-
và tiếp nữa, tiếp nữa.
-
Vì vậy, thay vào đó, ta chỉ cần hàm rect() thôi,
-
và hàm đó thực hiện chính xác điều tương tự như
-
4 dòng code đó đã làm, nhưng code thì ít hơn nhiều.
-
Vì vậy, nó thật tuyệt, và rect() là một trong những hàm đó,
-
ta đã có sẵn cho TẤT CẢ các chương trình
-
để dùng ở đây, trên Khan Academy.
-
Nhưng bạn cũng có thể tạo nên các hàm của riêng mình
-
để dùng trong các chương trình của mình.
-
Giả sử ta đang viết một chương trình
-
và ta muốn vẽ Winston nhiều lần -
-
có lẽ bởi ta sẽ kể chuyện đời của Winston
-
và thể hiện anh ấy ở mọi lứa tuổi trong đời.
-
Vì vậy, đây là code vẽ Winston, ta có thể bắt đầu như sau:
-
Ta có các biến 'faceX' và 'faceY'
-
để lưu tâm điểm của khuôn mặt,
-
và rồi ta vẽ mắt và miệng
-
tương ứng với các biến đó.
-
Ngay bây giờ chương trình đã thấy code,
-
và nó không nằm trong bất kỳ hàm nào cả, vì vậy nó chỉ chạy bình thường,
-
và nó chỉ chạy một lần mà thôi.
-
OK, hãy biến nó thành một hàm.
-
Để làm được điều đó, ta làm nó như cách
-
khai báo một biến, vì đó thực sự là
-
những gì ta làm.
-
Vì vậy, ta gõ 'var drawWinston'.
-
Ta đặt cho nó một cái tên đẹp, rất gợi tả,
-
và sau đó là dấu '=', nhưng ở đây, thay vì viết một số hoặc một chuỗi,
-
ta sẽ viết 'hàm' (chắc chắn bạn đánh vần đúng nhé)
-
và sau đó là dấu ngoặc đơn rỗng '()' và sau đó là một dấu ngoặc nhọn '{'
-
và sau đó là dấu ngoặc nhọn nữa '}' và dấu chấm phẩy ';'
-
OK, những gì ta cần làm là đặt mọi thứ
-
ta muốn bên trong hàm ở giữa ngoặc nhọn bắt đầu '{' và kết thúc '}'.
-
Vì vậy, ta sẽ lấy tất cả code ở chỗ này,
-
đặt vào trong hàm (thụt lề cho đẹp) và Ta Da!
-
Như vậy, giờ ta có biến này
-
để lưu một hàm - vì vậy về cơ bản ta đã đưa ra
-
một nhãn cho khối code này, để ta có thể gọi
-
nó bất cứ lúc nào,
-
"Này, hãy tìm khối code có nhãn đó và chạy nó!"
-
Ta đã khiến cho đoạn code này có thể tái sử dụng.
-
Nhưng giờ đây để ý rằng ta không còn Winston nữa!
-
Ta đã mất Winston rồi! Anh ấy đã đi đâu nhỉ?
-
OK - Những gì xảy ra là khi ta đặt cái này vào trong một hàm,
-
ta nói với chương trình rằng "đây là một loạt các code
-
mà anh muốn chạy sau này,
-
nhưng chỉ khi anh bảo chú chạy thôi nhé"
-
Vì vậy, ta phải bảo nó chạy code, có nghĩa là ta cần
-
'gọi' hàm - giống như ta làm với ellipse() và rect() và line().
-
Vì vậy, ta chỉ cần viết tên hàm ('drawWinston')
-
theo sau là dấu ngoặc đơn bắt đầu và kết thúc '()'
-
và, tất nhiên, dấu chấm phẩy và Ta Đa -
-
Ta đã có lại Winston rồi!
-
OK! Như vậy, tôi nghĩ rằng nó ngon đấy, nhưng bạn có thể thấy nó chưa ổn
-
bởi tất cả những gì ta vừa làm là khiến máy tính thực hiện chính xác
-
những gì nó đã làm trước đó. Nghe có vẻ ngớ ngẩn nhỉ?
-
Toàn bộ ưu điểm của hàm là ta có thể tái sử dụng chúng.
-
Như vậy, hãy làm ngay bây giờ thôi.
-
Ta chỉ có thể copy và paste hàm tên là "ta da!" "ta da!" thêm lần nữa và thêm lần nữa
-
Hmmm, nhưng nó trông giống nhau - - ngon - nó đã hoạt động -
-
và đang vẽ nhiều Winstons, nhưng vấn đề là
-
tất cả đều ở cùng một chỗ
-
Nếu ta có tia X, ta có thể chụp X-quang
-
và thấy ba Winstons, nhưng tôi không có tia X.
-
(Tôi không biết bạn có không).
-
Nhưng, ta có thể thay đổi một chút trong hàm
-
Để khiến nó rõ ràng hơn.
-
Như vậy, bạn thấy faceX và faceY - luôn luôn là 202 và 208?
-
Ta có thể thay đổi nó bằng hàm random() -
-
- hãy gõ random() từ 50 đến 350 và nó sẽ tạo ra
-
một số ngẫu nhiên trong khoảng đó - và ta có thể làm điều tương tự ở đây -
-
và như vậy mỗi khi hàm này được gọi, nó sẽ tạo ra số ngẫu nhiên mới,
-
và nếu khởi động lại, ta có thể có được các Winstons xuất hiện ngẫu nhiên.
-
Thật tuyệt! Whoo!!
-
Được rồi - như vậy tôi nghĩ ngon rồi đáy vì nó sẽ
-
tốn khá nhiều code để viết cái này nếu ta không gói trong một hàm.
-
Nó sẽ phải code gấp 3 lần.
-
Nhưng nó vẫn không hữu dụng cho lắm,
-
bởi vì có lẽ ta không muốn Winstons xuất hiện ngẫu nhiên.
-
Ta muốn có thể xác định vị trí cho Winston
-
tại các điểm cụ thể trên màn hình.
-
Vì vậy, hãy theo dõi, vì ta sẽ nói về cách truyền các tham số
-
để các hàm sau đây có thể
-
để làm chính xác điều đó.