Giải thích về function trong lập trình cho beginner

Thinh Pham
3 min readJan 23, 2020

--

Giải thích về function cho beginner

Function dịch ra tiếng Việt là hàm số, chức năng, tác dụng.
Function trong lập trình không giống như hàm số trong toán học nên bạn đừng cố liên tưởng tới nó.
Một chương trình phần mềm thường được cấu tạo từ nhiều function khác nhau.
Nội dung của function là những đoạn code có thể tái sử dụng.
Mỗi function có đầu vào và đầu ra riêng của nó.
Đầu ra của function này có thể là đầu vào của function khác.

Liên tưởng

Một ví dụ thực tế cho các bạn dễ liên tưởng, một hệ thống làm sữa chua với nguyên liệu đầu vào là sữa đặc có đường, nước, một hộp sữa chua khác (để tạo men)

Máy làm sữa chua

Như bạn thấy trong hệ thống này có 3 cái “máy” làm 3 nhiệm vụ khác nhau:

- Máy trộn (trộn 2 nguyên liệu bất kì vào nhau)
- Máy ủ (ủ nguyên liệu đầu vào ở một nhiệt độ nhất định)
- Máy làm lạnh (làm lạnh nguyên liệu đầu vào ở một nhiệt độ nhất định)

Máy trộn được “tái sử dụng” lại ở bước thứ 2, có 2 đầu vào, 1 đầu ra. Giả sử tương lai bạn có làm một hệ thống làm bánh cần đến máy trộn nguyên liệu thì chiếc máy này hoàn toàn có thể được “tái sử dụng” phải không?

Nguyên liệu đầu ra của chiếc máy này được cho vào đầu vào của chiếc máy kia, đến cuối quy trình bạn nhận được sữa chua thơm ngon.

Chương trình thực tế

Khi bạn thiết kế một chương trình phần mềm cũng vậy, bạn thường sẽ tư duy để chia nó ra thành nhiều công đoạn, mỗi công đoạn có thể được coi như một function đảm nhiệm công việc của công đoạn đó.

Hãy cùng brainstorm một chương trình tính tổng tất cả các chữ số lẻ trong một string, nếu không có chữ số lẻ nào thì trả về 0. Chương trình này có một đầu vào và một đầu ra. Đầu vào là một string và đầu ra là một số.

Ví dụ với đầu vào là "A129485730FA" thì đầu ra sẽ là 25 (tổng của 1, 9, 5, 7, 3)

Để xây dựng được chương trình này, ta có thể chia nhỏ ra thành các công đoạn sau:

  • Công đoạn 1: chia nhỏ string này ra thành các ký tự
    - Đầu vào: string nói
    - Đầu ra: một array ['A', '1', '2', …, 'F', 'A]
  • Công đoạn 2: lọc để lấy các ký tự '1', '3', '5', '7', '9'
    - Đầu vào: array ở công đoạn
    - Đầu ra: một array mới chỉ chứa các ký tự số lẻ ['1', '9', '5', '7', '3']
  • Công đoạn 3: chuyển đổi các ký tự sang dạng số
    - Đầu vào: array đầu ra của công đoạn 2
    - Đầu ra: array mới gồm các số [1, 9, 5, 7, 3]
  • Công đoạn 4: tính tổng các số
    - Đầu vào: array đầu ra của công đoạn 3
    - Đầu ra: tổng các số

Nếu tư duy như vậy thì chúng ta có thể hoàn toàn xây dựng chương trình một cách độc lập, có thể có 4 người phụ trách viết code cho 4 chức năng trên, miễn là đảm bảo đầu vào, đầu ra. Khi tất cả hoàn thành, chỉ việc lắp ráp chúng lại với nhau là xong.

Code mẫu

Dưới đây là code demo cho hệ thống tính tổng các số lẻ nói trên. Nếu có chỗ nào bạn không hiểu thì cũng đừng lo, bạn sẽ hiểu tất cả ở các bài sắp tới.

// Step 1
function splitString(str) {
return str.split('');
}
// Step 2
function filterOdds(arr) {
return arr.filter(function(x) {
return ['1', '3', '5', '7', '9'].indexOf(x) >= 0;
});
}
// Step 3
function toNumber(arr) {
return arr.map(function(x) {
return Number(x);
});
}
// Step 4
function sum(arr) {
return arr.reduce(function(sum, num) {
return sum + num;
}, 0);
}
// lắp ráp (function có thể gọi function khác bên trong nó):
function sumOddsInString(str) {
var characters = splitString(str);
var oddCharacters = filterOdds(characters);
var oddNumbers = toNumber(oddCharacters);
var result = sum(oddNumbers);
return result;
}
// chạy thử:
console.log(sumOddsInString("A129485730FA"));
console.log(sumOddsInString("12345678"));

--

--