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





Chào các bạn, bài học Java hôm nay chúng ta nói về 2 vấn đề nhỏ, đó là ép kiểu và comment source code, 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.
Trước hết cần nhắc lại một chút ở bài 4, bạn đã 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 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 thường mang tính tĩnh. Liệu chúng ta có thể thay đổi kiểu dữ liệu cho giá trị của biến một cách động hơn hay không?
Hoặc ở bài 5, bạn đã làm quen với các Toán tử, chuyện gì xảy ra nếu bạn có một Biểu thức gồm 2 biến có 2 kiểu dữ liệu khác nhau? Liệu chúng có kết hợp được với nhau trong biểu thức đó hay không?
Bài này chúng ta sẽ trả lời 2 câu hỏi trên thông qua khái niệm Ép kiểu (ép-kiểu ở đây chính là ép-kiểu-dữ-liệu đấy).

Khái Niệm Ép Kiểu

Như được nói đến khái quát trên đây, é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 kiểu dữ liệu khác, mục đích là gì các bạn hãy đọc tiếp 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ó 2 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 biến. Ví dụ bạn ép từ kiểu int sang float. Việc ép kiểu theo dạng này thông thường được thực hiện một cách ngầm định bởi hệ thống.
– 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 biến. Ví dụ bạn ép từ kiểu float sang int. Việc ép kiểu này không được thực hiện một cách ngầm định mà phải thực hiện tường minh bởi chính bạn.
Việc phân loại trên đây chưa thấy rõ mục đích chính đáng của ép kiểu. Chúng ta thử xem cách phân loại ép kiểu sau đây.
– Ép kiểu ngầm định: việc ép kiểu này diễn ra một cách tự động bởi hệ thống, mục đích chính là để nới rộng khả năng lưu trữ. Như được nhắc đến ở trên, kiểu nới rộng này sẽ không làm mất đi giá trị của biến. Và khi được thực hiện một cách tự động thì hệ thống sẽ dựa trên 2 nguyên tắc: các kiểu dữ liệu phải tương thích nhau, và kiểu dữ liệu đích phải có kích thước lớn hơn kiểu dữ liệu nguồn. Sự tương thích và kiểu dữ liệu đích lớn hơn kiểu dữ liệu nguồn được thể hiện như sau.
byte có thể ép kiểu sang shortintlongfloatdouble.
short có thể ép kiểu sang intlongfloatdouble.
int có thể ép kiểu sang longfloatdouble.
long có thể ép kiểu sang floatdouble.
float có thể ép kiểu sang double.
– Ép kiểu tường minh: việc ép kiểu này được thực hiện khi có sự chỉ định ép kiểu của bạn lên biểu thức. Bạn sẽ chỉ định như sau khi muốn é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ả, hệ thống sẽ tự thực hiện việc ép kiểu như sau.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MyFirstClass {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        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 klmn. Kết quả in ra như hình sau.
Screen Shot 2016-10-25 at 16.35.38.png
Nên nhớ là việc ép kiểu không làm thay đổi kiểu dữ liệu của biến được ép kiểu, chẳng hạn như ví dụ trên i vẫn mãi là kiểu byte, ép kiểu chỉ đơn giản thay đổi kiểu dữ liệu giá trị biến và lưu trữ trong một biến mới mà thôi.
Và bạn nên nhớ là với cách ép kiểu ngầm định này thì bạn không thể kêu hệ thống ép một kiểu dữ liệu lớn hơn về kiểu nhỏ hơn được, ví dụ sau là sai nhé.
1
2
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ó, như sau.
1
2
3
4
5
6
7
8
9
10
11
12
public class MyFirstClass {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int i = 50;
        short j = (short) i;
        System.out.println("This is a short: " + j);
    }
}
Bạn thấy (short) i sẽ é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.
1
2
3
4
5
6
7
8
9
10
11
12
public class MyFirstClass {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        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ú ý kiểu int nhé, mất tiêu phần thập phân rồi.
Screen Shot 2016-10-25 at 22.41.07.png

Comment Source Code

Vì kiến thức về ép kiểu ngắn quá, tôi nói luôn về Comment. Tôi dùng từ comment chứ không dịch sang tiếng Việt để tránh dùng lung tung sau này, thực ra ý nghĩa của comment 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ó 2 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 sẽ được tôi nói rõ hơn ở một bài viết khác.

Ví Dụ Comment

Bạn hãy nhìn vào ví dụ 3 trong 1 sau đây. Tôi sử dụng cả 3 cách comment trên vào một chương trình, bạn không cần phải comment quá nhiều như vậy, đây chỉ là ví dụ thôi, 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,…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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.

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.
Java Bài 7: Đang Được Viết Tiếp… →

                       Nguồn : yellowcodebooks.com


Đăng nhận xét

Cảm Ơn Bạn Đã Để Lại Bình Luận

 

Quản Trị Viên

Lượt xem

Lên Trên