Sunday, September 10, 2017

Bài 3 - Phương thức

Copy đoạn lệnh sau vào trong Playground
func show(){
print("Đây là dòng chữ ví dụ")
}
Bên phải màn hình trắng trơn không có gì

Gõ thêm dòng show() vào chạy thử.

Bây giờ màn hình đã in ra dòng chữ ta muốn.
Tiếp theo ở trên dấu ngoặc dưới cùng, copy đoạn code sau vào
func tinhnhan(a:Int,_ b:Int){
let c=a*b
print("Kết quả nhân hai số là: "+String(c))
}
Bên dưới thêm các dòng sau:
let so=10;
let so2=12;
tinhnhan(so,so2)
Màn hình có kết quả 120 được tính ra.

Các đoạn code có tên show(), tinhnhan() được gọi là hàm hay phương thức.
Vậy phương thức là tập hợp các dòng lệnh bắt đầu bằng biểu thức kiểu như func tên gọi{
Kết thức bằng dấu }
Phương thức sẽ làm một cái gì đó, như với show() là để in ra màn hình dòng chữ, với tinhnhan() là để tính tích hai số bất kỳ.
Ban đầu ta không cho dòng show() vào thì nó không hiện ra gì cả, đó là vì ta chưa gọi phương thức.
Bắt đầu từ funcshow() là ta khai báo phương thức, ở dưới gọi để dùng nó, không dùng thì coi như không có gì.
Bạn có thể thắc mắc sao không để lệnh print("Đây là dòng chữ ví dụ")luôn, còn cần show() làm gì, đương nhiên đây là ví dụ đơn giản. Khi làm thực tế, các phương thức có thể rất dài, cần dùng nhiều lần. Bạn sẽ khai báo nó một lần, lúc nào dùng lại gọi.
Như với tinhnhan(), mỗi khi cần nhân 2 số a, b bất kỳ bạn chỉ dùng một dòng tinhnhan(a,b) chứ không cần gõ lại lệnh nhân cụ thể nữa. Đó chính là lợi ích của dùng phương thức.
So sánh show() và tinhnhan() ta thấy show không có gì trong ngoặc, ta gọi là nó không nhận đối số truyền vào, còn tinhnhan nhận vào 2 biến số nguyên a, b.
Thử xoá dấu gạch trước chữ b trong tinhnhan()

Xcode báo lỗi và buộc bạn thêm chữ b: vào trước so2
Đây là cái bất tiện của Swift, để gõ luôn các đối số tiếp theo trong phương thức, ta phải thêm dấu gạch chân trước nó khi khai báo.
Tiếp theo, copy dòng code sau xuống dưới phương thức tinhnhan()
func tinhnhan2(a:Int, b:Int)->Int {
let c=a*b
return c
}
let so3=15;
let so4=2;
let d=tinhnhan2(so3,so4)
print("Kết quả phương thức hai là: "+String(d))Bên trên thêm Màn hình hiện ra dòng kết quả.

Bây giờ hãy so sánh tinhnhan() và tinhnhan2(), ta thấy chỗ mũi tên và chữ int ở phần đầu tinhnhan2() là khác tinhnhan().
Nếu không có mũi tên ta gọi là phương thức không trả lại giá trị, có mũi tên tức nó trả lại giá trị nào đó, int tức trả lại một số nguyên. Nên trong tinhnhan2 phía cuối có dòng return c.
Nếu phương thức khai báo không có mũi tên, không có chữ return.
Vì tinhnhan2 chỉ trả lại giá trị nhân nên khi dùng nó ở trên, muốn có thêm dòng chữ kết quả ta cần thêm lệnh print vào.
Phương thức có thể trả lại giá trị là một chuỗi, copy thêm dòng code sau vào dưới tinhnhan2.
func tinhcong(a:Int,_ b:Int)->String {
let c=a+b
return"Kết quả là " + String(c)
}
tinhcong(so3,so4)
Chạy thử ra kết quả như sau.
Vì tinhcong cho ra kết quả là một chuỗi nên khi dùng ta không cần thêm lệnh in nữa.
Phương thức cũng có thể trả lại mảng, copy đoạn code sau xuống dưới phương thức tinhcong()
func tinhtoan(a:Int,_ b:Int)->[Int] {
var ar=[Int](count: 3, repeatedValue: 0)
let c=a+b;
let d=a-b;
let e=a*b;
    ar[0]=c;
    ar[1]=d;
    ar[2]=e;
return ar
}
var kq=[Int](count: 3, repeatedValue: 0)
kq=tinhtoan(so3,so4)
Kết quả ta có mảng 3 số nguyên của các phép tính cộng, trừ, nhân hai số đầu vào.

Bài tập
Làm phương thức chia 2 số, trả lại kết quả kiểu Double

Phương thức tính căn, làm tròn kết quả còn hai chữ số sau dấu phảy, dùng công thức let n=sqrt(Double) để tính căn một số

No comments:

Post a Comment