Xin chào và chào mừng.
Chúng tôi đang bắt đầu một phần mới.
Phần của chúng tôi dựa trên các chức năng.
Vì vậy, chúng ta sẽ nói về một số về những điều cơ bản của chức năng trước tiên.
Một chức năng là một đơn vị mã chương trình được
thiết kế để hoàn thành một nhiệm vụ cụ thể, đó là một định nghĩa cấp cao.
Về cơ bản, chức năng sẽ là một cái gì đó mà bạn có thể
gọi ra để giúp bạn giảm sự trùng lặp mã.
Nhưng những gì nó làm là nó tự chứa
bên trong mã và nó chỉ có một số nhiệm vụ mà nó sẽ hoàn thành.
Các quy tắc cú pháp sẽ xác định cấu trúc của một hàm
và cách nó có thể được sử dụng.
Vì vậy, tùy thuộc vào những gì lập trình ngôn ngữ bạn sử dụng, các chức
năng có thể được định nghĩa khác nhau.
Đối với c, chúng ta sẽ nói chuyện về các quy tắc cụ thể đối với c.
Hầu hết các ngôn ngữ lập trình đều hỗ trợ khái niệm này về một chức năng và tôi sẽ cho bạn
biết những ưu điểm và tại sao chúng được hỗ trợ.
Một hàm trong c giống như chương trình con hoặc thủ tục trong các
ngôn ngữ lập trình khác.
Vì vậy, đôi khi bạn nghe thấy những thuật ngữ chương trình con và thủ
tục, giống như một hàm.
Đơn vị độc lập thực thi một số mã mà bạn có thể gọi.
Một số chức năng gây ra một hành động sẽ diễn ra.
Vì vậy, chúng tôi quen thuộc với một vài chức năng cho đến thời điểm này.
Chúng tôi đã nghiên cứu printf chức năng hiển thị kết
quả ra màn hình của bạn hành động, làm điều gì đó cho bạn.
Và kết quả là chúng tôi cũng đã xem xét tại chức năng scanf
lấy đầu vào từ bàn phím.
Một lần nữa, nó thực hiện một hành động khác.
Các chức năng khác mặc dù thực sự có thể chỉ tìm một
giá trị cho một chương trình để sử dụng.
Vì vậy, ví dụ khi chúng ta nghiên cứu chuỗi và mảng ký tự, chúng ta sẽ xem xét
các hàm cho chuỗi ký tự thao tác và thay đổi mọi thứ.
Có một chức năng cụ thể được gọi là độ dài khuấy và điều đó sẽ cho một
lập trình viên biết cách dài một chuỗi nhất định là.
Nó không thực hiện một hành động chỉ cung cấp thông tin lại cho bạn.
Vì vậy, các chức năng sẽ thực hiện nhiệm vụ tùy thuộc vào nhiệm vụ mà bạn
cần hoàn thành trong chương trình, nó sẽ gây
ra một hành động hoặc nó sẽ sửa đổi một giá trị chương trình hoặc trả về một giá trị hoặc cho bạn biết một
số thông tin trạng thái.
Ưu điểm của các chức năng.
Chúng ta sẽ sử dụng các hàm bởi vì có rất nhiều lợi thế.
Các chức năng cho phép chiến lược chia để trị.
Vì vậy, nếu bạn đã viết ra và đi và viết một chương trình
cỡ vừa hoặc một chương trình lớn, nó sẽ thực sự, thực sự khó để duy trì.
Sẽ rất khó để kiểm tra, gỡ lỗi và tìm và sửa bất kỳ lỗi nào nếu bạn
có một chức năng lớn.
Vì vậy, chia nhỏ và làm điều này chiến lược phân chia chinh
phục sẽ làm cho nó dễ dàng hơn rất nhiều tìm và sửa lỗi trong mã của bạn.
Và bạn có thể tưởng tượng một chương trình c duy nhất rằng tất cả những gì tôi có là chức năng
chính và có 5000 dòng trong đó.
Chúng tôi sẽ không có manh mối làm thế nào để tấn công vấn đề đó.
Nó thực sự, tổ chức thực sự kém.
Bạn không có bất kỳ sự gắn kết nào và bạn giống như đang lặn ngay trong đó để cố
gắng giải quyết một vấn đề.
Vì vậy, chúng ta sẽ sử dụng các hàm.
Chia và chinh phục về cơ bản có nghĩa là các nhiệm vụ đó có thể được chia thành
nhiều nhiệm vụ con độc lập.
Nó làm giảm tổng thể độ phức tạp của mã.
Bạn có thể tạo các chức năng riêng biệt cho mỗi nhiệm vụ con và sau đó bạn thậm
chí có thể tạo nhiều hàm hơn để phân chia nhiệm vụ con thành các nhiệm vụ con nhỏ hơn.
Mỗi khi bạn tạo thêm các chức năng, nó làm giảm sự phức tạp.
Mục tiêu của bạn phải là khi bạn tạo các chức năng
này và sử dụng phép chia và chinh phục chiến lược là làm cho các
chức năng của bạn gắn kết nhất có thể.
Và điều đó có nghĩa là đảm bảo mỗi chức năng chỉ thực hiện một nhiệm vụ, không có chức năng làm
5 nhiệm vụ khác nhau hoặc 10 nhiệm vụ khác nhau.
Nếu bạn viết một hàm đọc nhập từ bàn phím, có nó đọc đầu
vào từ bàn phím, không để nó kiểm tra một chuỗi hoặc kết quả hiển thị hoặc
bất cứ thứ gì tương tự.
Các chức năng cần phải nhỏ, và họ cần phải rất gắn kết.
Nhưng sự phân chia và chinh phục chiến lược thực sự tốt vì nó
làm giảm sự phức tạp đó.
Thay vì có một chức năng chính với 5000 dòng mã, bạn có thể có rất
nhiều chức năng đang thực hiện các nhiệm vụ cụ thể và bạn có
thể xác định chúng rất nhanh chóng.
Vì vậy, các chức năng sẽ giảm sự trùng lặp mã.
Và khi bạn giảm sự trùng lặp mã, nó sẽ giúp bạn tiết kiệm
thời gian khi viết, thử nghiệm và gỡ lỗi mã đó.
Nó cũng sẽ giảm lại kích thước của mã nguồn.
Và tại sao các chức năng giảm trùng lặp mã bởi vì nếu
bạn có một nhiệm vụ thay vì làm điều đó tác vụ lặp đi lặp lại và
viết đi viết lại cùng một đoạn mã và lặp đi lặp lại, bạn đóng gói
nhiệm vụ đó thành một hàm và bạn chỉ gọi hàm và hàm sẽ làm điều đó cho
bạn mỗi lần, bạn không có bất kỳ sự trùng lặp nào ở đó.
Nếu bạn phải làm một nhiệm vụ nào đó nhiều lần
trong một chương trình, bạn chỉ cần viết một chức năng một lần, giống
như tôi đã đề cập. Bạn không cần phải viết mã đó nhiều lần.
Vì vậy, một chương trình sau đó có thể sử dụng chức năng đó bất cứ khi nào cần thiết.
Và bạn cũng có thể sử dụng hoạt động trong các chương trình khác nhau và đó là
những gì cấu thành một thư viện.
Chúng tôi đã và đang làm điều đó, chúng
tôi đã sử dụng hàm printf, từ hàm thư viện chuẩn đầu vào đầu ra.
Và nó chỉ được viết một lần, và chúng tôi gọi nó hơn và hơn và hơn nữa.
Nếu chức năng đó không tồn tại, chúng tôi sẽ
phải thực hiện chức năng đó và đưa nó vào và chỉ cần tiếp tục lặp lại nó.
Vì vậy, các chức năng có thể tiết kiệm rất nhiều
thời gian và chúng có thể giảm mã nguồn của bạn và bạn có thể tái sử dụng chúng nhiều lần.
Vì vậy, nó cũng là một phần mềm kỹ thuật tái sử dụng.
Nó cũng giúp dễ đọc.
Khi bạn điều chỉnh chương trình của mình đó là những gì bạn đang
làm khi bạn tạo các chức năng riêng biệt này để thực hiện các nhiệm vụ cụ thể, chương trình
trở nên tổ chức tốt hơn nhiều.
Giống như tôi đã đề cập, nếu bạn có một quy trình, một chức năng chính
và nó có rất nhiều mã trong đó, nó sẽ khó làm theo hơn nhiều
so với một quy trình chính gọi 5 hàm và những chức năng đó làm những nhiệm vụ cụ thể.
Vì vậy, nó giúp ích cho việc tổ chức chương trình.
Nó giúp bảo trì chương trình.
Nó dễ đọc và dễ dàng hơn nhiều để thay đổi hoặc sửa bất kỳ mã nguồn nào.
Và hãy nhớ rằng, việc bảo trì giai đoạn này là giai đoạn đắt
nhất của vòng đời phần mềm, là nơi bạn đang sửa lỗi,
chương trình đã được phát hành và nơi bạn đang thêm các tính năng mới.
Tổ chức của bạn càng tốt chương trình
càng dễ bảo trì.
Vì vậy, tổ chức này, điều này khả năng đọc, điều này có thể theo dõi
những gì đang xảy ra trong mã nguồn của bạn rất quan trọng và
các chức năng giúp ích rất nhiều.
Cách tiếp cận phân chia và chinh phục cũng cho phép
các phần của chương trình được phát triển, thử nghiệm và gỡ lỗi một cách độc lập.
Khi bạn ra khỏi đó trong thực tế thế giới và bạn
bắt đầu làm việc trên mã, bạn sẽ nhận thấy rằng các chương trình thực sự, thực sự lớn.
Và có nhiều người làm việc trên các chương trình này,
hàng trăm thậm chí hàng nghìn.
Khi bạn có tất cả những người này làm việc trên một chương trình, sẽ dễ dàng hơn nhiều để
làm việc trên chương trình đó nếu bạn thực hiện cách tiếp cận chinh phục sự phân chia này
nếu bạn có các nhiệm vụ nhỏ mọi người làm và nó độc lập.
Bạn không chạm vào giống nhau mã nguồn và bạn có thể tiếp tục và
triển khai các tác vụ dễ dàng hơn nhiều.
Và khi bạn làm điều này và bạn có nhiều người làm việc trong
một dự án, nó có thể làm giảm sự phát triển chung thời gian mà lại
giảm chi phí bảo trì, giảm chi phí phát triển.
Các chức năng cũng có thể được sử dụng lại điều này một lần nữa sẽ làm giảm thời gian.
Và một lần nữa chúng tôi làm điều đó với hàm printf, sử dụng lại cái đó.
Nhưng bạn khi bạn viết người dùng của riêng bạn các chức năng được xác định, bạn có thể sử
dụng lại chúng nhiều lần trong chương trình.
Vì vậy, việc tái sử dụng phần mềm là rất quan trọng, lợi thế lớn của các chức năng.
Khi bạn đang nghĩ về các chức năng này.
Điều thú vị khác về thiết kế chương trình của bạn trên các chức năng mà bạn
muốn coi nó như một hộp đen.
Điều đó có nghĩa là gì khi bạn khi bạn hãy nghĩ về nó như một hộp đen, tất
cả những gì bạn đang nghĩ là đầu vào đến chức năng và đầu ra.
Và khi bạn chỉ tập trung vào đầu vào trong đầu ra, nó cho phép bạn
xem xét toàn bộ thiết kế trước khi bạn bắt đầu thực hiện.
Và vì vậy các chức năng nói chung sẽ giúp bạn có được kiểu suy nghĩ này, nơi bạn
có thể tập trung vào thiết kế.
Và tôi đã đề cập thiết kế là quan trọng.
Thiết kế là khi bạn bắt đầu lập kế hoạch ra chương trình của
bạn, cách bạn sắp xếp nó, cách bạn sẽ viết mã.
Và điều quan trọng là phải lập kế hoạch này trước khi bạn bắt đầu
thực hiện viết mã.
Và bằng cách suy nghĩ về các chức năng và chỉ nghĩ về đầu
vào và đầu ra, bạn có thể nghĩ về cách chương trình sẽ được tổ chức và những
chức năng nào bạn cần tạo.
Vì vậy, bạn không phải lo lắng về chỉ thực hiện trong các chi tiết.
Và điều này rất quan trọng vì điều đầu tiên bạn
muốn làm trước khi viết mã chỉ là suy nghĩ về thiết kế, bạn không muốn bắt đầu
nghĩ đến việc triển khai.
Rất nhiều vấn đề mà sinh viên có khi họ viết mã lần đầu
tiên là họ chỉ cần bắt đầu thực hiện.
Họ thậm chí không nghĩ về vấn đề, họ không nghĩ họ
sẽ giải quyết vấn đề như thế nào, họ chỉ bắt đầu viết mã.
Không bao giờ là một cách tiếp cận tốt.
Khi bạn đang nghĩ về việc viết lách mã và các chức năng, hãy
nghĩ về nó chỉ là đầu vào và đầu ra của chức năng và nó sẽ giúp
bạn với thiết kế của mình.
Vì vậy, chúng ta hãy xem xét một số ví dụ.
Chúng tôi đã sử dụng các chức năng tích hợp như như printf và scanf, như tôi đã đề cập.
Đó là tiêu chuẩn thư viện đầu ra đầu vào được cung cấp
bởi ngôn ngữ lập trình c.
Vì vậy, chúng tôi phần nào quen thuộc với những gì một chức năng là bởi vì chúng tôi đã sử
dụng nó, nhưng chúng tôi chưa hoàn thành tốt chi tiết cụ thể về cách bạn
xác định một hàm hoặc cách bạn thực sự vượt qua dữ liệu cho một chức năng, không có gì giống như vậy.
Nhưng với hàm printf, bạn nên nhận thấy
rằng nó có dữ liệu.
Bạn có thể truyền dữ liệu vào hàm.
Dữ liệu là các đối số giữa các dấu ngoặc đơn
theo sau tên hàm.
Chúng ta sẽ có toàn bộ bài giảng khác về các đối
số và tham số để giải thích chúng nhiều hơn.
Nhưng ở trình độ cao hiểu rằng bạn có thể chuyển dữ liệu cho một hàm.
Và hiểu điều đó bằng cách nhìn tại hàm printf.
Đối số đầu tiên cho printf hàm là dữ liệu mà
chúng tôi đang truyền cho nó là một chuỗi theo nghĩa đen, đó là tất cả
những ký tự bên trong dấu ngoặc kép.
Và sau đó chúng tôi cũng có những tranh luận có thể có 0 hoặc nhiều đối số
có thể thay đổi, một loạt các biến hoặc biểu thức có giá
trị sẽ được hiển thị.
Vì vậy, hãy nhớ, nếu chúng ta có bất kỳ định dạng nào các chỉ định trong đối
số đầu tiên, sau đó chúng ta sẽ có các biến trong điều này trong các đối số tiếp theo.
Vì vậy, bạn có thể vượt qua dữ liệu vào hàm printf.
Bạn cũng nên chú ý đến cách bạn có thể nhận lại thông tin từ một chức
năng, dữ liệu có thể được trả lại cho bạn.
Trong hàm scanf, một trong số các đối số là cách bạn sẽ lưu
trữ dữ liệu.
Và vì vậy bạn sẽ vượt qua nó biến và biến đó sẽ có giá
trị bất kỳ người dùng đã nhập vào bàn phím.
Vì vậy, đó là loại suy nghĩ của dưới dạng giá trị trả về trong một hàm.
Vì vậy, các chức năng rất có giá trị bởi vì họ có thể lấy dữ liệu vào chúng và sau đó họ
có thể trả lại dữ liệu từ chúng.
Vì vậy, một ví dụ mã hóa của một hàm và đây sẽ chỉ là một hàm mà
chúng ta sẽ gọi, nhưng đây là chức năng chính.
Chúng tôi quen thuộc với các chức năng chính, điểm
vào của chương trình.
Nhưng hãy nhìn xem điều này tốt đẹp như thế nào.
Chúng tôi đang gọi các chức năng đọc danh sách sắp xếp và trung bình.
Chúng tôi chỉ có 3 dòng mã.
Chúng tôi phải đi và thực hiện những nhưng nó làm cho chương trình có tổ chức hơn
vì chúng tôi ngay lập tức biết chương trình này đang làm gì.
Chương trình này sẽ đọc một danh sách, sau đó sẽ sắp
xếp một danh sách, sau đó sẽ hiển thị giá trị trung bình của danh sách
và danh sách chứa các số nổi.
Vì vậy, nó rất dễ đọc, nó sẽ rất dễ bảo trì.
Nếu chúng tôi có bất kỳ lỗi nào trong chương trình, chúng tôi sẽ ngay lập tức
biết cách tìm hoặc cô lập lỗi đó.
Nếu lỗi không được phân loại, chúng tôi có thể đi đến chức năng sắp xếp.
Nếu lỗi ở mức trung bình, chúng ta có thể đi đến chức năng trung bình,
rất dễ dàng để cô lập lỗi.
Vì vậy, khi chúng tôi triển khai những trong slide trước,
chúng tôi chỉ gọi chúng.
Để thực sự triển khai các chức năng, bạn phải viết mã bên trong
phần thân của hàm.
Bạn có thể sử dụng các chức năng được triển khai bởi ngôn ngữ c như printf
hoặc bạn có thể tạo các chức năng do người dùng xác định của riêng bạn.
Bạn không cần phải triển khai các hàm printf hoặc bất kỳ
hàm nào trong thư viện, bạn chỉ thực hiện các chức năng của riêng bạn.
Vì vậy, trong ví dụ trước này với sắp xếp danh sách đã đọc và mức trung bình, chúng
tôi sẽ phải đi và chúng tôi sẽ phải thực hiện chức năng đó.
Chúng tôi phải cung cấp một chức năng header, một phần thân hàm
thực sự đọc danh sách, việc sắp xếp danh
sách và tính trung bình của danh sách.
Chúng tôi không hoàn thành chỉ bằng cách xác định chúng ta phải thực hiện chúng.
Và khi bạn triển khai các hàm, bạn luôn
muốn sử dụng các tên hàm mô tả để làm rõ chương trình làm gì và nó
được tổ chức như thế nào.
Trong ví dụ trước, chúng tôi có một chức năng có tên danh sách đọc, khá rõ ràng những
gì đang làm, sắp xếp tên chức năng.
Chúng tôi không đặt tên cho hàm là x y hoặc z.
Chúng tôi đã mô tả chức năng đó.
Nó cũng giống như vậy khi bạn đang mô tả
hoặc tạo các biến, tên có ý nghĩa.
Và nếu bạn thực hiện các chức năng này nơi chúng đủ chung chung, nơi chúng
thực sự đang làm điều gì đó và họ đang lấy dữ liệu chung, bạn thực sự
có thể tái sử dụng chúng trong các chương trình khác, giống
như một chức năng thư viện.
Một lần nữa, hỗ trợ tái sử dụng phần mềm.
Vì vậy, trong các bài giảng sắp tới này, chúng ta sẽ nói về cách
chúng ta có thể xác định một hàm, cú pháp cụ thể, cách chúng ta có thể gọi
và gọi một hàm và cách chúng ta có thể truyền và trả lại dữ liệu từ chúng.
Đó là những gì chúng tôi sẽ tập trung trong các bài giảng sắp tới.
Tôi cũng muốn đề cập đến điều đó thói quen chính của chúng tôi
mà chúng tôi đã thấy nhiều lần trong mỗi c chương trình, đó là một chức năng.
Chức năng chính là một tên được công nhận trong hệ
thống c, nó chỉ ra nơi chương trình sẽ bắt đầu thực hiện.
Tất cả các chương trình c luôn có một chính.
Chức năng chính có thể đảm nhận dữ liệu khi bạn chuyển
đến nó, các đối số dòng lệnh hoặc nó không phải lấy dữ liệu.
Nó cũng có tùy chọn dữ liệu mà nó có thể trả về.
Bạn sẽ nhận thấy rằng chúng tôi sử dụng các hàm chính trả về 0.
Thông thường, nó được sử dụng khi bạn muốn trả lại mã lỗi.
Nhưng chúng tôi đã sử dụng các chức năng cụ thể đã có và
chức năng quan trọng nhất là chức năng chính đó và điều đó một lần nữa giúp tổ chức mã.
Chúng tôi luôn biết nơi chương trình đang bắt đầu bởi vì chúng
ta chỉ cần tìm cái chính.
Đây là một mô tả cấp cao của các chức năng loại xác định các ưu điểm
của các chức năng và chức năng chính xác là gì.
Bây giờ chúng ta muốn nói chuyện về việc thực hiện.
Cảm ơn bạn.