Bài viết được dịch và có tinh chỉnh dựa theo tựa “A Gentler Introduction to Programming”.
.    .    .

Cơ bản về luồng xử lý trong mã nguồn



Dòng mã, biểu thức và câu lệnh

Dòng mã hay là LOC — Line of Code là một đơn vị trong bất kì mã nguồn nào. Chương trình đơn giản nhất được tạo ra bởi từng dòng mã. LOC có thể là một từ khoá, kí tự hoặc câu lệnh. Đó chính là một dòng mã miễn là nó nằm trên tập tin mã nguồn của bạn.
Một ví dụ đơn giản về LOC:
area = 0.5 * base * height
0.5 * base * height là một biểu thức. Một biểu thức là sự kết hợp của các toán tử và toán hạng. Trong ví dụ trên, toán hạng là 0.5, base, height. Ta nhận thấy 0.5 chính là một kiểu dữ liệu thập phân thuộc dạng literal còn lại base và height là các biến số. Toán tử chính là phép nhân (*), thuộc vào toán tử số học arithmetic.
Các biểu thức có thể không có ý nghĩa riêng như là LOC. Khi chúng ta thực hiện việc gán giá trị cho một biến đó được coi là một câu lệnh, trong trường hợp này là biến area được gán giá trị trả về khi thực hiện tính toán biểu thức bên phía tay phải. Chúng sẽ vẫn là câu lệnh khi chúng ta đính kèm biểu thức một từ khoá, ví dụ :
return 0.5 * base * height
Đối với phần còn lại của phần này, chúng ta sẽ biểu diễn một câu lệnh là kí tự S. Câu lệnh thứ n sẽ là Sn trong một chuỗi (hoặc là tập hợp) các câu lệnh.
Để nắm bắt lập trình nhanh chóng, một điểm khởi đầu tốt là hiểu các luồng mã hoá cơ bản. Các luồng cơ bản cũng được gọi là luồng điều khiển — control flows. Một khi bạn hiểu những dòng này, bạn sẽ tìm thấy chúng bằng nhiều ngôn ngữ lập trình bạn học.
Lưu ý rằng các ví dụ được đưa ra trong bài viết này hoàn toàn là cơ bản. Bạn cần tham khảo ngôn ngữ bạn đang học để có được kiến thức chuyên sâu về các từ khoá mà nó cung cấp.
Ngoài ra cá luồng cơ bản được giới thiệu tại đây khác so với design pattern(mẫu thiết kế) trong lập trình. Bạn nên hiểu về những luồng cơ bản này rồi bạn sẽ bắt kịp với những mấu thiết kế phổ thông trong lập trình khi tìm hiểu sâu thêm.
Dưới đây là một số luồng cơ bản trong lập trình:
  • Sequential
  • Conditional/Branching
  • Iteration/Repetition/Loops

Tuần tự — Sequential

Đây là luồng xử lý cơ bản nhất trong lập trình, nơi mà mỗi một câu lệnh được thực thi rồi sẽ tới câu lệnh kế tiếp. Trong thực tế, mỗi luồng được xử lý rồi sẽ đến luồng tiếp theo.
S1
S2
S3
S4
.
.
.
Sn
Trong một số ngôn ngữ lập trình như Javascript, nó có thể thực hiện S3 trước S1. Điều gì sẽ xảy ra nếu S1 chặn một tác vụ nào đó có thể mất nhiều thời gian hơn như các hoạt động của cơ sở dữ liệu hoặc tập tin, được gọi là các tác vụ bất đồng bộ — asynchronous tasks. Có những cách xử lý các trường hợp như thế này. Không phải lo lắng, cách dễ dàng đó là tìm hiểu sâu hơn khi bạn chọn ngôn ngữ lập trình.

Câu lệnh điều kiện — rẽ nhánh — Conditional/Branching

Câu lệnh thực thi tuân theo các điều kiện đặt ra. Chìa khoá ở đây chính là từ khoá if. Nó là một trong các cách phân luồng xử lý mã nguồn hay được ứng dụng nhất:
If (condition) then:
S1
Trong ví dụ ở trên, thì S1 sẽ được thực thi hoặc không có gì được thực thi hết. S1 được thực thi khi và chỉ khi điều kiện — condition trả về giá trị true.
Dưới đây là một mẫu về câu lệnh điều kiện khác:
If (condition) then:
S1
S2
else:
S3
S4
Chúng ta cũng có dạng câu lệnh điều kiện phân cấp:
if (condition1) then:
S1
else if (condition2) then:
S2
else:
S3
Tại đây nếu condition1 là true, thì S1 sẽ được xử lý. Mặt khác condition2 mà trả về true thì S2 sẽ được thực thi. Và cứ thế tiếp tục.
Với việc phân cấp điều kiện nhiều, nhiều ngôn ngữ cung cấp câu lệnh switch. Dưới đây là ví dụ mẫu:
Switch value:
case condition1:
S1
break
case condition2:
S2
break
default:
S3
điều kiện condition1condition2 được so sánh với giá trị — value trong câu lệnh switch. Nếu bất kì trường hợp nào khớp với giá trị đưa ra, thi câu lệnh trong khối lệnh đó sẽ được thực thi.
Có những lựa chọn khác ngoài câu lệnh điều kiện. Một vài thứ nhất thiết bạn cần phải học thông qua ngôn ngữ bạn chọn đó là toán tử điều kiện (:?). Và các từ khoá khác có tính chất phân nhanh như cyclebreak. Hãy chắc chắn việc bạn dành thời gian đủ lâu để nắm được câu lệnh điều kiện — rẽ nhánh.

Vòng lặp — Iteration/Repetition/Loops

Vòng lặp là việc luồng xử lý giữ cho các câu lệnh có thể được chạy lặp đi lặp lại Theo một số điều kiện đặt ra và chỉ ngừng lại khi câu lệnh đó không còn thoả mãn điều kiện đặt ra.
Dưới đây là mẫu của vòng lặp:
while (condition):
S1
S2
Trong ví dụ ở trên, câu lệnh S1S2 có thể được thực hiện một lần, nhiều lần hoặc không được thực hiện. Nếu điều kiện đưa ra là đúng thì lần đầu tiên câu lệnh while sẽ thực thi, rồi S1S2 sẽ được xử lý. Điều kiện trong while sẽ được kiểm tra lại lần nữa, và S1S2 sẽ được thực thi mãi khi điều kiện vẫn thoả mãn là true.
Nó chỉ dừng vòng lặp khi điều kiện nhận giá trị là false thì S1S2 sẽ được ngừng thực thi.
Kết quả của câu lệnh trên khi điều kiện thoả mãn true trong 3 lần:
S1
S2
S1
S2
S1
S2
Luồng xử lý của mã nguồn là gì ? Nếu bạn trả lời là tuần tự, bạn đã hoàn toàn đúng. Tuy nhiên, như chúng ta có thể thấy, các luồng khác được xử lý một cách tuần tự.
Như việc lặp ở dưới đây:
do:
S1
S2
while (condition)
Trong ví dụ này, S1S2 sẽ được thực hiện trước ít nhất một lần hoặc nhiều lần. Bởi chúng sẽ được thực thi trước khi câu lệnh kiểm tra vào điều kiện.
Trong nhiều ngôn ngữ, các từ khó như do và while được cung cấp nhằm thực thi luồng xử lý lặp đi lặp lại. Một từ khoá phổ biến hơn đó là for. Dưới đây là mẫu câu lệnh for:
for (initialvalue; condition; decrement/increment initialvalue):
S1
S2
Rất nhiều ngôn ngữ có hỗ trợ foreach sử dụng để lặp qua một loạt các thành phần trong một đối tượng phức tạp như mảng hoặc dạng cấu trúc — struct.

Trắc nghiệm

Hãy nhận diện luồng xử lý trong mã nguồn Python bên dưới:
numlist=[]
cnt=0
while cnt >= 0:
m=int(raw_input())
if m < 0:
break
numlist.append(m)
cnt=cnt+1

Tổng kết

Luồng xử lý là kiến thức cơ bản. Đó là cách bạn gộp một khối mã nguồn với nhau và đặt tên cho chúng. Đó là cách mà bạn có thể gọi một khối mã nguồn mỗi lần bạn cần đến chúng. Đó còn được gọi là thủ tục — procedure. Trong trường hợp này nơi mà các đoạn mã thực hiện một vài tác vụ và trả về một giá trị, bạn đã có một hàm.
Việc các thủ tục và hàm được triển khai khác nhau trong các ngôn ngữ khác nhau. Bạn không thể bỏ qua các kiến thức cơ bản trong bất kì ngôn ngữ lập trình nào. Chúng là những kiến thức tối quan trọng cho việc tổ chức mã nguồn của bạn. Thực tế, việc xây dựng các khối mã nguồn của bạn được biết đến như là việc tái tổ chức mã theo dạng mô-đun (modular programming).
Các luồng xử lý mà bạn học được bạn hiểu là việc tổ chức các hàm, rồi tiếp theo bạn sẽ cần tìm hiểu đến đệ quy — recursion.
Đúng vậy, bạn sẽ tìm thấy việc lập trình thật thú vị thông qua việc tổ chức các hàm hay thủ tục thì đó là lúc bạn đụng đến hết các khai niệm tuần tự, câu lệnh điều kiện, câu lệnh lặp.

Tiếp tục tìm hiểu

Bạn đã học qua toàn bộ những khái niệm cơ bản nhất trong lập trình máy tính. Nếu bạn mong muốn tìm hiểu thêm nữa, hoặc muốn theo đuổi ngành lập trình phần mềm, thì tất cả những gì bạn cần làm là đào sâu hơn nữa. Có rất nhiều tài nguyên giúp bạn học hỏi thêm. Biết được mình ở mức độ nào sẽ giúp bạn chọn con đường học đúng đắn.
Cố gắng không bị choáng ngợp với những từ ngữ bạn nghe được từ những lập trình viên có kinh nghiệm hơn trong các mối quan hệ bạn có. Bạn có thể ghi chú lại những điều đó để tìm hiểu và đừng quá áp lực với những thứ đó. Dần dần bạn sẽ bắt kịp khi bạn học và thực hành nó nhiều.
Dưới đây là một số tài nguyên giúp bạn bắt đầu học và theo đuổi sự nghiệp lập trình:
Lưu ý: Tôi không khuyên các bạn đọc đồng chủ đề, Tôi tin rằng hành động nhỏ mỗi ngày bạn sẽ học được nhiều hơn thông qua việc thực hành nhiều. Đó là lý do tại sao tôi không để quá nhiều liên kết về học liệu ở trên. Hãy tự do tìm hiểu thông qua google và dựa trên những điều bạn đã biết nếu bạn không phải là người mới bắt đầu bước chân vào lập trình.

Trắc nghiệm

Chọn một trong hai thử thách sau:
  • Tìm lấy một ứng dụng đơn giản trên mạng và làm lại nó bằng ngôn ngữ lập trình bạn đang học.
  • Nghĩ ra bất kì một ý tưởng nào nếu nó đủ đơn giản hãy xây dựng nó.
    Tôi khuyến cáo rằng bài viết từ trang codementor sẽ giúp bạn có một khởi đầu tốt.
Đáp án cho phần trắc nghiệm
Hãy nhận diện luồng xử lý trong mã nguồn Python bên dưới:
  • Luồng xử lý tuần tự
  • Vòng lặp (câu lệnh while)
  • Điều kiện — rẽ nhánh (câu lệnh if)

.    .    .

Hãy tiếp tục ủng hộ và giữ kết nối với Vnknowledge các bạn nhé:
Xin cảm ơn các bạn!