Bài 6: Hàm – Class
On 10/01/2017 by iThanhHàm và Class tong Objective-C
Phần này rất quan trọng, sẽ ứng dụng rất nhiều trong quá trình bạn viết ứng dụng sau này.
Bạn cần phải thực hành nhiều hơn kể từ phần này trở đi.
Chúng ta không bàn đến những phương thức xây dựng hàm cũ, ở đây mình dùng Xcode mới nhất, nên cách tạo hàm cũ, mình không giới thiệu. Bạn nào muốn tìm hiểu thì có thể tự tìm hiểu với bác zai của mình: Google.
1. Hàm, cách khởi tạo, cách sử dụng:
Hàm trong Objective-C cũng tương tự như hàm ở các ngôn ngữ khác về tác dụng.
Hàm được dùng để thực hiện một loạt các công việc định sẵn mà các công việc này được dùng nhiều lần trong toàn bộ chương trình.
Ví dụ: Ở một lớp học, mỗi lần họp phụ huynh là cần phải chuẩn bị nhiều thứ: giấy mời, khăn trải bàn, bình hoa, chỗ để xe, đón tiếp phụ huynh học sinh, … Nhưng một năm, họp phụ huynh rất nhiều lần, cho nên việc chuẩn bị cũng được thực hiện nhiều lần. Để dễ dàng, giáo viên chủ nhiệm lập ra 1 tổ, phân công công việc cụ thể cho từng tổ viên, cứ đúng đến lúc chuẩn bị họp phụ huynh là tổ đó có trách nhiệm chuẩn bị chu đáo cho buổi họp. Tổ đó cũng tương tự như 1 hàm.
Hoặc ví dụ: Một ứng dụng chơi đánh bài. Cứ mỗi con bài được đánh ra, ứng dụng tự động phát 1 đoạn nhạc. Mà trong 1 ván bài có rất nhiều con bài được đánh ra, cho nên việc phát nhạc được thực hiện nhiều lần, lúc đó, người ta viết 1 Hàm có nhiệm vụ phát nhạc. Và cứ đến khi thấy có con bài nào được đánh ra thì ngay lập tức gọi Hàm phát nhạc.
Cách tạo Hàm (Hàm thực thi):
Hàm thực thi là Hàm chỉ thực hiện các lệnh bên trong hàm đó. Đây là dạng cơ bản nhất của Hàm trong Objective-C.
-(void)HamGhiChu {
// Các lệnh được đặt trong này
NSLog(@”Ghi ghi chú ra cửa sổ Logs”);
}
Dấu trừ là bắt buộc. Nó chỉ cho trình biên dịch biết rằng đây là hàm thực thi.
void nghĩa là Hàm chỉ thực thi và không trả về giá trị nào cả
HamGhiChu nghĩa là tên của Hàm. Quy tắc đặt tên Hàm cũng tương tự với Quy tắc đặt tên biến.
Cách tạo Hàm thực thi có tham số:
-(void)HamGhiChu:(NSString *)CauGhiChu {
NSLog(@”Ghi chú: %@”, CauGhiChu);
}
Tương tự như Hàm thực thi không có tham số.
Dấu Hai chấm (:) là bắt buộc.
Tham số ở đây là một chuỗi, nghĩa là khi gọi và chạy Hàm này, bạn phải truyền vào Hàm 1 chuỗi nào đó.
Cách tạo Hàm thực thi có tham số và trả về kết quả:
-(NSString *)KetQuaXepLoai:(int)DiemTongKet {
if (DiemTongKet > 8) {
return @”Được học sinh Giỏi!”;
} else {
return @”Không được học sinh Giỏi.”;
}
}
Hàm này trả về mỗi chuỗi hoặc là @”Được học sinh Giỏi.” hoặc là @”Không được học sinh Giỏi!” dựa vào việc kiểm tra tham số đã truyền vào Hàm.
return là bắt buộc đối với Hàm này.
Khi truyền tham số vào hàm, các tham số có kiểu là Đối tượng (thông thường có NS ở trước tên) thì phải có dấu sa8 (*)
Cách gọi hàm:
Đối với các Hàm chỉ thực thi mà không có tham số, ta chỉ cần gọi đơn giản như bên dưới:
[self HamGhiChu];
Còn đối với các Hàm thực thi có tham số, dĩ nhiên bạn phải truyền tham số vào các Hàm. Đối với các Hàm loại này, bạn chỉ cần gõ self cách ra 1 cái và gõ tên hàm, các gọi ý sẽ giúp bạn tìm được hàm bạn muốn gọi, sau đó chỉ việc ENTER là chèn vào.
[self KetQuaXepLoai:2];
2. Class (Lớp – Đối tượng):
Bạn nháy phải chuổt vào Project bên tay trái, chọn “New File”
Trong cửa sổ hiện ra, chọn Cocoa -> Objective-C Class -> Next
Đặt tên Class là Class_Bai6. Chọn Subclass of là NSObject -> Next -> Create.
Vậy là bạn đã tạo xong 1 class có tên là Class_Bai6.
Lúc này, Xcode sẽ tạo ra 2 file, Class_Bai6.h và Class_Bai6.m
– Class_Bai6.h là file Header. Dùng để khai báo biến, khai báo các Hàm tuỳ chọn.
– Class_Bai6.m là file Main. Dùng để triển khai nội dung Các Hàm.
Bài toán ví dụ: Viết chương trình nhập vào 1 số nguyên lớn hơn 0 và xem số đó có chia hết cho 2 hay không.
Bấm vào File Class_Bai6.h, khai báo một Hàm dùng để kiểm tra.
@interface Class_Bai6 : NSObject
– (BOOL)KiemTraChiaHetCho2:(int)SoNhapVao;
// Hàm này trả về kiểu boolen (đúng – sai)
// Tên Hàm: KiemTraChiHetCho2 (Kiểm tra chia hết cho 2)
// Tham số có kiểu là int (integer – số nguyên), có tên biến là SoNhapVao@end
Bấm vào File Class_Bai6.m để triển khai nội dung Hàm.
Triển khai nội dung Hàm kiểm tra chia hết cho 2 như sau:
– (BOOL)KiemTraChiaHetCho2:(int)SoNhapVao {
if (SoNhapVao != 0) { // Kiểm tra số nhập vào có khác không hay không.
// Trường hợp số nhập vào khác 0
if ((SoNhapVao % 2) == 0) { // Kiểm tra xem số nhập vào có chia hết cho 2 hay không
return TRUE;
} else {
return FALSE;
}
} else {
// Trường hợp số nhập vào là 0 (bằng 0)
return FALSE;
}
}
Bạn hãy thử bấm Run xem.
Lúc này Class của bạn vẫn chưa chạy vì nó chưa được triệu gọi.
Để triệu gọi Class vừa tạo, bạn bấm vào file main.m
Bên dưới dòng #import <Foundation/Foundation.h>
Bạn gõ vào #import “Class_Bai6.h”, Đây là dòng lệnh nhập Class Class_Bai6 vào.
Trong Hàm main, viết đoạn code để cấp phát bộ nhớ cho Hàm được tạo bằng Class Class_Bai6 và tiến hành làm công việc giải bài toán ví dụ.
int main(int argc, const char * argv[]) {
@autoreleasepool {
Class_Bai6 *KiemTra = [[Class_Bai6 alloc] init];
// Kiểm tra xem 10 có chia hết cho 2 hay không[KiemTra KiemTraChiaHetCho2:10] ? NSLog(@”Chia hết cho 2.”) : NSLog(@”Không chia hết cho 2.”);
// Kiểm tra xem 13 có chia hết cho 2 hay khôngint So = 13;
[KiemTra KiemTraChiaHetCho2:So] ? NSLog(@”%i chia hết cho 2.”, So) : NSLog(@”%i không chia hết cho 2.”, So);
}
return 0;
}
Và bây giờ là chạy thử xem kết quả thế nào nhé.
Vậy là trên đây bạn đã hiểu về Hàm là như thế nào và Class là như thế nào. Hiểu sơ qua thôi, bây giờ làm bài tập giải mỏi nhé.
3. Bài tập:
Yêu cầu dùng Class và Hàm để giải các bài tập bên dưới.
Giải xong, bạn đăng các Hàm của bạn viết ra lên đây cho mọi người cùng tham khảo và góp ý nhé.
1. Viết ứng dụng xuất ra cửa sổ Log các số nguyên lớn hơn 0 chia hết cho 3 và nhỏ hơn số n. Với n là số bạn tự chọn.
2. Viết ứng dụng tính Tổng và Tích các số từ n đến m (n và m tự chọn sao cho n < m) và xuất ra cửa sổ Log.
3. Viết ứng dụng in ra cửa sổ Log 100 chữ cái bất kỳ (với chữ cái bất kỳ cho bạn tự chọn).
4. Viết ứng dụng giải phương trình bậc 1 với các tham số của phương trình do bạn tự chọn.
ax + b = 0
5. Viết ứng dụng giải phương trình bậc 2 với các tham số như sau: (ax^2 + bx + c = 0)
a = 5, b = -6, c = +1