30/09/2018, 17:04

Làm sao để sử dụng biến hiệu quả hơn (part1)

Khi chương trình còn đơn giản thì việc sử dụng biến thường không thành vấn đề, nhưng khi bạn làm những chương trình lớn hơn thì việc sử dụng biến thế nào cho dễ quản lí, tránh lỗi không mong muốn và dễ bảo trì, nâng cấp sau này thì không đơn giản tí nào

#Part1: Một số lưu ý về khi khai báo biến và khởi tạo biến (Declarations and Initializing Variables)

##Không sử dụng tính năng khai báo ẩn(Implicit Declarations)

Một số ngôn ngữ hỗ trợ khai báo ẩn, tức là khi bạn quên mất không khai báo biến nào đó thì compiler sẽ tự động khai báo cho bạn (ví dụ như Visual Basic). Chức năng này thực sự rất nguy hiểm và đây là một số lưu ý với tính năng này:

Tắt khai báo ẩn. Một số trình biên dịch cho phép tắt khai báo ẩn. Ví dụ, trong Visual Basic bạn có thể dùng câu lệnh Option Explicit, câu đó sẽ bắt bạn phải khai báo toàn bộ các biến trước khi bạn sử dụng chúng.

Khai báo tất cả các biến. Khi bạn gõ một biến mới, hãy khai báo nó, dù cho compiler không yêu cầu

##Khởi tạo biến

Đây là 3 trường hợp phổ biến về việc biến tự dưng có những giá trị mà bạn không ngờ tới:

  • Biến từ đầu đã chưa hề được gán giá trị. Vì thế nên giá trị của nó có thể là bất kì giá trị nào trong bộ nhớ từ khi khởi động chương trình.

  • Giá trị của biến đã “hết hạn sử dụng”. Biến đã được gán một giá trị tại một số thời điểm nào đó, nhưng giá trị đó sau này không còn hợp lệ nữa.

  • Làm việc với con trỏ. Khi làm việc với con trỏ nếu không cẩn thận bạn rất dễ bị dính những lỗi cực kì khó debug, vì triệu chứng lỗi của con trỏ thường hay thay đổi theo thời gian nên có thể nói lỗi về con trỏ là "nỗi khiếp sợ " của lập trình viên.

Và đây sẽ là cách để bạn tránh những trường hợp như vậy xảy ra:

Khởi tạo biến ngay khi nó được khai báo.

 float studentGrades[ MAX_STUDENTS ] = { 0.0 }

Khởi tạo biến ngay trước khi nó được dùng lần đầu tiên.

Ví dụ:


Dim accountIndex As Integer

accountIndex = 0
' code using accountIndex
...

Dim total As Double
total = 0.0       <-- 1
' code using total
...

Dim done As Boolean
done = False       <-- 2
' code using done
While Not done
...
(1) total được khai báo và khởi tạo gần với vị trí nó được sử dụng lần đầu tiên
(2) done cũng được khai báo và khởi tạo gần với vị trí nó được sử dụng lần đầu tiên

Đây chính là ví dụ cho Nguyên Tắc Tiệm Cận: “Hãy giữ những thứ có liên quan ở gần nhau”. Ta có thể áp dụng nguyên tắc này trong việc giữ những comment gần với code mà được chúng giải thích, hoặc là giữ sự thiết lập vòng lặp gần vòng lặp hoặc là giữ những lời gọi (tham chiếu) đến 1 biến gần nhau (cái này sẽ được nói chi tiết trong bài nói về phạm vi biến) và còn rất nhiều trường hợp để áp dụng nguyên tắc này nữa.

Sử dụng final hoặc là const khi có thể.Với những biến mà được khai báo bằng final trong Java hoặc const trong C++, bạn có thể bảo vệ biến của bạn từ khi bạn khởi tạo cho nó một giá trị nào đó.

Và bạn hãy nhớ chú ý đến các biến kiểu như biến đếm. Những biến như là i, j, k,sumtotal thường được sử dụng làm biến đếm, biến tích trữ. Lỗi cơ bản trong lập trình là việc quên mất không reset các biến đếm trước khi sử dụng chúng tiếp ở lần sau.

Hãy tận dụng lợi thế của các cảnh báo của compiler. Nhiều trình biên dịch cảnh báo bạn rằng bạn quên khởi tạo biến.

Luôn kiểm tra tính hợp lệ của các tham số truyền vào. Trước khi bạn gán giá trị truyền vào, hãy chắc chắn rằng nó hợp lệ.

Sử dụng memory-access checkers để debug mấy lỗi về con trỏ (chưa dùng cái này bao giờ, bác nào biết xin chỉ giáo )

Debug lỗi con trỏ bằng cách nhập những giá trị đặc biệt. Giá trị 0 là lựa chọn tốt vì nó dễ bị phát hiện ra hơn khi chúng được sử dụng. Với vi xử lí Intel, 0xCC là một giá trị khá tốt để sử dụng. Một ích lợi khác của giá trị 0xCC là nó rất dễ dàng nhận ra trong memory dump - và nó ít khi được sử dụng với lí do chính thống. Ngoài ra, bạn cũng có thể sử dụng hằng số 0xDEADBEEF cho việc này. (vãi cả thịt bò chết hình như có liên quan đến câu hỏi tuyển dụng của google thì phải)

Và cuối cùng là đừng quên khởi tạo bộ nhớ làm việc khi bắt đầu chương trình.


Bài viết có tham khảo một số nội dung trong cuốn Code Complete và các tài liệu khác


Part2 ở đây: Làm sao để sử dụng biến hiệu quả hơn (part2)
Part3 ở đây: Làm sao để sử dụng biến hiệu quả hơn (part3)
Part4 ở đây: Làm sao để sử dụng biến hiệu quả hơn (part 4)

Hoa Hoa viết 19:05 ngày 30/09/2018

Hay lắm! Dịch tiếp đi bạn ơi!

Làm giàu, làm giàu, làm giàu..... viết 19:19 ngày 30/09/2018

Mình thì dùng tới đâu tạo biến đến đó. Nhiều khi khá rắc rối.

Mai Anh Dũng viết 19:07 ngày 30/09/2018

Bài này hay, mà có vài đoạn đọc hơi khó hiểu. Vì có một số thuật ngữ ít được dùng trong tiếng Việt, Thành cố gắn thêm từ tiếng Anh vào bên cạnh thuật ngữ tiếng Việt, ví dụ như thế này là ổn

Không sử dụng tính năng khai báo ẩn(Implicit Declarations)

Thành Phạm viết 19:11 ngày 30/09/2018

Anh xem đoạn nào không ổn để em sửa luôn , tại có cái em còn chưa học, không biết nên dùng tiếng anh hay tiếng việt

Mai Anh Dũng viết 19:12 ngày 30/09/2018

À, anh chỉ góp ý chỗ này, phần khai báo và khởi tạo. Nhiều bạn nắm được thuật ngữ tiếng Việt nhưng không nắm thuật ngữ tiếng Anh. Anh nghĩ nên thêm vào.


P/S: Lần đầu tiên đi phỏng vấn anh cũng gặp câu hỏi phân biệt definedeclare bằng tiếng Anh. Lúc đó anh khá choáng, may mà nhìn mấy câu tiếp theo, thấy cách người ta dùng chữ definedeclare nên anh mới đoán ra được

Mr. July viết 19:10 ngày 30/09/2018

P/S: Lần đầu tiên đi phỏng vấn anh cũng gặp câu hỏi phân biệt define và declare bằng tiếng Anh. Lúc đó anh khá choáng, may mà nhìn mấy câu tiếp theo, thấy cách người ta dùng chữ define và declare nên anh mới đoán ra được

Anh @ltd giải thích luôn câu này để anh em lỡ sau này có gặp hoàn cảnh tương tự còn biết cách giải quyết đi anh

Mai Anh Dũng viết 19:14 ngày 30/09/2018

Đạt có viết một bài ở đây:

Giải thích chung chung: Khai báo: là giới thiệu sự tồn tại của một biến với kiểu dữ liệu cụ thể một hàm với cấu trúc trả về và tham số nhận vào Định nghĩa: là trình bày rõ kiểu dữ liệu và giá trị khởi tạo một biến và yêu cầu compiler cấp vùng nhớ cho biến này cấu trúc và nội dung của một hàm/class (sẽ ví dụ sau) Giải thích và ví dụ cho biến: Khai báo biến: Ta có thể viết như sau, bắt buộc phải có từ khóa extern thì mới gọi là khai báo. int main() { extern int cu_lac_gion…
Nguyễn Thành Đạt viết 19:17 ngày 30/09/2018

Bài viết rất hay, mình đang đọc quyển “The art of readable code” chắc lúc nào rảnh cũng theo chân chủ top dịch cho mọi người.

Thành Phạm viết 19:06 ngày 30/09/2018

Tuyệt vời!!! hóng bài dịch của bác đấy

Bài liên quan
0