[Thực hành] Refactoring – đổi tên biến và tách hằng

Clean Code & Refactoring

Mục tiêu

Luyện tập kỹ thuật đổi tên biến.

Điều kiện:

– Biết cách sử dụng kỹ thuật tái cấu trúc được sử dụng: Đổi tên biến và Tách hằng.

Mô tả

Trong phần này, chúng ta sẽ thực hiện thao tác tái cấu trúc mã nguồn của một ứng dụng có sẵn: https://github.com/codegym-vn/java-cleancode-refactoring-renaming

Kỹ thuật tái cấu trúc được sử dụng: Đổi tên biến và Tách hằng.

Hướng dẫn

Bước 1: Chạy dự án có sẵn

Clone dự án từ địa chỉ: https://github.com/codegym-vn/java-cleancode-refactoring-renaming

Mở mã nguồn dự án trong file Calculator và CalculatorTest để tìm hiểu mã nguồn.

Bước 2: Đổi tên biến ab và o trong lớp Calculator

Trong mã nguồn hiện tại, các tên biến ab và o không diễn đạt được ý nghĩa của nó. Cần thực hiện việc đổi tên biến này.

  • Biến a: firstOperand – toán hạng đầu tiên
  • Biến b: secondOperand – toán hạng thứ hai
  • Biến o: operator – toán tử

Mã nguồn sau khi đổi tên:

public static int calculate(int firstOperand, int secondOperand, char operator) {
switch (operator) {
case '+':
return firstOperand + secondOperand;
case '-':
return firstOperand - secondOperand;
case '*':
return firstOperand * secondOperand;
case '/':
if (secondOperand != 0)
return firstOperand / secondOperand;
else
throw new RuntimeException("Can not divide by 0");
default:
throw new RuntimeException("Unsupported operation");
}
}

Bước 3: Đổi tên biến ab và o trong lớp CalculatorTest

Mã kiểm thử cũng cần đảm bảo tiêu chí “clean”, do đó chúng ta cần thực hiện thao tác đổi tên các biến ab và o tương tự như trong lớp Calculator

Bước 4: Tách hằng

Trong mã nguồn hiện tại, các giá trị ‘+’, ‘-‘‘*’ và ‘/’ được coi là các giá trị “thần kỳ”. Chúng ta cần tách các giá trị này thành các hằng số để mã nguồn clean hơn.

  • Giá trị ‘+’: ADDITION – toán tử cộng
  • Giá trị ‘-‘: SUBTRACTION – toán tử trừ
  • Giá trị ‘*’: MULTIPLICATION – toán tử nhân
  • Giá trị ‘/’: DIVISION – toán tử chia

Mã nguồn sau khi tách hằng:

public static final char ADDITION = '+';
public static final char SUBTRACTION = '-';
public static final char MULTIPLICATION = '*';
public static final char DIVISION = '/';

public static int calculate(int firstOperand, int secondOperand, char operator) {
switch (operator) {
case ADDITION:
return firstOperand + secondOperand;
case SUBTRACTION:
return firstOperand - secondOperand;
case MULTIPLICATION:
return firstOperand * secondOperand;
case DIVISION:
if (secondOperand != 0)
return firstOperand / secondOperand;
else
throw new RuntimeException("Can not divide by 0");
default:
throw new RuntimeException("Unsupported operation");
}
}

Lưu ý: Sau mỗi bước refactor thì cần chạy lại các test case để đảm bảo mã nguồn vẫn hoạt động tốt.

Hướng dẫn nộp bài

– Up bài lên Github

– Paste link vào phần nộp bài và nhấn submit


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Leave a Reply

Your email address will not be published. Required fields are marked *