-
Trong video này, ta đang có chương trình
vẽ Winston và nhập một số văn bản.
-
Nhiệm vụ của chúng ta là điều chỉnh vị trí
để mỗi hình Winston nằm dưới mỗi dòng văn bản
-
mô tả các mốc
trong cuộc đời của bạn ấy.
-
Trên khung kết quả, các hình Winston
đang nằm lộn xộn vì chúng ta
-
vẫn gán giá trị ngẫu nhiên
cho biến "faceX" và "faceY" trong hàm.
-
Trong khi đó, ta cần lập trình sao cho
Winston được vẽ tại một vị trí cụ thể
-
và vị trí đó cần được
xác định rõ trong mỗi lần gọi hàm,
-
tương tự như khi ta dùng
hàm "ellipse()" và hàm "rect()".
-
Vậy là ta cần vẽ các hình Winston tại
bốn vị trí được khoanh đỏ trên khung kết quả
-
chứ không phải tại các vị trí
ngẫu nhiên trong mỗi lần gọi hàm.
-
Để làm được điều này, chúng ta cần
xác định các "tham số" cho hàm
-
tại phần định nghĩa hàm bên trên
-
cũng như ở lệnh gọi hàm phía dưới
khi ta cho chương trình chạy hàm.
-
Cụ thể, ta sẽ truyền hai tham số
"faceX" và "faceY" cho hàm "drawWinston()"
-
và truyền giá trị cụ thể cho hai tham số này
thay vì giá trị ngẫu nhiên.
-
Đầu tiên, ta xét xem nên truyền giá trị nào cho
tham số ở các lệnh gọi hàm phía dưới.
-
Ta thấy rằng, ta cần đặt mỗi Winston dưới một dòng
văn bản nên tham số x và y của mỗi Winston
-
phải gần với các giá trị ta truyền vào
các tham số ở hàm "text()".
-
Ta có thể cho các hình
nằm cách văn bản 10 pixel.
-
Như vậy, hàm vẽ đầu tiên
có giá trị tham số là 10 và 30,
-
hàm tiếp theo là 200 và 30,
rồi đến 10 và 230, 200 và 230.
-
Giá trị tham số x của các lệnh gọi hàm
"drawWinston" vẫn giống như các hàm "text",
-
nhưng ta thêm 10 vào tham số y
-
để mỗi hình được vẽ
bên dưới phần văn bản một chút.
-
Tuy nhiên đến đây, ta thấy các Winston vẫn ở vị trí
ban đầu. Đó là vì ở phần định nghĩa hàm ở trên,
-
ta chưa truyền tham số cụ thể cho hàm, nên hàm
vẫn dùng các giá trị ngẫu nhiên theo biến ở dưới.
-
Để hàm này đọc được
các tham số ta đang truyền giá trị,
-
chúng ta phải đưa tên các tham số
vào trong ngoặc đơn ở cạnh từ "function".
-
Ta nhập "faceX" và "faceY",
ngăn cách với nhau bởi dấu phẩy.
-
Ta dùng luôn "faceX" và "faceY" để khớp với
tên các tham số ở các câu lệnh bên dưới.
-
Và nhờ đó, chúng ta cũng không cần
viết lại các lệnh ở dưới.
-
Tuy nhiên đến đây, vẫn chưa có gì
thay đổi trên khung kết quả.
-
Nhìn lại vào phần đầu
của các lệnh trong hàm,
-
ta nhận thấy hai biến "faceX" và "faceY"
vẫn được gán với giá trị ngẫu nhiên.
-
Nên ta chỉ cần xóa hai dòng lệnh này đi.
-
Lúc này, hai tham số "faceX" và "faceY"
đã được truyền vào trong hàm
-
và chúng nhận các giá trị
có trong các lệnh gọi hàm ở dưới.
-
Tuy nhiên, vị trí của các Winston vẫn chưa
chính xác. Đó là vì vị trí văn bản
-
được xác định bởi điểm trên cùng bên trái
còn vị trí mặt được xác định bởi tâm của hình.
-
Vì vậy, chúng ta cần thay đổi
các giá trị tham số x và tham số y
-
trong lệnh gọi hàm "drawWinston"
để Winston hiển thị ở vị trí ta muốn.
-
Như vậy, ta đang thay đổi các giá trị
truyền cho các tham số trong hàm.
-
Ta không cần phải
thay đổi định nghĩa hàm
-
vì hàm sẽ nhận
mọi giá trị được truyền vào.
-
Tương tự như hàm "ellipse()"
và hàm "rect()".
-
Sau khi điều chỉnh xong vị trí,
ta có thể thấy kích thước các hình hơi to
-
và bị đè lên nhau,
không vừa trong khung kết quả.
-
Trước đó, ta đã đưa các lệnh vẽ
Winston vào một hàm
-
nên ta có thể thay đổi kích thước
của tất cả các hình cùng một lúc,
-
bằng cách thay đổi giá trị của
tham số trong hàm "ellipse()" vẽ mặt.
-
Ta đổi giá trị của tham số
thứ ba và tham số thứ tư thành 190.
-
Như vậy, Winston trông đã vừa vặn hơn
trong khung kết quả. Ta có thể tiếp tục căn chỉnh
-
để Winston nằm giữa
hai dòng văn bản. Được rồi.
-
Vậy, hãy cùng ôn lại nội dung vừa học.
Ta đã định nghĩa hàm "drawWinston()"
-
và cho phép hàm này nhận
hai tham số "faceX" và "faceY".
-
Hai tham số này truyền vào hàm dưới dạng
các biến và có thể được sử dụng trong hàm
-
tương tự như các biến được khai báo
mà ta từng dùng ở đầu chương trình.
-
Sau khi định nghĩa hàm này,
chúng ta có thể gọi hàm bất kì lúc nào
-
và truyền các giá trị khác nhau
vào tham số trong các lệnh gọi hàm.
-
Đó chính là chức năng tuyệt vời của
các hàm. Và ta hoàn toàn có thể nghĩ ra
-
các hàm tương tự để ứng dụng trong
lập trình hoặc sử dụng các tham số
-
để điều chỉnh các hàm sao cho phù hợp.
-
Khi lập trình, ta có thể
áp dụng công thức chung sau.
-
Giả sử bạn nhận ra mình cần vẽ
4 hình thay vì chỉ 1 hình,
-
bạn không cần viết lệnh lại từ đầu
mà chỉ cần thay đổi các lệnh gốc
-
dùng để vẽ hình đầu tiên và sao chép
thành 4 nhóm lệnh như vậy.
-
Hãy tiếp tục thực hành với các hàm
và hẹn gặp lại bạn trong video tiếp theo.