2 Mã lệnh chương trình
2.7 Phát triển tăng dần
Nhưng lệnh gán sau thì không: >> y+1 = x
error: invalid lvalue function called in expression Một điểm khác biệt nữa là ở chỗ phép gán chỉ là tạm thời, theo nghĩa sau đây. Khi bạn gánx = y+1, bạn nhận được giá trịhiện thờicủay. Nếu sau nàyythay đổi, xsẽ không thay đổi theo.
Điểm khác biệt thứ ba là một đẳng thức toán là một phát biểu có thể đúng hoặc không đúng. Chẳng hạn,y=y+ 1là một phát biểu sai với mọi giá trị củay. Trong Octave,y = y+1là câu lệnh gán hợp lệ và có ích. Nó đọc vào giá trị hiện thời củay, tăng thêm một, và thay thế giá trị cũ với giá trị mới này.
>> y = 1; >> y = y+1 y = 2
Với mã lệnh Octave, có thể bạn sẽ thấy lợi hơn khi đọc dấu bằng là “nhận giá trị” thay vì “bằng.” Do vậyx = y+1được đọc là “xnhận giá trị củaycộng với 1.”
Để kiểm tra mức độ hiểu các lệnh gán của bạn, hãy thử làm bài tập sau:
Exercise 2.2 Hãy viết một số dòng lệnh nhằm tráo đổi giá trị của hai biếnxvà
y. Đặt mã lệnh bạn viết vào trong tập tin có tên làswapvà chạy thử nó.
2.7 Phát triển tăng dần
Khi bắt đầu viết mã lệnh dài hơn một vài dòng, lúc đó bạn có thể thấy mình dành càng nhiều thời gian để gỡ lỗi. Nếu như bạn viết càng nhiều mã lệnh trước khi bắt tay vào việc gỡ lỗi thì sẽ càng khó tìm ra trục trặc tiềm ẩn trong chương trình.
Phát triển tăng dầnlà một cách lập trình nhằm giảm thiểu công sức dành cho gỡ lỗi. Các bước cơ bản của nó gồm có:
1. Luôn bắt đầu với một chương trình chạy được. Nếu bạn có một ví dụ trong sách hoặc một chương trình mà bạn đã viết tương đồng với chương trình đang làm, thì hãy lấy nó để bắt đầu. Còn nếu không, hãy bắt đầu với điều mà bạn biết rằng luôn đúng, như x=5. Chạy chương trình và khẳng định chắc rằng bạn đang chạy chương trình mà bạn muốn chạy.
Bước này rất quan trọng, vì ở đa số các môi trường [xây dựng chương trình], có rất nhiều điều nhỏ nhặt làm bạn rối lên mỗi khi bắt đầu một dự án mới. Hãy dẹp chúng qua một bên để có thể tập trung vào lập trình.
2. Mỗi lúc chỉ sửa một chỗ, và có thể kiểm tra được chỗ sửa này. “Kiểm tra được” có nghĩa ảnh hưởng của việc sửa đổi có thể hiện trên màn hình và bạn kiểm tra được. Tốt nhất là bạn cần biết được rằng kết quả đúng là gì, hoặc có khả năng kiểm tra nó bằng một phép tính toán khác.
3. Chạy chương trình xem sự thay đổi có hiệu quả không. Nếu có, hãy quay trở lại Bước 2. Nếu không, bạn cần phải gỡ lỗi, nhưng nếu sự thay đổi nói trên rất nhỏ thì thường bạn sẽ nhanh chóng tìm ra lỗi.
Khi quá trình trên hoạt động tốt, bạn sẽ thấy rằng thường những thay đổi có tác dụng ngay lần đầu, hoặc sai lầm (nếu có) sẽ dễ thấy. Đó là một điều tốt, và dẫn đến Định lý thứ năm về gỡ lỗi:
Cách gỡ lỗi tốt nhất là cách mà ở đó bạn không phải làm. Trên thực tế, có hai vấn đề gắn với phát triển tăng dần:
• Đôi khi bạn phải viết thêm mã lệnh để có thể tạo ra kết quả dưới dạng nhìn thấy được, giúp cho việc kiểm tra. Mã lệnh thêm vào này được gọi làdàn giáovì bạn dùng nó để xây dựng chương trình nhưng sau này sẽ bỏ nó đi khi chương trình hoàn tất. Nhưng thời gian tiết kiệm được từ việc gỡ lỗi thường luôn xứng đáng với thời gian bỏ ra để dựng dàn giáo.
• Khi bạn mới bắt đầu, thông thường sẽ không rõ bằng cách nào bạn có thể chọn các bước kế tiếp từx=5đến chương trình mà bạn muốn viết. Có một ví dụ về cách làm này ở Mục 5.7.
Nếu bạn tự thấy mình viết nhiều dòng lệnh trước khi bắt tay vào kiểm tra, và phải dành nhiều thời gian để gỡ lỗi thì bạn nên thử cách phát triển tăng dần.