Lập trình cơ bản với Java (phần 2)
Giới thiệu
Sau khi có cái nhìn tổng quan về một chương trình Java cơ bản trong bài viết đầu tiên, ta sẽ cùng nhau đi sâu hơn vào các thành phần trong chương trình. Trong bài viết này, ta sẽ tìm hiểu một số thành phần cơ bản nhất trong chương trình là identifier, biến, cách gán giá trị và một số quy ước. Ta vẫn sẽ bắt đầu bằng một chương trình mẫu giống trong bài viết trước:
import java.util.Scanner;
public class ComputeVolume {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Nhap gia tri edge tu ban phim
double edge = input.nextDouble();
double volume = edge * edge * edge;
// Hien thi ket qua
System.out.println("The volume of cube is " + volume);
}
}
Identifier
Identifier (hay định nghĩa) dùng để chỉ tên để đặt cho các phần tử trong chương trình như class, method hay biến. Trong chương trình mẫu trên, ta có các identifier là ComputeVolume
(tên class), input
(tên biến), edge
(tên biến), volume
(tên biến).
Tất cả các identifier cần tuân thủ một số quy tắc sau:
- Một identifier là một chuỗi các kí tự bao gồm chữ cái, số, dấu gạch dưới (_), kí tự dollar ($). Tuy nhiên, không nên sử dụng kí tự $, do theo quy ước, kí tự này chỉ sử dụng cho các mã code được tạo bằng máy.
- Một identifer không được bắt đầu bằng một chữ số.
- Identifier không được đặt tên là true, false, null.
- Identifier có thể có độ dài bất kì (bao nhiêu kí tự cũng được)
- Identifier không được đặt trùng với các keyword trong Java (bảng dưới).
Một số identifier hợp lệ là: $50, print, computeVolume. Ví dụ về identifier không hợp lệ: 2computeVolume, d+4.
Identifier phân biệt cả những kí tự viết hoa, ví dụ 4 identifier sau là khác nhau: edge, Edge, EdGe, EDGE.
Các identifier cần được đặt tên so cho dễ hiểu, dễ đọc. Cách tốt nhất là mô tả vai trò của biến trong 2-3 từ ngắn gọn. Ví dụ, computeVolume, đọc là ta đã biết ngay class dùng để tính thể tích, edge là độ dài cạnh,... Tránh đặt identifier bằng một kí tự vô nghĩa như i, j, x, y,....
Biến trong Java
Biến được sử dụng để biểu diễn cho giá trị có thể thay đổi trong một chương trình. Mỗi biến được sử dụng với một mục đích khác nhau. Ta cùng quay trở lại chương trình dưới đây:
import java.util.Scanner;
public class ComputeVolume {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Nhap gia tri edge tu ban phim
double edge = input.nextDouble();
double volume = edge * edge * edge;
// Hien thi ket qua
System.out.println("The volume of cube is " + volume);
}
}
Trong chương trình trên, ta có các biến input
, edge
và volume
. Biến edge
thay đổi theo giá trị mà người dùng nhập vào từ bàn phím. Biến volume
cũng sẽ thay đổi giá trị phụ thuộc vào biến edge
.
Syntax để khai báo một biến trong Java là: Kiểu dữ liệu + tên biến. Ví dụ:
int numOfRectangle; // Khai báo biến kiểu số nguyên
double egde; // Khai báo biến kiểu số thực
double volume; // Khai báo biến kiểu số thực
Ngoài ra, ta có nhiều kiểu dữ liệu khác như short, long, float, char, boolean.
Nếu nhiều biến có cùng kiểu dữ liệu ta có thể khai báo cùng nhau theo syntax: Kiểu dữ liệu + tên biến 1, tên biến 2,..., tên biến n. Ví dụ:
int i, j; // Khai báo biến i,j theo kiểu số nguyên
Bên cạnh khai báo một biến trống, ta có thể khai báo một biến và gán giá trị cho biến đó. Ví dụ:
int i = 1;
Cách này tương đương với:
int i;
i = 1;
Ta cũng có thể gán giá trị cho các biến có cùng kiểu dữ liệu như sau:
int i = 1, j = 3;
Chú ý rằng, một biến phải được khai báo trước khi gán nó cho một giá trị nào đó. Mỗi biến đều có một scope. "Scope" (phạm vi) của một biến xác định vị trí hoặc phạm vi mà biến đó có thể được truy cập và sử dụng trong chương trình. Scope quy định các phạm vi trong đó biến có thể tồn tại và nó có thể được truy cập. Phạm vi của một biến thường được quản lý bằng cách định nghĩa biến trong một khối mã cụ thể. Có một số phạm vi biến cơ bản, bao gồm:
- Global Scope (Phạm vi toàn cầu): Biến được định nghĩa trong phạm vi toàn cầu có thể được truy cập từ bất kỳ nơi nào trong chương trình. Điều này có nghĩa rằng biến này tồn tại trong suốt thời gian chương trình chạy.
- Local Scope (Phạm vi cục bộ): Biến được định nghĩa trong một hàm hoặc khối mã cụ thể có phạm vi cục bộ. Biến này chỉ có thể được truy cập bên trong hàm hoặc khối mã đó. Nó không thể được truy cập từ bên ngoài.
Gán giá trị cho biến
Trong Java, ta gán giá trị cho biến bằng cách sử dụng dấu =
. Syntax sẽ như sau:
tên biến = biểu thức giá trị
Tại sao không phải là tên biến gán bằng một giá trị nào đó, mà lại là tên biến gán bằng một biểu thức Bởi vì trong Java, ta có thể biểu diễn giá trị của một biến dưới dạng một giá trị, một biến khác, một biểu thức,... miễn sao kết quả của chúng là một giá trị. Ví dụ cho từng trường hợp như sau:
int x = 2; // Gán biến cho một giá trị
double y = 2.0 // Gán biến cho một giá trị
int x = 9 * 6 + 6 // Gán biến cho một biểu thức
int x = y + 6 // Gán biến cho một biểu thức có chứa biến khác
Đặc biệt, ta có thể gán giá trị một biến bằng một biểu thức có thể chứa chính biến đó, ví dụ:
x = x + 1;
Trong ví dụ trên, giá trị của x + 1 được gán cho biến x. Giả sử, nếu ban đầu x = 2, sau khi đoạn code trên được thực thi thì x sẽ có giá trị là 3
Nếu ta muốn gán một giá trị giống nhau cho nhiều biến, syntax sẽ như sau:
x = y = z = 1;
Cách này tương đương với:
z = 1;
y = z;
x = y;
Một chú ý khác, kiểu dữ liệu khi ta khai báo cho biến bắt buộc phải tương thích với kiểu dữ liệu của giá trị mà ta gán cho biến, ví dụ:
int i = 1.0 // Như này là sai vì x có kiểu giá trị là int, còn 1.0 là kiểu giá trị double
double i = 1.0 // Cách gán giá trị này đúng
Constant
Ta có thể hiểu constant là một biến có giá trị không đổi. Syntax khi khai báo một constant như sau:
final + kiểu dữ liệu + tên biến constant = giá trị
Ví dụ:
final double PI = 3.14;
Ví dụ về hằng số là PI mà chúng ta đã thấy ở trên. Ta đã gán giá trị 3.14 cho hằng số PI. Khi khai báo một hằng số và gán giá trị cho nó, giá trị của hằng số này không thể thay đổi sau đó trong quá trình chạy chương trình. Điều này đảm bảo tính nhất quán của dữ liệu và giúp tránh được các lỗi không cần thiết.
Hằng số thường được sử dụng để định nghĩa các giá trị không thay đổi và quan trọng trong chương trình, chẳng hạn như PI trong toán học hoặc HOURS_IN_A_DAY trong ứng dụng liên quan đến thời gian. Việc sử dụng hằng số giúp mã nguồn dễ đọc, dễ hiểu và dễ bảo trì, bởi vì các giá trị quan trọng này có thể được thay đổi dễ dàng và duy nhất tại một vị trí cụ thể.
Sử dụng hằng số không chỉ giúp tăng tính nhất quán của mã nguồn mà còn giúp chương trình dễ dàng thay đổi hoặc cải tiến sau này mà không cần phải tìm và thay đổi tất cả các nơi mà giá trị đó xuất hiện.
Trong ví dụ về PI, nếu sau này bạn cần sử dụng một giá trị gần đúng cho số Pi (ví dụ: 3.14159) thay vì 3.14, bạn chỉ cần thay đổi giá trị của hằng số PI tại một nơi duy nhất trong mã nguồn và tất cả các chỗ sử dụng PI sẽ tự động được cập nhật với giá trị mới.
Lời kết
Trong bài viết này, ta đã tìm hiểu về một số khái niệm cơ bản liên quan đến lập trình Java. Bắt đầu bằng việc giới thiệu về các identifier, đóng vai trò là tên cho các phần tử trong chương trình như class, method, và biến. Identifier phải tuân theo một số quy tắc cụ thể và nên được đặt tên một cách dễ hiểu, dễ đọc.
Chúng ta cũng đã tìm hiểu về biến trong Java, cách khai báo, gán giá trị, và quy tắc liên quan đến kiểu dữ liệu. Biến là cách chúng ta lưu trữ và quản lý giá trị trong chương trình.
Cuối cùng, chúng ta đã tìm hiểu về hằng số (constants) và cách khai báo chúng bằng từ khóa final. Hằng số là các biến có giá trị không thay đổi trong suốt quá trình chạy của chương trình.
Qua bài viết này, bạn đã làm quen với một số khái niệm cơ bản trong lập trình Java và điều này sẽ là nền tảng để bạn tiếp tục khám phá các khía cạnh khác của ngôn ngữ lập trình này.
©️ Tác giả: Trần Quang Hiệp từ Viblo
All Rights Reserved