Dành cho người học Java – Viết mã lệnh Java tốt? (Tiếp)

Thảo luận trong 'Java Core' bắt đầu bởi nhatlectv, 16/1/18.

  1. nhatlectv

    nhatlectv Stanford - Nâng tầm tri thức Thành viên BQT

    Hãy dùng một phong cách nhất quán

    Viết mã lệnh theo phong cách gì thực sự là vấn đề về sự cần thiết và cái có thể chấp nhận được trong môi trường của bạn là gì. Tôi thậm chí không biết đến một phong cách mà tôi có thể gọi là “tiêu biểu”. Nó là chuyện sở thích cá nhân. Ví dụ, những dòng lệnh sau có thể làm tôi giật nảy mình cho đến khi tôi biến đổi đi:

    publicvoidmyMethod()

    {

    if(this.a==this.b)

    {

    statements

    }

    }




    Vì sao điều đó lại làm tôi băn khoăn? Vì cá nhân tôi không ưa kiểu viết mã lệnh thêm cả loạt dòng mới, mà theo ý kiến của tôi, không cần thiết. Trình biên dịch Java ghi nhận những dòng mã lệnh sau đây cũng giống như vậy, và tôi tiết kiệm được vài dòng:

    publicvoidmyMethod(){

    if(this.a==this.b)

    statements

    }




    Không có cách viết nào là “đúng” hay là “sai”. Chỉ đơn giản là nó ngắn hơn cách kia. Vậy điều gì xảy ra khi tôi viết mã lệnh với những người thích cách đầu tiên hơn ? Chúng tôi trao đổi về nó, chọn ra kiểu chúng tôi sẽ dùng và sau đó thì trung thành với nó. Chỉ có một quy tắc nghiêm ngặt là hãy nhất quán. Nếu những người tham gia thực hiện một dự án áp dụng các phong cách khác nhau, việc đọc mã lệnh sẽ khó khăn. Hãy chọn một kiểu thôi và đừng thay đổi nữa.

    Tránh dùng lệnh switch

    Một vài lập trình viên Java thích dùng lệnh switch. Tôi thì nghĩ lệnh đó cũng hay, nhưng sau đó nhận ra rằng switch thực ra chỉ là một loạt lệnh if, và như thế có nghĩa là logic điều kiện sẽ xuất hiện ở nhiều nơi trong mã lệnh của tôi. Đó là sự lặp lại mã lệnh, và đấy là cái không chấp nhận được. Tại sao? Bởi vì có những mã lệnh giống nhau tại nhiều vị trí có thể khiến cho mã lệnh khó thay đổi. Nếu tôi có cùng lệnh switch ở tại 3 nơi và tôi muốn thay đổi cách xử lý một trường hợp cụ thể thì tôi phải thay đổi 3 đoạn mã lệnh.

    Bây giờ, nếu như bạn có thể tái cấu trúc mã lệnh sao cho chỉ còn có một lệnh switch thì sao? Tuyệt vời! Tôi không tin có bất kỳ chuyện tệ hại gì khi dùng nó. Trong một vài trường hợp, dùng switch lại khiến mã lệnh sáng tỏ hơn là nhiều lệnh if lồng nhau. Nhưng nếu bạn thấy nó xuất hiện ở nhiều nơi có vấn đề thì bạn nên sửa đi. Cách dễ nhất để khỏi vấp phải vấn đề này là tránh dùng lệnh switch trừ khi nó là công cụ tốt nhất cho công việc đó. Theo kinh nghiệm của tôi thì điều này rất hiếm khi xảy ra.

    Để chế độ public

    Tôi để dành lời khuyến cáo gây nhiều tranh cãi nhất đến phút cuối cùng. Hãy chuẩn bị tinh thần nào và hít thở thật sâu.

    Tôi tin bạn sẽ sai lầm khi đặt toàn bộ các phương thức của bạn ở chế độ truy nhập là public. Các biến cá thể đặt ở chế độ protected.

    Dĩ nhiên, nhiều lập trình viên chuyên nghiệp sẽ rùng mình khi nghĩ đến điều đó vì nếu mọi thứ đều công khai thì ai cũng có thể biến đổi chúng được, có thể bằng cả những cách bất hợp pháp. Trong một thế giới mà mọi thứ đều có thể truy cập công cộng, bạn phải phụ thuộc vào tính nguyên tắc của người lập trình trong việc đảm bảo rằng mọi người không thể truy nhập vào những thứ mà họ không nên truy nhập khi họ không được phép. Nhưng trong thực tế lập trình, ít có điều gì gây phiền toái hơn là muốn truy cập một biến hay một phương thức mà bạn không nhìn thấy được. Nếu bạn hạn chế truy cập những thứ trong mã lệnh và bạn coi rằng những người khác sẽ không truy cập được, thì có lẽ bạn thực sự là đấng toàn năng. Đó là một giả định nguy hiểm trong mọi thời điểm.

    Nỗi phiền toái này thường lộ ra khi bạn dùng mã lệnh của người khác. Bạn có thể thấy một phương thức thực hiện chính xác những gì bạn muốn làm, nhưng nó lại không cho phép truy cập công cộng. Đôi khi có lý do chính đáng để làm việc đó và việc hạn chế các truy nhập là có ý nghĩa. Thế nhưng, đôi khi lý do duy nhất để chế độ truy cập không là public là những người viết mã lệnh đã nghĩ rằng “Chả bao giờ có ai cần truy nhập vào đây cả”. Hoặc có thể họ đã nghĩ “Chẳng ai sẽ cần truy nhập vì…” và tiếp theo, không có một lý do đủ vững chắc. Nhiều khi người ta sử dụng chế độ private vì nó có sẵn đó. Đừng làm vậy.

    Hãy để các phương thức là public và các biến là protected cho đến khi bạn có lý do hợp lý để hạn chế truy nhập.

    Theo dấu chân của Fowler

    Bây giờ bạn đã biết cách làm thế nào để viết mã lệnh Java tốt và giữ cho nó chuẩn mực.

    Cuốn sách hay nhất trong ngành công nghiệp phần mềm là cuốn “Tái cấu trúc (Refactoring)” của Martin Fowler (xem Phần tài nguyên). Nó thậm chí còn rất hài hước nữa. Tái cấu trúc có nghĩa là thay đổi thiết kế của mã lệnh hiện có mà không làm biến đổi kết quả của nó. Fowler nói về các “mùi mã lệnh” đang xin được tái cấu trúc, và đi sâu vào chi tiết các kỹ thuật khác nhau (hoặc các kiểu tái cấu trúc khác nhau) để khắc phục chúng. Theo quan điểm của tôi, việc tái cấu trúc và khả năng viết mã lệnh kiểm thử đi trước (code test-first) (xem Phần tài nguyên) là những kỹ năng quan trọng nhất mà các lập trình viên mới vào nghề cần học. Nếu mọi người đã thạo cả hai, nó sẽ cách mạng hóa ngành công nghiệp này. Nếu bạn thành thạo ở cả hai kỹ năng, sẽ rất dễ kiếm việc làm, vì bạn sẽ có thể làm việc hiệu quả hơn so với đa số người tìm việc khác.

    Việc viết mã lệnh Java tương đối đơn giản. Viết mã lệnh Java “tốt” lại là một bí quyết. Bạn hãy tập trung để trở thành những người lành nghề.

    Trong bài này, bạn đã học về lập trình hướng đối tượng, khám phá cú pháp của Java để giúp bạn tạo ra các đối tượng hữu dụng, và hiểu biết về một IDE giúp bạn kiểm soát môi trường phát triển của mình. Bạn có thể tạo ra các đối tượng có khả năng thực hiện tốt một số việc, mặc dù dĩ nhiên là không phải tất cả mọi việc mà bạn có thể tưởng tượng ra. Nhưng bạn có thể mở rộng hiểu biết của mình theo nhiều cách, bao gồm cả việc nghiên cứu kỹ về Java API và khám phá các khả năng khác của ngôn ngữ Java qua các bài hướng dấn khác của developerWorks. Hãy xem phần Các tài nguyên để tìm tài liệu về tất cả các vấn đề này.

    Ngôn ngữ Java chắc chắn không là hoàn hảo; mọi ngôn ngữ đều có ưu, nhược điểm và các lập trình viên đều có ngôn ngữ ưa thích của mình. Tuy nhiên, học lập trình Java là công cụ tốt có thể giúp bạn viết nên các chương trình chuyên nghiệp chuẩn mực ở mức yêu cầu cao.
     

Chia sẻ trang này