Ưu điểm của sử dụng hàm trong lập trình

Trong bài học này, Lập trình không khó sẽ chỉ dẫn các bạn các học thức cơ bản nhất về hàm trong C (cái tên khác là chương trình con). Mình sẽ đặt ra nguyên nhân vì sao nên dùng hàm, cách gọi hàm ở trong ngôn từ C & cách hoạt động của một chương trình có sử dụng các hàm con… & hẳn nhiên trong khóa học c bá đạo này, các bài tập & chẳng hạn là chẳng thể thiếu trong mỗi bài học.

Video chỉ dẫn hàm trong C

Dưới đây là video chỉ dẫn cơ bản về hàm do người dùng khái niệm ở trong ngôn từ C. Nói là hàm người dùng khái niệm là để phân biệt với các hàm có sẵn trong các thư viện như bài học trước tất cả chúng ta vừa khám phá. Các chúng ta nên tiếp tục đọc nội dung để có cái nhìn sâu sắc hơn về hàm trong C.

Hàm trong C là gì?

Đặt vấn đề: Giả sử bạn mong muốn xây dựng một công ty tư vấn du học (một chương trình laptop bỏ túi). Trung tâm tư vấn du học của bạn được thành lập với 4 mục tiêu chính như sau: tính tổng, hiệu, tích, thương của 2 số nguyên nhập từ keyboard.

Nếu công ty tư vấn du học của bạn chỉ có một member & member đó phải tự làm & làm chủ hết toàn bộ 4 công việc trên (code toàn bộ trong hàm main()) – Điều đó là hoàn toàn khả thi. Nhưng bạn thử nghĩ xem, một mình bạn ôm cả 4 công việc đó thì liệu bạn có thể làm chủ nó được tốt không? bạn có thể dành thời gian để tối ưu & lớn mạnh mỗi công việc đó không? Bạn nghĩ sao nếu những lúc căng não khiến bạn quên hoặc thực hiện nhầm công việc đúng ra mình cần làm?

Biện pháp: Thuê 4 ông nhân sự về & trả lương cho họ, mỗi ông (hàm con) chỉ làm một việc duy nhất. Khi đó, công việc của sếp (là hàm main() ý) là làm chủ các ông nhân sự này, lúc nào cần thì gọi ông ý khiến cho mình & nếu có vấn đề gì ở 1 công việc nào đó thì cứ lôi cổ ông nhân sự đó ra mà giải quyết.

Vậy thì hàm trong C là gì? Hàm chính là các ông nhân sự trong vấn đề phía trên. Trong lập trình, hàm là các khối code nhỏ chỉ thực hiện một tính năng khẳng định của bài toán lớn.

Bạn có thể hình dung cái khung của công ty tư vấn du học phía trên sau thời điểm áp dụng phương pháp ta được như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

 

#include <stdio.hvàgt;

 

int

add

(

int

a

,

int

b

)

{

  

// hàm con đó là nhân sự làm công việc phép cộng

}

 

int

subtract

(

int

a

,

int

b

)

{

  

// hàm con đó là nhân sự làm công việc phép trừ

}

 

int

mutiply

(

int

a

,

int

b

)

{

  

// hàm con đó là nhân sự làm công việc phép nhân

}

 

float

devide

(

int

a

,

int

b

)

{

  

// hàm con đó là nhân sự làm công việc phép chia

}

 

int

main

(

)

{

    

// hàm đó là ông sếp

}

 

Ưu điểm khi dùng chương trình con

Sau đây là một số ưu điểm nổi trội của sử dụng chương trình con (hàm) mà mình có thể liệt kê, nhưng có 1 điều chắc cú rằng: Hãy nỗ lực thực hành viết code của bạn sử dụng hàm nếu có thể nhé.

  • Sử dụng chương trình con khiến code của bạn trông thanh tao hơn & ngăn nắp, đọc giả code sẽ dễ hiểu hơn bằng cách nhìn vào từng hàm con ta có thể đơn giản xác nhận vai trò của nó trong chương trình.
  • Đơn giản làm chủ, cải tiến & tìm lỗi chương trình. Bởi vì bạn biết rõ hàm nào đang làm gì, nếu mà chẳng may gặp lỗi thì bạn cũng lập tức xác nhận lỗi đó của hàm nào thay vì phải dò từng dòng trong hàm main
  • Viết 1 lần & gọi được ở nhiều nơi: Khi bạn dùng hàm thì bạn chỉ phải viết một lần & gọi tới nó bất kể lúc nào bạn mong muốn. Bạn cũng có thể đóng gói các hàm đó để sử dụng cho các chương trình khác

Cách hoạt động của hàm trong C

Hình ảnh dưới đây cho bạn thấy cách hoạt động của hàm (chương trình con) ở trong ngôn từ C. Khi một lời gọi hàm được thực thi thì:

  1. Chương trình của bạn sẽ nhảy tới nơi khái niệm hàm đó & thực thi các lệnh từ trên xuống dưới ở trong hàm đó.
  2. Khi hàm thực hiện xong, chương trình tiếp tục quay về thực hiện các lệnh phía sau lời gọi hàm.

Chương trình laptop bỏ túi dễ dàng

Sau đây mình sẽ lấy một chẳng hạn sử dụng hàm trong C (chương trình con) để xây dựng ứng dụng laptop bỏ túi dễ dàng thực hiện 4 tính năng căn bản là cộng, trừ, nhân, chia. Các bạn xem giải thích ở trong code cùng với xem video để hiểu hơn nhé.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

 

#include <stdio.hvàgt;

 

/*

    Cách khai báo hàm

 

    <kiểu dữ liệuvàgt; <tên hàm> (<các tham sốvàgt;){

        // thân hàm

        return <valuevàgt;; // value phải cùng kiểu <kiểu dữ liệuvàgt;

    }

*/

// Calculate sum of two number

// a: first number

// b: second number

int

add

(

int

a

,

int

b

)

{

    

int

sum

=

a

+

b

;

    

return

sum

;

// lệnh return trả về giá trị có cùng kiểu dữ liệu với kiểu dữ liệu của hàm

}

 

// Hàm tính hiệu của a – b

int

subtract

(

int

a

,

int

b

)

{

    

return

a

b

;

}

 

// Hàm tính tích a * b

int

mutiply

(

int

a

,

int

b

)

{

    

return

a *

b

;

}

 

// Hàm tính thương của a / b

// Chú ý b cần != 0

// Bạn phải ép kiểu tử hoặc mẫu để nhận được kết quả là số thực nhé

float

devide

(

int

a

,

int

b

)

{

    

return

(

float

)

a

/

b

;

}

 

 

int

main

(

)

{

    

int

a

=

3

,

b

=

4

;

    

// Sử dụng tên hàm để gọi nó,

    

// truyền các tham số đúng theo kiểu của hàm yêu cầu

    

printf

(

“n%d + %d = %d”

,

a

,

b

,

add

(

a

,

b

)

)

;

    

printf

(

“n%d – %d = %d”

,

a

,

b

,

subtract

(

a

,

b

)

)

;

    

printf

(

“n%d * %d = %d”

,

a

,

b

,

mutiply

(

a

,

b

)

)

;

    

if

(

b

!

=

)

{

        

printf

(

“n%d / %d = %f”

,

a

,

b

,

devide

(

a

,

b

)

)

;

    

}

}

 

Kết quả chạy chương trình:

1

2

3

4

5

6

7

8

 

PS G:c_courcesday_27vàgt; g++ .Calculator.cpp -o .Calculator

PS G:c_courcesday_27vàgt; .Calculator.exe

 

3 + 4 = 7

3 – 4 = -1

3 * 4 = 12

3 / 4 = 0.750000

 

Các nội dung sau sẽ nói rõ hơn về các loại hàm & rất là nhiều bài tập thực hành, bạn hãy tiếp tục theo dõi để trang bị cho mình học thức đầy đủ về hàm trong C nhé!

Các loại hàm trong C

Sau đây, mình sẽ lấy 1 chẳng hạn xem qua từ ebook số [2] để trổ tài cho các bạn thấy có 4 loại hàm trong C. Tất cả chúng ta sẽ dùng 4 cách viết hàm khác nhau để khắc phục cùng 1 bài toán: “Kiểm tra 1 số người dùng nhập từ bàn phím có phải là số nguyên tố không”. Sau cùng, tất cả chúng ta sẽ đi đến những tổng kết!

1. Hàm không có tham số, không có giá trị trả về

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

 

#include <stdio.hvàgt;

void

checkPrimeNumber

(

)

;

int

main

(

)

{

    

checkPrimeNumber

(

)

;

    

// argument is not passed

    

return

;

}

// return type is void meaning doesn’t return any value

void

checkPrimeNumber

(

)

{

    

int

n

,

i

,

flag

=

;

    

printf

(

“Enter a positive integer: “

)

;

    

scanf

(

“%d”

,

&n);

    

for

(

i

=

2

;

i

<

=

n

/

2

;

++

i

)

    

{

        

if

(

n

%

i

==

)

        

{

            

flag

=

1

;

        

}

    

}

    

if

(

flag

==

1

)

        

printf

(

“%d is not a prime number.”

,

n

)

;

    

else

        

printf

(

“%d is a prime number.”

,

n

)

;

}

 

Như bạn thấy, hàm checkPrimeNumber() không có tham số đầu vào, bản thân nó tự thực hiện nhận giá trị từ keyboard, kiểm soát & sau đó cũng in ra kết quả luôn. Vì là nó không trả về giá trị nên tất cả chúng ta dùng kiểu void, bạn sẽ học nó ở bài kế đến.

  • Hàm này thực hiện 3 tính năng cùng 1 thời điểm => 1 hàm chỉ nên làm 1 tính năng

2. Hàm không có tham số, có trả về giá trị

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

 

#include <stdio.hvàgt;

int

getInteger

(

)

;

int

main

(

)

{

    

int

n

,

i

,

flag

=

;

  

// no argument is passed

    

n

=

getInteger

(

)

;

    

    

for

(

i

=

2

;

i

<

=

n

/

2

;

++

i

)

    

{

        

if

(

n

%

i

==

)

{

            

flag

=

1

;

            

break

;

        

}

    

}

    

if

(

flag

==

1

)

        

printf

(

“%d is not a prime number.”

,

n

)

;

    

else

        

printf

(

“%d is a prime number.”

,

n

)

;

    

return

;

}

// returns integer entered by the user

int

getInteger

(

)

      

{

    

int

n

;

    

printf

(

“Enter a positive integer: “

)

;

    

scanf

(

“%d”

,

&n);

    

return

n

;

}

 

Trong đoạn code trên, hàm getInteger() nhập 1 số từ keyboard & trả ra cho tất cả chúng ta giá trị đó. Còn việc kiểm soát là số nguyên tố hay không thì tất cả chúng ta viết nó trong hàm main(). Tại vì tất cả chúng ta mong muốn viết hàm kiểm soát số nguyên tố thì hàm này cần tham số là “số cần kiểm tra”.

  • Như thế, hàm getInteger() chỉ thực hiện 1 tính năng => ok. Nhưng hàm main vẫn phải đảm nhận công việc kiểm soát số nguyên tố (công việc nặng nhọc nhất)

3. Hàm có tham số, không trả về giá trị

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

 

#include <stdio.hvàgt;

void

checkPrimeAndDisplay

(

int

n

)

;

int

main

(

)

{

    

int

n

;

    

printf

(

“Enter a positive integer: “

)

;

    

scanf

(

“%d”

,

&n);

    

// n is passed to the function

    

checkPrimeAndDisplay

(

n

)

;

    

return

;

}

// return type is void meaning doesn’t return any value

void

checkPrimeAndDisplay

(

int

n

)

{

    

int

i

,

flag

=

;

    

for

(

i

=

2

;

i

<

=

n

/

2

;

++

i

)

    

{

        

if

(

n

%

i

==

)

{

            

flag

=

1

;

            

break

;

        

}

    

}

    

if

(

flag

==

1

)

        

printf

(

“%d is not a prime number.”

,

n

)

;

    

else

        

printf

(

“%d is a prime number.”

,

n

)

;

}

 

Nhận ra, hàm checkPrimeAndDisplay() nhận vào là một số cần kiểm soát, sau đó thực hiện kiểm soát & in ra kết quả.

  • Hàm checkPrimeAndDisplay() đang làm 2 việc 1 lúc => cách viết hàm tốt thì 1 hàm chỉ làm 1 việc thôi.
  • Lần này hàm main đảm nhận việc nhập (tốt) => Hàm main nên phụ trách việc nhận input & xuất output.

4. Hàm có tham số, có trả về giá trị

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

 

#include <stdio.hvàgt;

int

checkPrimeNumber

(

int

n

)

;

int

main

(

)

{

    

int

n

,

flag

;

    

printf

(

“Enter a positive integer: “

)

;

    

scanf

(

“%d”

,

&n);

    

// n is passed to the checkPrimeNumber() function

    

// the returned value is assigned to the flag variable

    

flag

=

checkPrimeNumber

(

n

)

;

    

if

(

flag

==

1

)

        

printf

(

“%d is not a prime number”

,

n

)

;

    

else

        

printf

(

“%d is a prime number”

,

n

)

;

    

return

;

}

// int is returned from the function

int

checkPrimeNumber

(

int

n

)

{

    

int

i

;

    

for

(

i

=

2

;

i

<

=

n

/

2

;

++

i

)

    

{

        

if

(

n

%

i

==

)

            

return

1

;

    

}

    

return

;

}

 

Ở trường hợp lần này, hàm checkPrimeNumber() chỉ nhận trách nhiệm nhận vào 1 số & kiểm soát xem số đó có phải số nguyên tố hay không.

  • Hàm main phụ trách trách nhiệm lấy đầu vào, xuất kết quả => Tuyệt vời
  • Hàm con checkPrimeNumber() chỉ làm 1 việc duy nhất => Tuyệt vời

Mình chót lỡ đánh giá sau mỗi chẳng hạn rồi thì thôi các bạn tự điền câu chốt hạ giúp mình nhé. Việc sử dụng hàm cần khéo léo để code của tất cả chúng ta được “sạch sẽ”. Các bạn nhớ tham khảo thêm cả ebook xem qua nữa nhé!

Ebook xem qua

 

Xem Thêm  Tuyên bố IF của MySQL - cú pháp câu lệnh mysql if

Viết một bình luận