Trang 1 của 5 123 ... CuốiCuối
Kết quả 1 đến 10 của 44

Chủ đề: 6: Hàm - Class

  1. #1
    Ngày tham gia
    Dec 2014
    Bài viết
    0

    6: Hàm - Class

    Bài 6: Hàm - Class
    Chào các bạn.

    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 cờ. Cứ mỗi con cờ được đi, ứng dụng tự động phát 1 đoạn nhạc. Mà trong 1 ván cờ có rất nhiều nước cờ được đi, 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.





    Mã:
    -(void)HamGhiChu {
        // Các lệnh được đặt trong này
        NSLog(@"Ghi ghi chú ra cửa sổ Logs");
    }
    <span style="font-size: 11px">// 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.</span>

    <span style="font-size: 11px">// void nghĩa là Hàm chỉ thực thi và không trả về giá trị nào cả</span>

    <span style="font-size: 11px">// 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.</span>





    Cách tạo Hàm thực thi có tham số:



    Mã:
    -(void)HamGhiChu:(NSString *)CauGhiChu {
        NSLog(@"Ghi chú: %@", CauGhiChu);
    }
    <span style="font-size: 11px">// Tương tự như Hàm thực thi không có tham số.</span>

    <span style="font-size: 11px">// Dấu Hai chấm ( : ) là bắt buộc.</span>

    <span style="font-size: 11px">// 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 đó.</span>

    Cách tạo Hàm thực thi có tham số và trả về kết quả:



    Mã:
    -(NSString *)KetQuaXepLoai:(int)DiemTongKet {
        if (DiemTongKet > 8) {
            return @"Được học sinh Giỏi!";
        } else {
            return @"Không được học sinh Giỏi.";
        }
    }
    <span style="font-size: 11px">// Hàm này trả về mỗi chuỗi hoặc là <span style="color: #d12f1b">@"Được học sinh Gi<span style="font-family: 'Monaco'">i." hoặc là @"Không được học sinh Gi<span style="font-family: 'Monaco'">i!" dựa vào việc kiểm tra tham số đã truyền vào Hàm.</span></span></span></span>

    <span style="font-size: 11px">// <span style="color: #bb2ca2">return là bắt buộc đối với Hàm này.</span></span>

    <span style="font-size: 11px">// 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 (*)</span>





    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:

    <span style="font-size: 11px"><span style="color: #000000">[selfHamGhiChu];</span></span>

    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õ <span style="font-family: 'Menlo'">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.</span>

    <span style="font-size: 11px"><span style="color: #000000">[selfKetQuaXepLoai:2];</span></span>





    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.





    Mã:
    @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:



    Mã:
    - (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 <span style="font-family: 'Menlo'">#import <span style="font-family: 'Menlo'"><Foundation/Foundation.h></span></span>

    Bạn gõ vào <span style="font-family: 'Menlo'">#import <span style="font-family: 'Menlo'">"Class_Bai6.h", Đây là dòng lệnh nhập Class Class_Bai6 vào.</span></span>

    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ụ.





    Mã:
    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ông
            int 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



    Chúc các bạn vui.



    Project mình đã nén lại và đính kèm cho các bạn tiện theo dõi.

    Link: http://www.mediafire.com/folder/jjwb8z0gglzb3/Bài_6



    Chuẩn bị tinh thần để sắp tới bắt tay vào làm Apps iOS, bạn nhé.

  2. #2
    Ngày tham gia
    Dec 2014
    Bài viết
    0
    Nhiều bác xem mà ít bác nào like để ủng hộ tinh thần cho bác chủ quá.

  3. #3
    Ngày tham gia
    Dec 2014
    Bài viết
    0
    Rất ủng hộ và cám ơn tinh thần của bác iThanh, những bài viết này rất hay và có ý nghĩa với những người đang bập bõm muốn học lập trình iOS. [IMG]styles/default/xenforo/clear.png[/IMG]



    Chỉ góp ý với bác 1 số điểm nhỏ sau thôi ah:



    1. Bác nên đưa chuẩn code convention vào trong example của bác luôn. Dù là ví dụ cho người mới học,nhưng nếu ngay từ đầu đã làm quen luôn với code convention thì sẽ hình thành thói quen, rất tốt về sau. VD:





    Mã:
    -(void)HamGhiChu {
        // Các lệnh được đặt trong này
        NSLog(@"Ghi ghi chú ra cửa sổ Logs");
    }
    thì viết luôn theo chuẩn:





    Mã:
    -(void)hamGhiChu {
        // Các lệnh được đặt trong này, bắt đầu nên hàm
        NSLog(@"Ghi ghi chú ra cửa sổ Logs");
    }
    "Method names do not have a prefix, and should start with a lowercase letter; camel case is used again for multiple words" nguồn: http://developer.apple.com/library/...ngWithObjectiveC/Conventions/Conventions.html



    2. Theo mình thì có thể giới thiệu luôn về Model - View - Controller, từ đó có thể tạo luôn giao diện UI, bởi ngay khi tạo project thì mặc định xCode đã tạo sẵn 1 viewController (nếu chọn template là single view) rồi từ đó mình code, hiển thị kết quả lên trên Simulator sẽ trực quan hơn là hiển thị giao diện log.



    Đấy chỉ là những góp ý nhỏ nhỏ của mình thôi.

    Mong bạn tiếp tục phát huy tinh thần chia sẻ! [IMG]styles/default/xenforo/clear.png[/IMG]

  4. #4
    Ngày tham gia
    Dec 2014
    Bài viết
    0
    "Chuẩn bị tinh thần để sắp tới bắt tay vào làm Apps iOS, bạn nhé."



    Những bài này có lẽ đặt ở box lập trình cho di động (http://www.tinhte.vn/forums/lap-trinh-cho-di-dong.270/) thì chuẩn hơn bác ạ. [IMG]styles/default/xenforo/clear.png[/IMG]

  5. #5
    Trích dẫn Gửi bởi Only87xx
    "Chuẩn bị tinh thần để sắp tới bắt tay vào làm Apps iOS, bạn nhé."



    Những bài này có lẽ đặt ở box lập trình cho di động (http://www.tinhte.vn/forums/lap-trinh-cho-di-dong.270/) thì chuẩn hơn bác ạ. [IMG]styles/default/xenforo/clear.png[/IMG]
    để cả 2 vẫn chuẩn bác à, vì ngôn ngữ dùng chung. Bác chủ vừa chỉ cái cơ bản rồi dần chỉ lập trình Mac, IOS

  6. #6
    Ngày tham gia
    Dec 2014
    Bài viết
    0
    Cảm ơn các bạn.

    Mình giới thiệu theo cách cơ bản nhất, để tất cả mọi người mới nhập môn đều tiếp thu được (trên terminal).



    Điều này rất tiện cho các bạn test hàm. (Mình nghĩ như vậy)



    Khi tiến hành lập trình iOS lúc đó sẽ biết thêm được ViewController, và có cơ sở từ những bài trên sẽ dễ dàng hơn.



    Mong các bạn góp ý nhiệt tình.

    Cảm ơn tất cả các bạn.

  7. #7
    Ngày tham gia
    Dec 2014
    Bài viết
    0
    ze


    Trích dẫn Gửi bởi iThanh
    Cảm ơn các bạn.



    Trích dẫn Gửi bởi iThanh
    Mình giới thiệu theo cách cơ bản nhất, để tất cả mọi người mới nhập môn đều tiếp thu được (trên terminal).



    Điều này rất tiện cho các bạn test hàm. (Mình nghĩ như vậy)



    Khi tiến hành lập trình iOS lúc đó sẽ biết thêm được ViewController, và có cơ sở từ những bài trên sẽ dễ dàng hơn.



    Mong các bạn góp ý nhiệt tình.

    Cảm ơn tất cả các bạn.
    chờ bài của a.

  8. #8
    Ngày tham gia
    Dec 2014
    Bài viết
    0
    [IMG]styles/default/xenforo/clear.png[/IMG] khi nào có bài tiếp theo nữa bác ui [IMG]styles/default/xenforo/clear.png[/IMG]

  9. #9
    Ngày tham gia
    Dec 2014
    Bài viết
    0
    đang làm bài tập, đợi bài mới của iThanh ^^

  10. #10
    Ngày tham gia
    Dec 2014
    Bài viết
    0
    Code:

    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ông

    int 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;

    iThanh có thể nói rõ hơn về cái chỗ mình highlight chữ cam hông?

    thanks

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •