Hướng dẫn dùng codecorrect python
Nếu bạn làm việc 1 mình, mọi thứ dường như dễ dàng để làm việc. Nhưng điều gì sẽ xảy ra khi code của bạn cần được người khác review, hỗ trợ khi có lỗi hoặc bạn chuyển qua làm việc team-work ? Đến lúc ấy, bạn cần phải biết về "chuẩn định dạng code chung". Show Thông thường thì với mỗi công ty/nhóm sẽ có chung một chuẩn quy tắc (code conventions) để dễ dàng review code chéo cho nhau. Tuy nhiên nếu các bạn là một lập trình viên Python, thực sự là các bạn đã được ưu ái hơn các lập trình viên của ngôn ngữ khác rất nhiều vì kể cả khi các bạn không tham gia vào một team làm việc nào, các bạn cũng dễ dàng được "học" và làm quen với chuẩn định dạng code "toàn cầu" có tên PEP-8. Python Enhancement Proposal #8 (PEP-8)Python Enhancement Proposal #8 (thường được viết tắt PEP-8), là tập hợp các chỉ dẫn về định dạng code, phong cách lập trình được chia sẻ chung giữa các lập trình viên Python. PEP-8 được đề xuất bởi các chuyên gia trong "hội đồng" sáng lập ngôn ngữ lập trình Python. Việc viết code theo đúng chuẩn chung PEP-8 sẽ giúp cho các lập trình viên cảm thấy thoải mái hơn khi đọc code của nhau, kiểu như là đọc code người khác mà như đang đọc code của mình vậy. PEP-8 cung cấp nhiều chỉ dẫn để lập trình viên có thể viết "clean code" trong Python. Bạn có thể tìm thấy nhiều điểm chung trong PEP-8 và những hướng dẫn được đề cập đến trong cuốn sách "Clean Code: A Handbook of Agile Software Craftsmanship - Robert C. Martin". Toàn bộ các chỉ dẫn của PEP-8 được cung cấp trên trang chủ python.org và được cập nhật mỗi khi có thay đổi. Tóm tắt lại thì chuẩn PEP-8 gồm các mục lớn sau:
Trong bài viết, tôi sẽ thông tin đến các bạn chuẩn PEP-8 trong việc trình bày các đoạn mã nguồn gồm:
Indentation - Thụt lề, dòng
1. Nguyên tắc 04 khoảng trắng:Sử dụng bốn khoảng trắng cho mỗi level của đoạn code. Điều này mang ý nghĩa cú pháp của Python. Nếu số lượng khoảng trắng không đủ, khi thực hiện chạy, chương trình sẽ báo lỗi. Ví dụ: Theo thói quen, khi thực hiện xuống dòng, chúng ta thường dùng tab để thụt dòng nhưng các pythonista khuyên chúng ta nên sử dụng khoảng trắng thay vì thực hiện nhấn phím tab. Nếu vẫn muốn sử dụng tab thì trên các text editor/IDE , bạn cần setup/config thật chuẩn xác sao cho 1 lần nhấn tab tương ứng với 2 hoặc 4 khoảng trắng. Nếu một ngày nào đó, bạn phải
edit code trên một editor "lạ", đừng vội dùng tab, hãy dùng 4 lần space đề phòng trường hợp báo lỗi 2. Mỗi dòng nên có độ dài nhỏ hơn 79 ký tự.Có khá nhiều tranh cãi trong việc setup layout code 1 dòng nên có bao nhiêu ký tự là vừa đủ, 79, 109 hay nhiều hơn. Các biểu thức dài khi biễu diễn trong một dòng sẽ quá 79 ký tự, nếu cần phải xuống dòng sẽ phải thực hiện thụt vào 4 khoảng trắng (xuống 1 level) so với khoảng thụt vào của dòng đầu tiên. Nếu dòng cuối cùng của những ngắt dòng 79 ký tự là dấu : và chuẩn bị cho một block ở level thấp hơn thì dòng cuối cần thụt dòng vào thêm 4 white-space so với dòng bên trên để phân biệt rõ hơn các block level. Ví dụ: White-space -Khoảng trắngKhoảng trắng, tương đương với 01 lần gõ phím space (phím dài nhất trên bàn phím cho bạn nào chưa biết ). PEP-8 cung cấp khá nhiều chỉ dẫn để các lập trình viên làm theo với white-space sao cho code có thể nhìn thật thân thiện. 1. Đặt khoảng trắng trước và sau (bao xung quanh) các toán tử nhị phân, logic và
phép gán: wrong:
correct:
wrong:
correct:
2. Với các toán tử số học +, -, *, /, // lựa chọn bao xung quanh các toán tử bằng khoảng trắng (ở cả hai bên) hoặc không có khoảng trắng
nào. wrong:
correct:
Trong trường hợp sử dụng Ví dụ: wrong:
correct:
4. Khi bạn muốn comment code, sau dấu wrong:
correct:
Blank-line - Dòng trốngDòng trống, đúng như cái tên của nó, đây là một dòng khi chúng ta nhấn ENTER trên bàn phím và lưu ý xóa hết toàn bộ white-space (nếu có trên dòng này), tức là con trỏ chuột khi ở blank-line sẽ nằm ở vị trí đầu tiên bên trái. 1. Trong một file (module), phía trên và phía dưới (bao xung quanh) của phần định nghĩa function, class là 02 blank-line. 2. Với các function được định nghĩa trong một class thì bao xung quanh của function là 01 blank-line. 3. Dòng cuối cùng của một file/module là một dòng trống. Ví dụ:
Công cụ hỗ trợĐể nhớ hết chỗ rule trên cũng mệt đầu vô cùng, tất nhiên đã đưa ra chuẩn thì ông Guido và các cộng sự cũng sẽ đưa ra công cụ để hỗ trợ các lập trình viên phát hiện các vi phạm là style. Công cụ thường được mọi người dùng trên command-line có tên flake8 (https://pypi.org/project/flake8/). Các bạn có thể install package này từ kho của python:
Sau khi cài đặt xong, copy/paste hoặc gõ lại script dưới đây, lưu lại vào thành file:
Mở terminal, di chuyển đến thư mục có chứa file pep8_sample.py, thực hiện câu lệnh:
Bạn sẽ nhận được một loạt các lỗi:
Đừng hốt hoảng, chúng ta sẽ từ từ phân tích từng đoạn nhé (phân tích từ cuối lên để đỡ phải "reload" não nhiều lần) pep8_sample.py:46:1: W391 blank line at end of file Chúng ta sẽ xóa bớt các dòng trắng, giữ lại 01 dòng trắng là dòng 44. và chạy thử lại lệnh flake8 nhé.
Warning tại dòng 46 đã hết, chúng ta chuyển tiếp sang warning tiếp theo:
Báo hiệu tại dòng 20, 21, 22 có vấn đề về độ dài của dòng (>79 ký tự). Chúng ta sẽ phải xử lý xuống dòng thật khéo léo để xóa bỏ phần warning này.
Warning sẽ đổi từ mã lỗi nọ sang mã lỗi khác:
Với 3 warning ở dòng 21, 22, 23, chúng ta cần phải điều chỉnh lại số lượng space giống như rule số 3 ở phần Indentation phía trên (thụt vào đúng 4 khoảng trắng với dòng trên) Nhưng khi thực hiện check warning, chúng ta sẽ nhận được 01 warning mới
Có nghĩa là dòng kiểm tra logic cuối cùng phải được đẩy vào một level (4 space) Tiếp tục check flake8 cho file này
Xóa bớt 01 khoảng trắng đi và tiếp tục check flaske8 Đến đây, chúng ta sẽ dễ dàng thực hiện sửa các lỗi tại dòng 13, 14, 16 Sau khi sửa lại, chúng ta sẽ có một đoạn script "đúng chuẩn" như sau:
Kiểm tra flake8 đã clear hết warning. Ngoài công cụ flake8 ở trên, cộng đồng lập trình viên Python còn cung cấp nhiều các công cụ khác để giúp các lập trình viên Python có thể "hoàn thiện" code của mình như autopep8, pylint,....Hoặc các bạn có thể sử dụng các tính năng hiện đại của IDE (VSCode, Pycharm,..) để tự động hiển thị warning vê style theo các rule của pep8. Kết luậnNếu xác định theo nghề lập trình viên Python thì bạn nên đọc toàn bộ hướng dẫn trên trang chủ, nếu không có nhiều thời gian, bạn có thể đọc một vài quy tắc (tóm tắt) đã được liệt kê bên trên - những thứ mà bạn chắc chắn nên làm theo để có thể vươn ra "biển lớn" - kết nối với các lập trình viên Python ở khắp mọi nơi. Cảm ơn các bạn đã quan tâm đến bài viết của tôi, hẹn gặp lại ở bài viết tiếp theo liên quan đến pep8: Naming |