Kinh nghiệm lập trình website mã nguồn mở PHP

Code chạy chưa đủ, hãy làm code chuẩn

Code chạy chưa đủ hãy làm code chuẩn

Giới thiệu

Viết code (mã nguồn) chuẩn là gì? Đó không phải là viết code sao cho chương trình chạy, hoạt động. Mà còn phải đảm bảo dòng code đó đáp ứng những quy chuẩn chung đã được cộng đồng lập trình viên công nhận. Nhằm mục đích dễ dàng đọc hiểu, bảo trì và nâng cấp chương trình đó.

Xem nhẹ việc chuẩn hóa trong lập trình là một tội ác. Với các dự án lớn nhiều thành viên làm việc, nếu họ bắt đầu “chế” ra những chuẩn riêng, thì sau này source code sẽ trở nên khó quản lý, khó tái sử dụng trong tương lai. Một lập trình viên có kinh nghiệm làm việc nhiều năm, nhưng code không theo chuẩn thì cũng giống như người có tài mà không có đức – kẻ vô dụng.

Có rất nhiều quy chuẩn trong lập trình (coding standards), mỗi ngôn ngữ, mỗi nền tảng, đều có các chuẩn chung và riêng. Để am hiểu chuẩn của công nghệ mình đang sử dụng không phải là chuyện đơn giản. Do đó, trước khi viết một cái hàm, một câu điều kiện… Hãy tra cứu trong các tài liệu chuẩn hóa của ngôn ngữ đó, để điều chỉnh lại cho đúng, từ từ sẽ thành thói quen, mỗi dấu cách, mỗi dấu xuống hàng đều quan trọng. Sau này để tăng tốc độ lập trình ta có thể dùng công cụ, chương trình để tự động định dạng, tuy nhiên ta vẫn phải vững vàng các quy chuẩn trước, chớ lạm dụng việc tự động hóa.

Naming

Nói về cách đặt tên biến, tên hàm, tên class.
http://www.wellho.net/mouth/4611_Hungarian-Camel-Snake-and-Kebab-variable-naming-conventions.html

  • Camel case: camelCase or CamelCase
  • Kebab case: kebab-case
  • Snake case: snake_case
  • Hungarian: iHungarian or sHungarian (based on data type)

Tùy theo ngôn ngữ mà sử dụng cho phù hợp, ví dụ như trong CSS đặt kebab-case là chuẩn. JavaScript, PHP thì hiện nay dùng camelCase và CamelCase. Ngày trước có thời chuộng Hungarian, vì trước tên biến là 1 chữ cái viết tắt của kiểu dữ liệu, nhưng sau này sử dụng các IDE (hay Editor – trình soạn thảo) thì Hungarian style thành vô ích, ta dễ dàng biết được kiểu dữ liệu khi ấn Ctrl + hover lên tên biến.

camelCase dùng cho tên biến, tên hàm, phương thức. CamelCase dùng cho tên lớp, tên tập tin, thư mục.
Đây là chuẩn phổ biến nhất, dùng cho nhiều ngôn ngữ nhất hiện nay.

Chuẩn hóa trong JavaScript

Tài liệu uy tín của google https://google.github.io/styleguide/jsguide.html
Tài liệu của crockford http://javascript.crockford.com/code.html
Đọc tài liệu suông nhàm chán thì bạn có thể dùng tool. Copy js code vào jslint để kiểm tra xem đã chuẩn chưa http://www.jslint.com/ và sửa cho đến khi chuẩn.

Chuẩn hóa trong PHP

Hiện nay chuẩn PSR là chuẩn được sử dụng phổ biến nhất dành cho PHP
Chuẩn này có khá nhiều phần http://www.php-fig.org/psr/
Tuy nhiên ta sẽ xem thử vài ví dụ thường gặp nhất:

Ví dụ 1

if($this->abc){
    $foo = $this->bar;
}else {
    $foo = $this->foo;
}

Xem đoạn code trên bạn có biết vì sao nó sai chuẩn PSR không?
về cách xuống dòng đã chuẩn, if, else, while, for… dấu mở ngoặc nhọn { nằm chung dòng.
Nhưng dấu cách sai chuẩn, giữa if và dấu ngoặc tròn phải có dấu cách, dấu đóng ngoặc tròn cũng vậy:

if ($check) {
    //DO Something
} else {
    //Do Something ELSE
}

Ví dụ 2
Khi nào nên cùng dòng và xuống dòng dấu ngoặc nhọn?
Chuẩn này rất hay bị sai, hãy thử kham khảo:

class Foo extends Bar implements FooInterface
{
    public function sampleFunction($a, $b = null)
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }
}

Ta thấy rằng class, function sẽ xuống dòng rồi mới mở ngoặc nhọn. Câu điều kiện if, else hoặc loop như for, while, foreach, hoặc try, catch… sẽ có dấu ngoặc nhọn chung dòng.

Tất cả các nguyên tắc trên đều nằm trong tài liệu của PSR http://www.php-fig.org/psr/psr-2/
Trước khi bắt tay vào viết 1 đoạn code, hãy tập thói quen kham khảo tài liệu này.
Tài liệu tiếng Việt về PSR https://github.com/wataridori/php-coding-standard-vietnamese/blob/master/PSR-2.md

Công cụ quét coding standards

Nhiều người nói rằng họ không có thời gian cho chuẩn hóa, code logic, fix bugs… vẫn là ưu tiên số 1.
Tất cả chỉ là ngụy biện! Cộng đồng đã phát triển rất nhiều công cụ giúp việc code chuẩn trở nên dễ dàng hơn bao giờ hết. Bạn có thể tích hợp với các IDE phổ biến, để nhắc nhở hoặc tự động sửa định dạng code lại giúp bạn.
PHP_CodeSniffer https://github.com/squizlabs/PHP_CodeSniffer
Công cụ này rất mạnh, quét được PHP, JavaScript và CSS
Ta có thể tích hợp vào PHPStorm https://confluence.jetbrains.com/display/PhpStorm/PHP+Code+Sniffer+in+PhpStorm

PHP-CS-Fixer https://github.com/FriendsOfPHP/PHP-CS-Fixer Công cụ này chuyên sửa lỗi coding standards tự động, tuy nhiên đôi khi nó cũng hoạt động không tốt lắm, cẩn thận.

Theo tôi, nên sử dụng PHP_CodeSniffer tích hợp vào IDE, code tới đâu IDE sẽ nhắc nhở bạn tới đấy. Ta sẽ tự sửa ngay tại chỗ. Hoặc nếu đang tuôn trào mạch code thì cứ để đấy, sau rà lại sửa dần cũng được.

Kết thúc

Ngoài các chuẩn trên các bạn cũng có thể kham khảo thêm:
Chuẩn HTML
Chuẩn C#
Hay bài viết những tranh cãi về coding style

Khi vào môi trường làm việc, hãy quan sát, học hỏi chuẩn của công ty, của đặc thù ngôn ngữ, framework mình đang sử dụng. Tất cả mọi công nghệ đều có chuẩn riêng và được cộng đồng tuân theo, vậy tại sao bạn lại không?

Code chạy chưa đủ, hãy làm code chuẩn
Đánh giá bài viết

Gửi phản hồi

Your email address will not be published. Required fields are marked *