Sở thích viết java code của dev


Một loạt bài trình về cách thức tôi viết một đoạn code như thế nào ? Phần 1 : Trình bày về if else được vận dụng trong những hoàn cảnh thường gặp.
Kinh nghiệm viết code, tôi cố gắng vận dụng từ khóa return trong method và hai từ khóa continue, break trong vòng lặp.
Chẳng hạn, có thể viết một method như sau:
public void method1(String a, String b) throws Exception {
     //thực thi một vài lệnh
    if(a.equals(“text”) {
       //thực thi một vài lệnh
    }else{
      // thực thi một vài lệnh
    }
  }
Cách viết method như trên là hoàn toàn không có vấn đề gì tuy nhiên, có 1 cách viết code khác tốt hơn nếu bạn vận dụng từ khóa return thì code có thể gọn và sáng sủa hơn. Xin được minh họa như sau:
public void method1(String a, String b) throws Exception {
     //thực thi một vài lệnh
    if(a.equals(“text”) {
       //thực thi một vài lệnh
       return;
    }
    // thực thi một vài lệnh    
  }
Như vậy, tôi không cần dùng đến else sau if mà code có thể chạy nhanh hơn, dĩ nhiên tốc độ có thể cũng không khác nhau nhiều lắm. Ở method trên chúng ta trả về một kiểu dữ liệu vô hướng, nghĩa là không có gì, tuy nhiên có những method đòi hỏi dữ liệu trả về, bạn cũng có thể vận dụng cách thức tương tự, điều quan trọng là bạn cần hiểu đoạn code sẽ được thực thi như thế nào rồi cài đặt một cách sáng sủa nhất. Một vài method ở mức rất đơn giản, chúng chỉ thực hiện một lệnh kiểm tra nào đó rồi trả về dữ liệu, thông thường ta hay dùng if-else như trong trường hợp này, chẳng hạn:
public void method2(String a) throws Exception {
    if(a.equals(“text”)  return “code”;
    else  return “gui”;
  }
Kỹ thuật được trình bày ở trên có thể được vận dụng vào đây, tuy nhiên có một cách viết khác mà không cần dùng đến if-else trong phương thức:
public void method2(String a) throws Exception {
    return a.equals(“text”) ? ”code” : “gui”;
  }
Tôi thích kiểu viết code này bởi nó cũng khá đơn giản, dễ hiểu và gọn.
Đối với vòng lặp (while, for), ta cũng có thể vận dụng từ khóa continue và break hoặc return để giảm lược các mệnh đề if-else. Chẳng hạn bạn có thể viết như sau:
String  [] arr ...;
for(int i = 0; i < arr.length; i++){
   if(arr[i].equals(“yahoo”)){
     //thực thi các lệnh
   }else if(arr[i].equals(“google”)){
     break;
   }else{
     //thực thi một vài lệnh
   }
}
 return “value”; // thực hiện cuối method
Tuy nhiên nếu vận dụng các từ khóa ta có thể viết lại vòng for như sau:
String  [] arr ...;
for(int i = 0; i < arr.length; i++){
   if(arr[i].equals(“yahoo”)){
     //thực thi các lệnh
     continue;
   }
   if(arr[i].equals(“google”)) return “value”;
     //thực thi một vài lệnh   
}
return “value”; // thực hiện cuối method
Chỉ là ví dụ minh họa, khi cài đặt cụ thể, chúng ta có thể vận dụng chúng một cách linh hoạt nhằm tăng hiệu quả chương trình.
Nếu như ta phải dùng nhiều if-else mà đối tượng so sánh là một primary type (kiểu dữ liệu nguyên thủy như byte, int, char,..) dùng switch thay cho if-else sẽ cải thiện tốc độ.
Bố trí vị trí cách phép toán trong if cũng là một điều đáng lưu ý, chẳng hạn:
String a ...;
  if(a.length() == 0 || a == null){
    //thực thi các lệnh
  }
Trong mẩu code trên, ta hoàn toàn đã có điều kiện kiểm tra xem biến a có null hay không, tuy nhiên phép toán đó sẽ không bao giờ được thực hiện bởi nếu a null thì phép toán a.length() == 0 sẽ được gọi trước mà a lại null nên gọi a.length() sẽ ném ra một lỗi trong runtime, cần viết lại như sau:
String a ...;
  if(a == null || a.length() == 0){
    //thực thi các lệnh
  }
Đừng cài đặt quá nhiều if-else lồng nhau, hãy linh hoạt trong việc sử dụng các toán tử logic như ||, &&,… để tạo thành một mệnh đề gọn nhẹ hơn, chẳng hạn:
String a, b...;
 if(a == null){
    if(b == null){
      //thực thi một vài lệnh
    }

 }
thì tốt nhất nên viết lại là:
String a, b...;
 if(a == null && b == null){
    //thực thi một vài lệnh
 }

Previous
Next Post »