Ta sẽ quay lại chương trình vẽ Winston, nhưng tôi đã thêm một số chữ vào đó.
Hãy xem, những gì ta muốn làm là đặt Winston bên dưới các nhãn này,
để thể hiện anh ấy ở mỗi thời điểm trong đời.
Lúc này anh ấy ở khắp mọi nơi. Đó là bởi ta đang gán
faceX và faceY cho các giá trị ngẫu nhiên bên trong hàm.
Ta muốn rằng "Đây là vị trí chính xác tôi muốn vẽ Winston"
Tôi muốn có thể chỉ định vị trí đó mỗi khi gọi hàm,
giống như cách ta làm với ellipse() và rect().
Tôi muốn đặt Winston ở đây, đây và Winston ở đây, và Winston ở đây nữa,
và tôi không muốn chỉ là những vị trí ngẫu nhiên mỗi khi gọi hàm.
Để làm điều đó, ta phải chỉ định "tham số" cho hàm,
cả trong định nghĩa hàm - ở trên cùng ở đây -
và trong lời gọi hàm, ở đây, khi ta thực sự gọi nó.
Đối với drawWinston(), ta truyền vào faceX và faceY,
và sử dụng những giá trị mà ta truyền vào thay vì tạo ra chúng một cách ngẫu nhiên.
Hãy suy nghĩ về những gì ta sẽ truyền vào các hàm gọi ở đưới đây.
Ta đặt Winstons dưới mỗi chữ, vì vậy ta có thể muốn x và y của mỗi
Winston tương ứng với các giá trị ta đã truyền vào các hàm text().
Có thể, nhỏ hơn 10 pixel với y. Cái đầu tiên sẽ là 10 và 30,
và sau đó có thể 200, 230 ... 10, 230 ... 200, 230.
Nó giống như tọa độ của chữ, tôi chỉ cần +10 cho mỗi y, '
bởi tôi muốn nó thấp hơn một chút thôi.
Winston không di chuyển. Ta đã không cho hàm ở đây biết rằng
ta đang truyền tham số cho nó, vì vậy nó vẫn sử dụng các giá trị ngẫu nhiên này.
Để nói với hàm này, "Thay vào đó anh sẽ cung cấp cho chú thông tin này".
ta cần đặt tên tham số bên trong dấu ngoặc đơn.
Ta sẽ gọi nó là faceX và faceY, phân tách chúng bằng dấu phẩy,
Ta gọi như vậy là vì ta đang sử dụng nó để tham chiếu trong hàm.
Bằng cách đó, ta không phải viết lại phần còn lại của code.
Nhưng vẫn không có gì xảy ra; Winston vẫn còn ở khắp mọi nơi.
Nếu nhìn vào phần đầu của hàm,
ta vẫn ghi đè faceX và faceY với các giá trị ngẫu nhiên.
Vì vậy, tất cả những gì ta phải làm là xóa những dòng này đi.
Bây giờ, faceX và faceY đang được truyền vào hàm,
và nó đang dùng các giá trị được gọi ở đây.
Tôi đã không định vị chính xác Winston, vì quên rằng chữ đã được xác định vị trí
căn theo phía trên bên trái, và mặt được xác định vị trí theo tâm điểm.
Ta cần tiếp tục và điều chỉnh số má một chút ở đây, phải không?
Tôi cần phải đặt 'x' lên rất nhiều, và di chuyển nó, được rồi ... như vậy đó là những bước đi đầu tiên
Ta sẽ thực hiện và thay đổi những gì truyền vào hàm,
Ta không phải thay đổi định nghĩa hàm,
Nó sẽ luôn lấy bất cứ giá trị nào ta truyền vào.
Cũng giống như với ellipse() và rect().
Tôi đã định vị nó, nhưng nhận thấy rằng Winston quá to.
Anh ta chồng chéo và không phù hợp.
Tôi đã viết code để vẽ anh ta trong một hàm,
Tôi có thể thay đổi kích thước của tất cả chúng cùng một lúc
bằng cách thay đổi dòng code vẽ hình elip.
Nếu ta đặt cho anh ta kích thước như 190, Winston sẽ ăn kiêng còn 190.
Bây giờ anh ta sẽ khỏe hơn và sau đó ta có thể tiếp tục điều chỉnh
Như vậy, tôi thực sự có thể đưa anh ta vào trong đó, phải không? Ngon.
Hãy xem xét lại những gì code này làm. Nó định nghĩa một hàm gọi là drawWinston()
và nói rằng hàm này có hai giá trị tên là faceX và faceY,
các giá trị này xuất hiện dưới dạng những biến ta có thể sử dụng ở bất kỳ đâu trong hàm,
giống như ta đã từng sử dụng các biến đã khai báo ở trên cùng
Và sau đó ta có thể gọi hàm này bất cứ khi nào mình muốn sau khi khai báo nó,
ta có thể truyền các giá trị khác nhau, để nó sử dụng các giá trị mới đó trong mỗi lần.
Bạn đã thấy những điều tuyệt vời về hàm. Ta có thể tiếp tục code
và nghĩ rằng sẽ rất hữu ích khi tái sử dụng, nhưng ta cũng có thể dùng các tham số để thể hiện
"Này, đây là điều gì đó ta có thể thay đổi trong code này, để tùy chỉnh."
Nó giống như một công thức. Bạn viết ra những chỉ dẫn chung,
và nếu bạn nhận ra rằng bạn đột nhiên cần có 4 Winstons thay vì 1,
bạn không phải bắt đầu lại, chỉ cần sửa đổi các hướng dẫn ban đầu
và nhân mọi thứ với 4.
Bây giờ bạn có thể bắt đầu suy nghĩ về các công thức trong code của mình rồi đấy! Ngon.