Bài giảng Lập trình nâng cao: Cải tiến và tối ưu hóa - Trần Quốc Long

13 8 0
Bài giảng Lập trình nâng cao: Cải tiến và tối ưu hóa - Trần Quốc Long

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Lập trình nâng cao: Cải tiến và tối ưu hóa cung cấp cho người học các kiến thức: Vấn đề tồn đọng, tiếp tục cải tiến và tối ưu hóa; truyền tham số bằng giá trị, tham chiếu, tham chiếu hằng; từ khóa const. Mời các bạn cùng tham khảo.

Refactoring & Optimizing - Cải tiến tối ưu hóa https://github.com/tqlong/advprogram Nội dung ● Vấn đề tồn đọng ○ hình text bị trơi theo lần đánh → xấu, ○ chưa hiển thị lần đoán sai để người chơi dễ ○ code chưa tối ưu ● Tiếp tục cải tiến tối ưu hóa ○ Phiên 1.1: code tốt ○ Phiên 1.2: giao diện tốt ● Kỹ thuật ○ Truyền tham số giá trị, tham chiếu, tham chiếu ○ Từ khóa const Phiên 1.1: Cải tiến code ● ● ● ● Cơ chế truyền tham trị Tham biến Hằng tham chiếu Code sáng, an toàn Cơ chế truyền tham trị string update(strin g g u essed W ord , strin g w ord , char guess) { for (int i= w ord.length(); i> = 0; i ) { if (w ord[i] = = guess) { Chuyện xảy guessedW ord[i] = guess; với guessedWord } word đây? } retu rn g u essed W ord ; } //in m ain function if (contains(w ord, guess)) guessedW ord = update(guessedW ord, w ord, guess); Cơ chế truyền tham trị string update(string g u essed W ord , string w ord , char guess) { chép xâu ký tự: for (int i= w ord.length(); i> = 0; i ) { - 02 lần từ đối số vào if (w ord[i] = = guess) { tham số guessedW ord[i] = guess; } - 01 lần từ giá trị trả vào biến nhận kết } return g u essed W ord ; } //in m ain function if (contains(w ord, guess)) g u essed W ord = update(g u essed W ord , w ord , guess); Dùng tham biến để tránh chép void update(strin g & guessedW ord, strin g & w ord, char guess) { for (int i= w ord.length(); i> = 0; i ) { if (w ord[i] = = guess) { guessedW ord[i] = guess; Đọc ghi trực tiếp vào string } word, guessedWord main() } Không cịn nhu cầu return } Khơng cịn chép string //in m ain function if (contains(w ord, guess)) update(guessedW ord, w ord, guess); Dùng tham biến để tránh chép void update(strin g & guessedW ord, strin g & w ord, char guess) { for (int i= w ord.length(); i> = 0; i ) { (w ord[i] = = guess) { ●if Lợi ích việc dùng tham biến guessedW ord[i] = guess; ○ Giảm thời gian chạy chép liệu } ○ Giảm nhớ tạo biến } ○ Giảm nguy lỗi dùng nhớ động (sẽ quay lại sau) } ● Chú ý: ○ Bài để demo phương pháp Việc cải tiến thời gian chạy với khơng có ý nghĩa thực tiễn ○ Thực tế cần quan tâm cải tiến chương trình chạy chậm so với nhu cầu Dùng tham biến để tránh chép void update(strin g & guessedW ord, strin g & w ord, char guess) { for (int i= w ord.length(); i> = 0; i ) { (w ord[i] = = guess) { ●if Nhược điểm: guessedW ord[i] = guess; ○ Chưa cấm hàm update() sửa liệu không } sửa, chẳng hạn word } } ● Cách giải quyết: nên ○ Khai báo const cho tất tham số không sửa void update(string& guessedW ord, st string& w ord, char guess) Lời khuyên Để giảm bớt xử lý đảm bảo code an tồn: Đối với tham số khơng tầm thường ● Dùng tham chiếu biến ghi update(string& guessedWord, ) ● Dùng tham chiếu biến đọc update( const string& word) Clean code Hiện khơng cịn để cải tiến - Quy trình top-down + chia để trị cho ta tính mơ đun hóa chương trình, hàm phân chia hợp lý - Cách viết hàm theo kiểu kể chuyện kèm việc ý đặt tên biến tên hàm có nghĩa từ đầu làm chương trình dễ hiểu - Ta ý khai báo const cho tất giá trị không thay đổi → code an toàn Nhu cầu cải tiến/refactor code xuất ta tiếp tục sửa chương trình để cải thiện giao diện thêm tính (các sau) Tại code cần sáng? ● “Chương trình chạy đúng” yêu cầu thiếu quan trọng bậc Bên cạnh đó, cịn có tiêu chí khác hữu ích ● “Code sáng dễ hiểu” giúp ○ ○ ○ ○ dễ bảo trì, dễ phát triển tiếp dễ tìm lỗi chương trình chạy sai giảm mắc lỗi lập trình, lỗi logic ■ Kết chấm làm GuessIt chơi nhiều lần Lớp số 3: 100% nộp có lỗi logic (liên tục sinh lại số cần đoán, sinh số cần đoán lần ) dùng vịng lặp lồng thay tách hàm Tại code cần an toàn? ● Code an tồn giúp ta giảm nguy lỗi ○ Vơ tình sửa biến không sửa, ○ Sửa sai làm liệu vi phạm ràng buộc ● Không phải ta viết chương trình, khơng thể tin tưởng người khác cẩn thận biết hết cần tránh ● Khơng thể tin tưởng khơng nhầm/quên Phiên 1.2 (tự làm) - Chống trôi hình - Có thể in nhiều dịng trống trước vẽ giá treo cổ để đẩy hẳn hình ảnh lần đốn trước khỏi hình cố định giá treo cổ đáy hình - Hiển thị chữ đoán sai - Thêm biến string chứa chữ đoán sai cập nhật lần đoán sai, hiển thị lần chạy renderGame - Chuẩn hóa chữ hoa chữ thường input, - ‘R’ hay ‘r’ đoán cho từ “car” Gợi ý: thư viện hàm tolower() ... code chưa tối ưu ● Tiếp tục cải tiến tối ưu hóa ○ Phiên 1.1: code tốt ○ Phiên 1.2: giao diện tốt ● Kỹ thuật ○ Truyền tham số giá trị, tham chiếu, tham chiếu ○ Từ khóa const Phiên 1.1: Cải tiến code... const string& word) Clean code Hiện khơng cịn để cải tiến - Quy trình top-down + chia để trị cho ta tính mơ đun hóa chương trình, hàm phân chia hợp lý - Cách viết hàm theo kiểu kể chuyện kèm việc... động (sẽ quay lại sau) } ● Chú ý: ○ Bài để demo phương pháp Việc cải tiến thời gian chạy với khơng có ý nghĩa thực tiễn ○ Thực tế cần quan tâm cải tiến chương trình chạy chậm so với nhu cầu Dùng

Ngày đăng: 08/05/2021, 11:52

Mục lục

  • Cơ chế truyền tham trị

  • Cơ chế truyền tham trị

  • Dùng tham biến để tránh sao chép

  • Dùng tham biến để tránh sao chép

  • Dùng tham biến để tránh sao chép

  • Tại sao code cần trong sáng?

  • Tại sao code cần an toàn?

Tài liệu cùng người dùng

Tài liệu liên quan