Monday, June 22, 2015

Bài 4 : Kiểu dữ liệu (data type) , toán tử (operator) , coding conventions

I.      Viết một chương trình đơn giản.
Giống như các ngôn ngữ lập trình khác. Java cũng có cấu trúc dữ liệu , biên dịch các thuật toán trong chương trình code.
Ví dụ bạn thực hiện một chương trình tính diện tích một hình tròn. Thì cũng có thuật toán như sau:
-         Đọc độ dài bán kính
-         Tính diện tích hình tròn theo công thức : bán kính * bán kính * pi
-         Hiển thị diện tích hình tròn ra cho người dùng .
Tùy vào mỗi yêu cầu của mỗi ứng dụng chúng ta viết ra . Chúng ta có thể design , xây dựng các dạng cấu trúc dữ liệu , các giải thuật riêng để có được 1 ứng dụng hoàn hảo.
Java cung cấp cho chúng ta các cấu trúc dữ liệu nguyên thủy . Như chúng ta có thể dùng các kiểu integer , float , double , charactor , boolean...Java còn hỗ trợ các kiểu dữ liệu đối tượng như array , String , object .Hoặc các kiểu dữ liệu nâng cao khác như structures, such as stacks, sets, and lists...
Các chương trình sẽ được biểu diễn trong class và chương trình sẽ gọi tới class nào chứa hàm main (giống như trong C hay C++)
public class ComputeArea {
  public static void main(String[] args) {
    // Step 1: Read in radius

    // Step 2: Compute area

    // Step 3: Display the area
  }
}
II.      Cách đặt tên biến
  • Tên biến có thể là một hoặc một chuỗi ký tự , ký số
  • Đặt tên biến ta nên đặt chữ cái đầu là thường , các từ tiếp theo thì viết hoa chữ cái đầu . Đây là một đặt điếm phân biệt chữ hoa và chữ thường của Java.  Và viết như vậy cũng để nhằm phân biệt giữa biến và class
  • Ví dụ : sinhVien , hocSinh , gioiTinh , ngaySinh ....
  • bắt đầu bằng dấu gạch dưới , ký tự  hoặc $
  • có thể khai báo bất kỳ đâu trong chương trình , biến toàn cục và biến cục bộ
  • không được trùng vs các từ khóa trong java (có thể tham khảo các từ khóa của Java tại link here)
  • ví dụ :true : $s , _vb , student , name .... false : 9a , gia tri , 9 gia tang ...


III.      Biến
a. Định nghĩa    
Biến dùng để định nghĩa dữ liệu sử dụng trong chương trình .
Cách khai báo biến [Kiểu dữ liệu] [tên biến];
Ví dụ : 
int x;               // Declare x to be an integer variable;
double radius;       // Declare radius to be a double variable;
double interestRate; // Declare interestRate to be a double variable;
char a;              // Declare a to be a character variable;
Ngoài ra chúng ta còn có thể khai báo nhiều biến cùng một kiểu dữ liệu , như sau :
[Kiểu dữ liệu] [biến 1], [biến 2], ..., [biến n];
Ví dụ : 
int a , b , c , d ;
b.      Bộ nhớ heap và bộ nhớ stack

  • Bộ nhớ heap là gì . Là bộ nhớ cấp phát dành cho đối tượng . Các lớp của JRE lúc thực thi chương trình . Như hình vẽ ta thấy bất kỳ khi nào đối tượng được sinh ra sẽ được lưu vào bộ nhớ heap này .
  • Còn bộ nhớ stack : là bộ nhớ cấp phát để lưu trữ các luồng xử lý . Các luồng được lưu vào bộ nhớ stack theo tuần từ . FIFO (first in first out ) . Như hình vẽ , thì main() sẽ được xử lý trước , sau đó tới go() , sau đó mới tới setName() . Các luồng này có thể gọi tới các đối tượng ở bộ nhớ heap
* Túm lại nói cho dễ hiểu là giề : stack là vùng nhớ được cấp phát để thực hiện các phương thức , hay các luồng (thread) để reference tới các biến , vùng nhớ là bộ nhớ heap. (Tại sao phải biết cái này , vì tuyển dụng người ta vẫn hỏi :P, và sau này học static ...)
c .   Phép gán
Sau khi khai báo biến thì chúng ta cần phải gán dữ liệu cho biến . Cũng như C hay C++ hay một số ngôn ngữ lập trình khác . Phép gán dữ liệu trong Java thực hiện bởi ký tự “=”
Ví dụ :
int x = 1;               // Assign 1 to variable x;
double radius = 1.0;     // Assign 1.0 to variable radius;
x = 5 * (3 / 2) + 3 * 2// Assign the value of the expression to x;
x = y + 1;               // Assign the addition of y and 1 to x;
area = radius * radius * 3.14159// Compute area
x = x + 1;
Ngoài ra chúng ta còn gán nhiều biến vào bằng 1 giá trị :
Int i , j , k ;
i = j = k = 1;
hoặc
int i , j , k;
i = 1;
k = i;
j = k;
hoặc
int i = 1, j = 2;
d.      Hằng số
Hằng số là một biến có giá trị không thay đổi được . Và nó có thể sử dụng cho toàn chương trình. Nếu thay đổi hằng số thì chương trình sẽ báo lỗi .
Tên hằng được đặt theo qui ước giống như tên biến.
- Hằng số nguyên: trường hợp giá trị hằng ở dạng long ta thêm vào cuối chuỗi số chữ “l” hay “L”. (ví dụ: 1L, 5L, 3L)
- Hằng số thực: truờng hợp giá trị hằng có kiểu float ta thêm tiếp vĩ ngữ “f” hay “F”, còn kiểu số double thì ta thêm tiếp vĩ ngữ “d” hay “D”.
- Hằng Boolean: java có 2 hằng boolean là true, false.
- Hằng ký tự: là một ký tự đơn nằm giữa nằm giữa 2 dấu ngoặc đơn.
Cách khai báo hằng số
final datatype CONSTANTNAME = VALUE;
từ khóa final có nghĩa là không thể thay đổi . Bắt buộc phải thực hiện nếu sử dụng nó.
Ví dụ :
// ComputeArea.java: Compute the area of a circle
public class ComputeArea {
  /** Main method */
  public static void main(String[] args) {
    final double PI = 3.14159// Declare a constant

    // Assign a radius
    double radius = 20;
    // Compute area
    double area = radius * radius * PI;

    // Display results
    System.out.println("The area for the circle of radius " +
      radius + " is " + area);
  }
}
IV . Kiểu dữ liệu
Kiểu dữ liệu gồm

1.      Kiểu dữ liệu kiểu số và các toán tử:
Dưới đây là bảng giá trị sử dụng của kiểu dữ liệu . Và kích thước bộ nhớ của các kiểu dữ liệu.
a.       
Java cung cấp 4 kiểu dữ liệu kiểu số là :byte , short , int , long . Và 2 kiểu chấm động (thập phân ) là float , double. Tùy vào cách sử dụng mà chúng ta có thể vận dụng nó hợp lý.
b.      Các toán tử :

Có thể thực hiện các toán tử : +, - , * , / , % lên các toán tử :
Ví dụ :
 import javax.swing.JOptionPane;

  public class DisplayTime {
    public static void main(String[] args) {
     int seconds = 500;
     int minutes = seconds / 60;
      int remainingSeconds = seconds % 60;
      JOptionPane.showMessageDialog(null,
      seconds + " seconds is " + minutes +
      " minutes and " + remainingSeconds
    + " seconds");
}
Thứ tự các phép toán là * , / , % trước . + , - sau.
Các phép toán rút gọn :

Các phép toán tử hậu tố và tiền tố :

c.      Ép kiểu dữ liệu :
Như ta đã đề cập ở trên về size memory của các biến . Ta có thể ép các kiểu dữ liệu từ kiểu lớn sang kiểu nhỏ . Và ngược lại , tuy nhiên có thể bị mất dữ liệu (Overflow).
Ví dụ :
int a;
double b = 30000000;
a = (int)b;
Nhưng sai khi thực hiện thế này :
int a;
double b = 30000000;
a = b;
2.      Kiểu dữ liệu ký tự và toán tử
a.      Kiểu dữ liệu char dùng để định nghĩa các ký tự.
char letter = 'A';
char numChar = '4';
máy tính sử dụng mã nhị phân để quy định các luồng xử lý , các biến . Vì vậy các kiểu charactor cũng vậy . Tuy nhiên khi hiển thị ra biên ngoài cho người dùng thì nó sẽ hiển thị ở dạng ký tự.
Java hỗ trợ mã Unicode. Ký tự kiểu char được quy định theo bộ mã ASCII .
char letter = 'A';
char letter = '\u0041'// Character A's Unicode is 0041
Các toán tử với kiểu ký tự :

b.      Cách chuyển đổi giữa kiểu Char với kiểu số.
Kiểu char có thể chuyển đổi qua kiểu số như sau :
Char --> bit
char c = (char)0XAB0041// the lower 16 bits hex code 0041 is
                         // assigned to c
System.out.println(c);   // c is character A
Char --> float
char c = (char)65.25;   // decimal 65 is assigned to t
System.out.println(c);  // c is character A
Char --> int
int i = (int)'A';     // the Unicode of character A is assigned to i
System.out.println(i);  // i is 65
Ví dụ :
int i = '2' + '3'// (int)'2' is 50 and (int)'3' is 51
System.out.println("i is " + i);

int j = 2 + 'a'// (int)'a' is 97
System.out.println("j is " + j);
System.out.println(j + " is the Unicode for character " + (char)j);

System.out.println("Chapter" + '2');
Hiển thị:
i is 101
j is 99
99 is the Unicode for character c
         Chapter 2
3.      Kiểu String
a.      Định nghĩa :
Kiểu String cũng là một kiểu ký tự . Nó khác kiểu char ở chỗ nó biểu diễn được một chuỗi các ký tự , chứ không biểu diễn một ký tự như char.
String message = "Welcome to Java";
// Three strings are concatenated
String message = "Welcome" + "to" + "Java";

// String Chapter is concatenated with number 2
String s = "Chapter" + 2// s becomes Chapter2
// String Supplement is concatenated with character B
String s1 = "Supplement" + 'B'// s becomes SupplementB
Có thể nối chuỗi giống như cộng số :
String message = "Welcome to Java";
message += " and Java is fun";
hiển thị
"Welcome to Java and Java is fun"
Lưu ý nho nhỏ : nếu các bạn sử dụng hiển thị chuỗi String và số :
String message =  "Xin chao Java";
int i = 1 , j = 2;
System.out.println(message + " " + i + j);
Sẽ hiển thị: Xin chao Java 12
Còn nếu các bạn viết
String message =  "Xin chao Java";
int i = 1 , j = 2;
System.out.println(message + " " + (i + j));
Sẽ hiển thị: Xin chao Java 3
b.      Chuyển đổi kiểu string sang số.
Ta có thể chuyển đổi kiểu String sang dạng số : int , double , float ...Với điều kiện chuỗi là biểu diễn của số.
String str = "100";
String str2 = "welcome";
int a = Integer.parseInt(str);
System.out.println(a);
double b = Double.parseDouble(str);
System.out.println(b);
Hiển thị : 100
100.0
Nếu bên trong không là số thì sẽ báo lỗi :

Ngoài ta còn cách chuyển đổi khác.
String str = "100";
int a = Integer.valueOf(str);
System.out.println(a);
Tương tự như vậy, nếu chuyển đổi từ kiểu số sang kiểu ký tự . Chúng ta có thể dùng cách này.
V. Nhập liệu và xuất ra màn hình console
Một ứng dụng lập trình ra . Cần đáp ứng được 3 yếu tố .
-Yêu cầu người dùng nhập dữ liệu cần xử lý
-Xử lý dữ liệu
-Đưa ra kết quả cần thiết cho người dùng.
Vì vậy bước 1 và bước 3 là hết sức quan trọng : Tuy nhiên trong loạt hướng dẫn này tôi sẽ hướng dẫn các bạn cách làm việc với console trước.
Chúng ta sử dụng system.in và system.out để nhập xuất dữ liệu.
Chúng ta có
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a double value: ");
Dùng scanner để nhập dữ liệu đầu vào , và System.out.... để xuất dữ liệu ra cho người dùng biết kết quả . Wao ,Vào một ví dụ cụ thể để các bạn có thể hiểu rõ hơn cách thức làm việc này :
import java.util.Scanner; // Scanner is in java.util

public class TestScanner {
public static void main(String args[]) {
// Create a Scanner
Scanner scanner = new Scanner(System.in);
// Prompt the user to enter an integer
System.out.print("Enter an integer: ");
int intValue = scanner.nextInt();
System.out.println("You entered the integer " + intValue);

// Prompt the user to enter a double value
System.out.print("Enter a double value: ");
double doubleValue = scanner.nextDouble();
System.out.println("You entered the double value "
+ doubleValue);
// Prompt the user to enter a string
System.out.print("Enter a string without space: ");
String string = scanner.next();
System.out.println("You entered the string " + string);
}
}
Out put :
Enter an integer: 1
You entered the integer 1
Enter a double value: 2
You entered the double value 2.0
Enter a string without space: 4
You entered the string 4
Java cung cấp cho chúng ta một công cụ cực mạnh giúp chúng ta có thể lập trình dễ dàng hơn . Đó chính là Java doc , dựa vào nó thì chúng ta có thể biết được cách sử dụng các method có sẵn của Java .
Các bạn có thể dụng chỏ vào method đó và ấn nút F3 (eclipse ) hoặc là dùng ctrl + space  chỏ vào hàm đó , nó sẽ hiện ra doc cho các bạn đọc . Tất nhiên doc viết bằng tiếng anh . Nên nó cũng sẽ rèn luyện cho các bạn kỹ năng đọc tiếng anh chuyên môn.
V. Coding conventions
Để theo dõi code viết của mình một cách mạch lạc và dễ dàng . Phục vụ cho việc tìm lỗi và fix lỗi . Đặc biệt nếu các bạn tham gia các dự án thực tế , nhiều người join vào dự án . Khi bạn chuyển giao code cho người kế tiếp , hoặc cho tester . Thì nếu bạn viết theo chuẩn coding convention . Thì việc đọc lại code của bạn sẽ cực kỳ dễ dàng . Và điều ngược lại.
Dưới dây mình cung cấp các bạn 1 tài liệu về chuẩn coding convention . Tuy nhiên nó chỉ là tham khảo . Bởi vì mỗi công ty , hoặc mỗi dự án, các bạn sẽ có các tài liệu quy chuẩn về coding convention .
Tài liệu tham khảo coding convention.

No comments:

Post a Comment