Java Bài 6: Ép Kiểu & Comment Source Code

Posted by
Rating: 5.0/5. From 31 votes.
Please wait...

Được chỉnh sửa ngày 26/10/2020.

Chào mừng các bạn đến với bài học Java số 6, bài học về cách các ép kiểu và comment source code trong Java. Bài học này nằm trong chuỗi bài học lập trình ngôn ngữ Java của Yellow Code Books.

Bài hôm nay chúng ta sẽ nói về 2 vấn đề “nhỏ”, đó là ép kiểucomment source code, bạn cũng nên biết nhỏ ở đây là nhỏ về tổng số chữ viết, chứ thực ra 2 vấn đề hôm nay đều rất quan trọng cho các bài học kế tiếp đấy nhé. Với kiến thức về ép kiểu, chúng là kiến thức nền để bạn hiểu rõ cách sử dụng các kiểu dữ liệu khác nhau trong các ứng dụng của bạn. Còn comment source code sẽ trở thành phong cách viết code sao cho có đầy đủ chú thích dễ hiểu cho chính bạn và những người khác đọc source code của bạn sau này.

Nào để hiểu nó là gì, mời bạn đến với bài học.

Khái Niệm Ép Kiểu

Trước khi đi sâu vào tìm hiểu về ép kiểu, mình cũng xin nhắc lại một chút, là chúng ta đã từng làm quen với việc khai báo một biến (hoặc hằng), khi đó bạn cần chỉ định một kiểu dữ liệu cho biến hoặc hằng đó trước khi sử dụng, việc khai báo một kiểu dữ liệu ban đầu như vậy mang tính tĩnh. Có nghĩa là nếu bạn định nghĩa biến đó là kiểu int, nó sẽ mãi là kiểu int, nếu bạn định nghĩa nó là kiểu float, nó sẽ mãi là kiểu float. Có bao giờ bạn thắc mắc nếu đem hai biến có kiểu dữ liệu khác nhau này vào tính toán với nhau, liệu nó sẽ tạo ra một biến kiểu gì? Và liệu chúng ta có thể thay đổi kiểu dữ liệu của một biến, hay một giá trị đã được khai báo hay không?

Câu hỏi trên cũng chính là nội dung của bài ép kiểu hôm nay. Cụ thể có thể mô tả ép kiểu như sau, ép kiểu là hình thức chuyển đổi kiểu dữ liệu của một biến sang một biến mới có kiểu dữ liệu khác. Vậy việc ép kiểu này không làm thay đổi kiểu dữ liệu của biến cũ, nó chỉ giúp bạn tạo ra một biến mới với kiểu dữ liệu mới, và mang dữ liệu từ biến cũ sang biến mới này. Khái niệm là vậy, còn mục đích là gì các bạn hãy đọc tiếp bài học hôm nay nhé.

Nên nhớ là vì các bạn chỉ mới làm quen với kiểu dữ liệu nguyên thủy, nên ép kiểu hôm nay cũng chỉ nói đến ép kiểu dữ liệu nguyên thủy mà thôi.

Phân Loại Ép Kiểu

Nếu phân loại ép kiểu dựa vào khả năng lưu trữ của biến, thì chúng ta có hai loại ép kiểu sau.

  • Nới rộng (widening) khả năng lưu trữ: việc ép kiểu này sẽ làm chuyển đổi dữ liệu từ kiểu dữ liệu có kích thước nhỏ hơn sang kiểu dữ liệu có kích thước lớn hơn. Điều này không làm mất đi giá trị của dữ liệu. Ví dụ ban đầu bạn có một biến kiểu int, có giá trị là 6, bạn ép dữ liệu từ kiểu int sang float, rồi gán vào biến mới float, thì biến mới float sẽ mang giá trị 6.0. Việc ép kiểu theo dạng này thông thường người ta cứ để cho hệ thống thực hiện một cách ngầm định. Bạn sẽ hiểu ngầm định là gì ở bên dưới
  • Thu hẹp (narrowwing) khả năng lưu trữ: việc ép kiểu này sẽ làm chuyển đổi dữ liệu từ kiểu dữ liệu có kích thướng lớn hơn sang kiểu dữ liệu có kích thước nhỏ hơn. Điều này có thể làm mất đi giá trị của dữ liệu. Ví dụ bạn ban đầu bạn có một biến kiểu float, có giá trị là 6.5, bạn ép dữ liệu từ kiểu float sang int, rồi gán vào biến mới int, thì biến mới int sẽ mang giá trị 6. Việc ép kiểu này không thể để cho hệ thống thực hiện một cách ngầm định được, lúc này hệ thống sẽ báo lỗi, bạn phải thực hiện ép kiểu tường minh cho nó.

Kiểu phân loại thứ hai được chia làm hai dạng, đó là ngầm định, và tường minh. Việc chia thành 2 dạng như dưới đây nó mang tính đặt tên để gọi đến, chứ bản chất của nó vẫn tương ứng với phân biệt theo khả năng lưu trữ trên kia.

  • Ép kiểu ngầm định: việc ép kiểu này có thể diễn ra một cách tự động bởi hệ thống, khi hệ thống biết lúc nào cần phải nới rộng khả năng lưu trữ, thì hệ thống sẽ làm. Như mình có nhắc đến ở ngay trên đây, đó là kiểu nới rộng này sẽ không làm mất đi giá trị của biến. Khi bắt đầu thực hiện ép kiểu, hệ thống sẽ kiểm tra các nguyên tắc sau, nếu thỏa sẽ ép.
    • byte có thể ép kiểu sang short, int, long, float, double.
    • short có thể ép kiểu sang int, long, float, double.
    • int có thể ép kiểu sang long, float, double.
    • long có thể ép kiểu sang float, double.
    • float có thể ép kiểu sang double.
  • Ép kiểu tường minh: khi không thỏa điều kiện để có thể tự động ép kiểu, thì hệ thống sẽ báo lỗi. Việc còn lại là bạn phải chỉ định ép kiểu một cách tường minh. Vì cách ép kiểu này có thể sẽ làm mất đi giá trị của dữ liệu, cho nên rất cần bạn đưa ra quyết định, chứ hệ thống không dám tự quyết. Bạn sẽ chỉ định như sau khi muốn thực hiện việc ép kiểu tường minh này.
(kiểu_dữ_liệu_cần_ép) tên_biến;

Ví Dụ Ép Kiểu Ngầm Định

Với cách ép kiểu này bạn chú ý là chúng ta không cần làm gì cả, cứ code đi rồi hệ thống sẽ tự thực hiện việc ép kiểu thôi. Bạn hãy nhìn code sau.

public class MyFirstClass {
  
    public static void main(String[] args) {
        byte i = 50;
        short j = i;
        int k = j;
        long l = k;
        float m = l;
        double n = m;
  
        System.out.println("This is a byte: " + i);
        System.out.println("This is a short: " + j);
        System.out.println("This is a int: " + k);
        System.out.println("This is a long: " + l);
        System.out.println("This is a float: " + m);
        System.out.println("This is a double: " + n);
    }
  
}

Bạn thấy với i ban đầu được khai báo là kiểu byte với giá trị 50, sau phép gán cho biến j (giá trị là short) thì giá trị 50 trong biểu thức này được chuyển tự động thành kiểu giữ liệu short cao hơn và gán vào biến j. Tương tự cho các phép gán vào k, l, m, n. Kết quả in ra như hình sau.

Kết quả sau khi ép kiểu ngầm định
Kết quả sau khi ép kiểu ngầm định

Nhưng nếu bạn thử trắc nghiệm bằng cách kêu hệ thống ép một kiểu dữ liệu lớn hơn về kiểu nhỏ hơn xem. Hệ thống sẽ báo lỗi ngay. Và vì vậy bạn cần phải can thiệp mục kế tiếp dưới đây.

int i = 50;
short j = i;

Ví Dụ Ép Kiểu Tường Minh

Quay lại ví dụ báo lỗi trên đây, hệ thống đã từ chối tự động ép kiểu ngầm định, vậy nếu vẫn có nhu cầu muốn ép kiểu thì bạn hãy ép kiểu tường minh cho nó, lúc này bạn cần dùng đến cấu trúc ép kiểu tường minh mà mình có đưa ra ở trên kia, như vầy.

public class MyFirstClass {
  
    public static void main(String[] args) {
        int i = 50;
        short j = (short) i;
  
        System.out.println("This is a short: " + j);
    }
  
}

Bạn hãy nhìn vào dòng short j = (short) i;, dòng nàysẽ ép kiểu giá trị của i về short và gán cho biến j. Việc bạn chỉ định ép kiểu với (short) nhìn vào là biết ý đồ ngay, vì vậy mới có cái tên là tường minh.

Bạn hãy xem một ví dụ nữa thực tế hơn, có một số trường hợp bạn muốn bỏ dấu thập phân của một kiểu số thực, cách nhanh nhất để làm điều này là ép kiểu số thực này về một kiểu số nguyên. Cách ép kiểu này thực chất là làm mất giá trị của biến một cách… cố tình.

public class MyFirstClass {
  
    public static void main(String[] args) {
        double d = 7.5;
        int i = (int) d;
  
        System.out.println("This is a int: " + i);
        System.out.println("This is a double: " + d);
    }
}

Kết quả của việc ép kiểu này được in ra như sau, bạn chú ý dòng in ra kiểu int nhé, mất tiêu phần thập phân rồi.

Kết quả sau khi ép kiểu tường minh
Kết quả sau khi ép kiểu tường minh

Comment Source Code

Vì kiến thức về ép kiểu ngắn quá, nên mình nói luôn về Comment ở bài này. Hai kiến thức về ép kiểucomment nó không ăn nhập gì với nhau hết, nhưng nó sẽ giúp bổ trợ tốt cho bạn trong quá trình code đấy.

Sở dĩ mình dùng từ comment chứ không dịch sang tiếng Việt là vì để tránh hiểu lầm thôi, vì đa số các bạn đều biết comment nghĩa là “bình luận”, nhưng thực ra mục đích của comment trong việc code lại chính là “ghi chú” hay “chú thích”. Nó giúp bạn giải nghĩa cho một số dòng code, bạn có thể comment thoải mái ở bất kỳ đâu trong source code, trình biên dịch sẽ bỏ qua các comment này khi build, do đó sẽ không có lỗi xảy ra với chúng.

Cách Thức Comment

Bạn có 3 cách comment như sau.

  • // text – Khi trình biên dịch gặp ký hiệu //, nó sẽ bỏ qua tất cả các ký tự từ // đến ký tự cuối cùng của dòng đó. Như vậy với mỗi // sẽ giúp bạn comment được 1 dòng.
  • /* text */ – Khi trình biên dịch gặp ký hiệu /*, nó sẽ bỏ qua tất cả các ký tự từ /* đến hết */. Như vậy cách comment này có thể giúp bạn comment được nhiều dòng cùng lúc.
  • /** document */ – Tương tự như trên nhưng bạn chú ý có hai dấu * khi bắt đầu, cách comment này giúp trích xuất ra các tài liệu hướng dẫn. Người ta gọi là document. Cách comment này mình đã nói rõ hơn ở bài viết này.

Ví Dụ Comment

Bạn hãy nhìn vào ví dụ “3 trong 1” sau đây, mình đã gộp cả ba cách comment được nói ở trên vào một chương trình. Thực ra thì bạn không cần phải comment quá nhiều như ví dụ, bạn nên comment khi cần thiết phải giải nghĩa cho một dòng code lạ nào đó, hoặc ghi chú tác giả dòng code đó là bạn, hoặc ngày sửa chữa dòng code này,…

public class MyFirstClass {
  
    /**
     * Kiểu comment cho document, sẽ được nói đến sau
     *
     * @param args
     */
    public static void main(String[] args) {
  
        // Comment một dòng
        // Muốn dòng thứ 2 thì như thế này
        double d = 7.5;
        int i = (int) d; // Cast the double into int
  
        /*
         * Các câu lệnh bên dưới sẽ in ra console,
         * và có thể comment nhiều dòng như sau
         * một dòng nữa, chỉ cần enter mà thôi
         */
        System.out.println("This is a int: " + i);
        System.out.println("This is a double: " + d);
    }
}

Bạn vừa xem qua các cách thức ép kiểu trong Java, và các cách thức comment source code. Bài học này tuy nhẹ nhưng rất quan trọng nhé, bạn sẽ sử dụng việc ép kiểu và thực hiện việc comment thường xuyên trong các project của mình.

Cảm ơn bạn đã đọc các bài viết của Yellow Code Books. Bạn hãy ủng hộ blog bằng cách:
– Đánh giá 5 sao ở mỗi bài viết nếu thấy thích.
– Comment bên dưới mỗi bài viết nếu có thắc mắc.
– Để lại địa chỉ email của bạn ở thanh bên phải để nhận được thông báo sớm nhất khi có bài viết mới.
– Chia sẻ các bài viết của Yellow Code Books đến nhiều người khác.
– Ủng hộ blog theo hướng dẫn ở thanh bên phải để blog ngày càng phát triển hơn.

Bài Kế Tiếp

Bạn sẽ được xem qua các cách thức nhập, xuất dữ liệu cho chương trình, giúp bạn dễ dàng lấy thông tin từ bàn phím dùng cho việc thực hiện các thuật toán cho các bài học tiếp theo.

 

3 comments

  1. Bạn có thể viết ví dụ về document comment có được ko, cái này mình ko rõ lắm và chưa thấy bạn có viết về vấn đề này!

    No votes yet.
    Please wait...
    1. Chào bạn, cảm ơn bạn đã nhắc, đúng là mình nợ điều hứa này khá lâu rồi. Để mình bắt đầu viết về nó nhé.

      No votes yet.
      Please wait...
    2. Mình đã cập nhật bài viết nhé, bạn có thể xem về Doc Comment của mình ở link này: https://yellowcodebooks.com/2021/05/10/doc-comment-va-javadoc-trong-java/

      No votes yet.
      Please wait...

Leave a Reply