Tại sao code của người ta dùng hàm? Tại sao họ không đưa tất cả vào hàm main() cho ngắn gọn?

các a chị cho e hỏi với . vì sao cách trên mạng Họ dạy họ Code kiểu Dùng 2 hàm thế kia để KIỂM tra số đẹp mà họ không Code cách của e cho ngắn gọn ạ ??
các code dùng 2 hàm kia có tác dụng ưu điểm j hơn không ạ ???

Chụp hình code thế này thì ai mà nhìn được. Up code lên.

Cách up code trên DNH:

Về cơ bản câu hỏi của bạn là “Tại sao người ta lại dùng hàm trong khi lại không đưa hết vào main() như mình”.

Câu trả lời:

Bạn muốn kiểm tra nhiều số, không chỉ có n, mà bạn muốn kiểm tra số n+2, n+100, n+1e9+7 xem có phải là số đẹp không. Bạn có thể viết

int main() {
    scanf("%d", &n);
    if (n % 2 == 0 && n % 5 == 0)
        printf("%d la so dep", n);
    else
        printff("%d la so xau", n);

    if ((n+2) % 2 == 0 && (n+2) % 5 == 0)
        printf("%d la so dep", n+2);
    else
        printff("%d la so xau", n+2);

    if ((n+100) % 2 == 0 && n+100 % 5 == 0)
        printf("%d la so dep", n+100);
    else
        printf("%d la so xau", n+100);

    ...
}

Nhưng không phải lúc nào bạn cũng có thể copy paste thủ công thế này được. Về sau này bạn không chỉ làm việc với mỗi 1 câu lệnh if con con như trên mà phải xử lí đến 100, 1000 dòng lệnh, việc copy paste mà quên chưa sửa biến rất dễ gây đến hậu quả nghiêm trọng.

// lỗi mình mới mắc hôm qua
int a[4][3][4];

/* đây có 3 vòng lặp nữa */
for (int l1=0; l1<4; l1++)
    for (int l2=0; l2<3; l1++)
        for (int l3=0; l1<4; l1++)
            a[l1][l2][l3] = -1;

Mình mất 1 tiếng đồng hồ ngồi soi lỗi các kiểu mới ra được cái chỗ vớ vẩn này. Trước đó chương trình cứ stopped working mà chẳng hiểu sao.

Để tránh việc copy paste thủ công những đoạn code gần như giống hệt nhau, chỉ khác nhau ở 1 số chỗ như n và n+10 như code trên, người ta sử dụng HÀM.

int beautiful(int n) { // C lởm không có bool
    return (n % 10 == 0); // ngắn hơn code trên kia nhiều,
    // n chia hết cho 2 và chia hết cho 5 <-> n chia hết cho 10
}

int main() {
    while (scanf("%d", &n) == 1) { // đọc bao nhiêu n cũng được
        // không thèm dùng if
        beautiful(n) ? printf("%d la so dep\n", n) : printf("%d la so xau\n", n);
    }
}

Những câu trả lời khác:

6 Likes

Vả lại khi bạn dùng hàm thì tư duy sẽ bao quát hơn vì phần đó hàm lo hết và có thể kiểm thử riêng. [spoiler]Khi tách như vậy thì tha hồ dùng mock function mock class mock API :)[/spoiler]

1 Like

dạ e cám ơn ạ . tại e mới bắt đầu học lập trình nên còn rất kém ạ . được a thông não cho nên e hiểu rồi ạ . e cám ơn anh ạ !!!

Tách hàm không mockup được đâu

Nếu dùng mockup phải thông qua function pointer để đảo chiều phụ thuộc từ high-level function tới low-level function. Hay còn gọi là nguyên lý Dependency Inversion.

1 Like

Cái bạn làm chỉ là ví dụ nên cho hết vào hàm main cho nó gọn.
Sau này làm chương trình lớn thì phần debug, phát triển phần mềm là 1 nỗi ác mộng. Dùng hàm để tránh lặp code, dễ tìm lỗi và bảo trì hơn

2 Likes

giống như bạn hông thể ăn tất cả cơm trong đời chỉ với một ngày vậy

1 Like

Mình rất thích câu hỏi của bạn, vì ngày xưa mình cũng có suy nghĩ giống như vậy. Nếu bạn chỉ làm các program đơn giản thì bạn sẽ thấy, việc viết trong hàm main rất đơn giản và dễ hiểu. Nhưng khi làm project lớn, thì việc “không xài lại được” sẽ rất ư là khó chịu. Tức là có nhiều method được sử dụng nhiều lần trong dự án. Mong bạn có nhiều suy nghĩ hay ho hơn để đóng góp cho group ^^

1 Like

Một vấn đề lớn được chia ra thành nhiều vấn đề nhỏ hơn, giải quyết những vấn đề nhỏ bằng hàm.
Việt viết hàm giúp cho bạn cỏ thể sử dụng lại để giải quyết vấn đề nhỏ đó nhiều lần. Nó còn giúp cho bạn dễ dàng hơn trong việc phát triển và bảo trì, kiểm tra bug cho cái ‘vấn đề nhỏ’ ấy của bạn.

1 Like

nếu bạn đang còn đi học,
thì code những chương trình dài khoảng 1000 lines đã được coi là khá mệt rồi và thường là bạn làm solo nên sẽ k bao giờ bị đụng code ( conflicts)

nhưng khi đi làm, chương trình có thể lên đến 10k line of code và có nhiều người làm trên chương trình này.

chính vì vậy mà cần phải chia ra ,
chỗ này làm gì
chỗ kia làm gì

lúc có lỗi chỉ cần sửa chỗ cần sửa là được.

Thêm vào đó là có nếu chỉ để 1 file code. nhiều người code chung sẽ bị đụng code, và rất khó sửa…
chia ra nhiều file, mỗi người code 1 file. thích làm gì thì làm , miễn sao ráp lại vẫn chạy là ok

Trở lại với ví dụ của bạn.

Người ta đang muốn tạo một thói quen, lâu dần nó sẽ ăn sâu vào não ---- mindset
Clean Code :smiley:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?