Các code style gây tranh cãi trong lập trình

1. Xài Tab hay 4 spaces

Trước hết hãy nói cho mình biết khi lập trình bạn dùng gì để thụt đầu dòng (indent). Có người thích dùng tab, người khác lại dùng 4 dấu space để thụt dòng. Vậy vì sao lại xảy ra tình trạng tranh cãi, ai thích dùng gì thì dùng chứ. Đó là vì có ý kiến cho rằng dùng 4 space mới là code chuẩn, còn dùng tab thì không. Vậy sự thật ở đây là gì? Nên dùng 4 spaces hay dùng tab?

Tab or Spaces

Theo như mình tìm hiểu thì không phải lúc nào 1 tab cũng bằng 4 spaces, đặc biệt là trên những code editor khác nhau, trên những font chữ khác nhau và trên những dòng code dài ngắn khác nhau. Và không gì làm bạn tức điên hơn khi nhận một source từ người khác mà chưa format chuyển từ tab sang space, lúc đó code sẽ nhảy indent loạn xạ cả lên. Nếu làm việc một mình thì không sao nhưng nếu làm theo nhóm thì có lẽ bạn sẽ bị người khác phàn nàn vì chưa format theo space.

Dùng 4 spaces thì chậm hơn vì phải gõ tới 4 lần nhưng sẽ đọc được chuẩn code trên các editor. 1 space sẽ vẫn mãi là 1 cột trong khi 1 tab không phải lúc nào cũng hiển thị là 4 cột trong các editor khác nhau. Vì vậy không phải bình thường mà người ta đưa nó vào code style PSR-2.

Code MUST use an indent of 4 spaces, and MUST NOT use tabs for indenting.

N.b.: Using only spaces, and not mixing spaces with tabs, helps to avoid problems with diffs, patches, history, and annotations. The use of spaces also makes it easy to insert fine-grained sub-indentation for inter-line alignment.”

Thật ra đây không hẳn là tranh cãi mà đúng hơn là sự nhầm lẫn và sự lười biếng trong giới lập trình hiện nay.

Vì vậy nhiều editor đã có hỗ trợ chuyển đổi từ tab sang spaces, có cái còn hỗ trợ tự động khi tab là sẽ chuyển luôn không cần chuyển bằng tay. Mình đang dùng phpStorm!

2. CamelCase hay snake_case

Đây là code style thứ hai gây tranh cãi nhiều nhất trong giới lập trình phải không?

Camelcase hay snake_case (underscore)

CamelCase là gì? Đó là kiểu viết code theo dạng lạc đà (u bướu) mà chắc ai cũng dễ dàng nhận ra khi mới bắt đầu học code. Các chữ cái đầu từ đều được viết hoa. Đó cũng là kiểu mình dùng để viết khi mới học code thời còn ngồi trên ghế nhà trường.

Ví dụ: $limitCount, $myFirstVariable, $lastName, $uncensoredLink,….

snake_case là gì? Snake case hay còn gọi là underscore case, là cách viết code dùng dấu gạch dưới để phân cách các từ, tất cả từ đều được viết thường.

Ví dụ: $is_die_link, $my_angel, $lego_is_my_life,….

Vậy thì phong cách nào là tốt nhất?

Vòng 1: Ý kiến

Phe phái cuồng Camel Case

  • CamelCase dễ gõ hơn và gạch chân rất khó gõ vì phải Shift + _

  • CamelCase chiếm ít không gian hơn (rõ ràng là nó ngắn hơn).

Phe phái cuồng snake_case

  • snake_case là cách viết tự nhiên và do đó sẽ dễ đọc hơn. Phân cách đơn giản chỉ bằng dấu gạch dưới. isIllicitIgloo khó đọc hơn is_illicit_igloo rất nhiều
  • Khi đặt tên hằng thì nhất quán hơn là dùng Camel case. THIS_IS_A_CONSTANT thì dễ đọc và dễ hiểu hơn thisIsAConstant quá nhiều.
  • Dễ dàng viết hoa các chữ viết tắt. Ví dụ: TCP_IP_connection đẹp và đúng đắn hơn tcpIpConnection.

Vòng 2: Phản biện

Anti fan của Camel Case

  • snake_case đem lại những khoảng không gian cần thiết để phân biệt được các từ cấu tạo nên biến, hàm trong code.

Anti fan của snake_case

  • snake_case quá xấu, CamelCase nhìn thanh lịch hơn hẳn.
  • Lạc đà thì lúc nào cũng hiền lành và có ích hơn rắn (lầy vậy luôn).

Vòng 3: Kết luận của chủ blog jusfunny

Mấy ông rườm rà rắc rối vãi. Thích gì thì dùng nấy thôi, theo mình nghĩ thì đó chỉ là vấn đề thói quen và sở thích. Nếu bạn thấy thoải mái với cách dùng CamelCase thì không phải là snake_case xấu và không phù hợp. Mặc dù cũng có một số nghiên cứu nói rằng CamelCase sẽ khiến tốc độ đọc giảm xuống 13,5% so với snake_case nhưng đó chỉ là nghiên cứu, mình thích gì thì mình dùng thôi.

Một vấn đề nữa là tùy thuộc vào source code bạn đang làm, nếu tất cả code và teammate tuân thủ theo CamelCase thì nên dùng theo CamelCase và ngược lại với snake_case.

3. Vị trí dấu ngoặc nhọn

Mấy chế thường đặt dấu ngoặc nhọn ở vị trí nào? Trên dòng hay xuống dòng

<?php
// Kiểu 1: same line formatting

class Car() {
    // Do something
}

hay

<?php
// Kiểu 2: next line formatting
class Car ()
{
    // Do something
}

Same line formatting:

  • Dễ đọc hơn vì chỉ cách nhau có 1 khoảng trắng giữa dấu mở ngoặc và đối tượng phía trước
  • Gọn gàng hơn, không làm phình to số dòng
  • Dễ dàng phân biệt và tìm dấu ngoặc đóng

Next line formatting:

  • Cũng khá dễ đọc nhưng sẽ làm phình to số dòng code
  • Ngược lại, nó dễ dàng tìm dấu ngoặc đóng và cả hai đều cùng 1 vị trí

Bản thân thời đi học mình không dùng kiểu 2 bao giờ. Vì lúc đó khá là lười, kiểu 1 sẽ khiến số dòng code ngắn lại, tiết kiệm được số dòng code trên code editor và thời gian lăn chuột.

Nhưng khi đi làm, điều kiện tiếp xúc và viết code theo kiểu 2 nhiều lên, và cũng có dịp được học standard code style PSR chứ không viết lung ta lung tung như hồi đi học nữa. Mình hiểu rằng việc viết code theo cách nào cũng không quan trọng, miễn là phù hợp với dự án hiện tại, phù hợp với phong cách của nhóm để mọi người dễ làm việc (mà đa số là dựa vào PSR làm chuẩn).

Tất cả những tranh cãi này là một số ít những tranh luận hay ho mà mình gặp phải trong suốt 1 năm đi làm vừa qua. Còn bạn thì sao? Bạn đã gặp những vấn đề thú vị nào, hãy cùng chia sẻ với nhau bên dưới phần comment.

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s