NỘI DUNG BÀI VIẾT
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 a, b và o trong lớp Calculator
Trong mã nguồn hiện tại, các tên biến a, b 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 a, b 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 a, b 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