Əsas məzmuna keçin

Clean Code Prinsipləri

Clean Code - oxunaqlı, sadə və genişləndirilə bilən kod yazma sənətidir. Bu prinsiplər kodu başa düşməyi və saxlamağı asanlaşdırır.

Ad Vermə Qaydaları

Məna ifadə edən adlar istifadə edin

Səhv nümunə:

int d; // günlərin sayı
List<int[]> list1; // oyun taxtası

public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4)
list1.add(x);
return list1;
}

Düzgün nümunə:

int elapsedTimeInDays;
List<Cell> gameBoard;

public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cell : gameBoard)
if (cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}

Axtarıla bilən adlar istifadə edin

Səhv nümunə:

for (int j = 0; j < 34; j++) {
s += (t[j] * 4) / 5;
}

Düzgün nümunə:

int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;

for (int j = 0; j < NUMBER_OF_TASKS; j++) {
int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
int realTaskWeeks = (realdays / WORK_DAYS_PER_WEEK);
sum += realTaskWeeks;
}

Funksiyalar

Kiçik funksiyalar yazın

Səhv nümunə:

public void processUser(String userData) {
// Məlumatları parse et
String[] parts = userData.split(",");
String name = parts[0];
String email = parts[1];
int age = Integer.parseInt(parts[2]);

// Validasiya et
if (name.isEmpty() || email.isEmpty()) {
throw new IllegalArgumentException("Name və email boş ola bilməz");
}
if (!email.contains("@")) {
throw new IllegalArgumentException("Email formatı səhvdir");
}
if (age < 0 || age > 150) {
throw new IllegalArgumentException("Yaş səhvdir");
}

// Database-ə yaz
User user = new User(name, email, age);
database.save(user);

// Email göndər
emailService.sendWelcomeEmail(email);
}

Düzgün nümunə:

public void processUser(String userData) {
UserData data = parseUserData(userData);
validateUserData(data);
User user = createUser(data);
saveUser(user);
sendWelcomeEmail(user.getEmail());
}

private UserData parseUserData(String userData) {
String[] parts = userData.split(",");
return new UserData(parts[0], parts[1], Integer.parseInt(parts[2]));
}

private void validateUserData(UserData data) {
validateName(data.getName());
validateEmail(data.getEmail());
validateAge(data.getAge());
}

private void validateName(String name) {
if (name.isEmpty()) {
throw new IllegalArgumentException("Ad boş ola bilməz");
}
}

Bir iş görən funksiyalar

Düzgün nümunə:

// Yalnız hesablamaya fokuslanır
public double calculateTotalPrice(List<Item> items) {
return items.stream()
.mapToDouble(Item::getPrice)
.sum();
}

// Yalnız formatlama işi görür
public String formatPrice(double price) {
return String.format("%.2f AZN", price);
}

// Yalnız çap işi görür
public void printInvoice(List<Item> items) {
double total = calculateTotalPrice(items);
String formattedPrice = formatPrice(total);
System.out.println("Cəmi: " + formattedPrice);
}

Şərhlərin Düzgün İstifadəsi

Yaxşı şərhlər

Qanuni şərhlər:

/**
* Bu metod User obyektini database-də yaddaşa saxlayır
* @param user saxlanılacaq User obyekti
* @return saxlanmış obyektin ID-si
* @throws DatabaseException əgər saxlama zamanı xəta baş verərsə
*/
public Long saveUser(User user) throws DatabaseException {
return userRepository.save(user);
}

Məlumatverici şərhlər:

// Regex: email formatını yoxlayır (example@domain.com)
Pattern emailPattern = Pattern.compile("^[A-Za-z0-9+_.-]+@([A-Za-z0-9.-]+\\.[A-Za-z]{2,})$");

// API limit: saniyədə maksimum 10 sorgu
Thread.sleep(100);

Pis şərhlər

Zəruri olmayan şərhlər:

// i-ni artır
i++;

// konstruktor
public User() {
}

Kod Formatlaması

Düzgün girintilər və boşluqlar:

public class UserService {
private UserRepository userRepository;
private EmailService emailService;

public UserService(UserRepository userRepository, EmailService emailService) {
this.userRepository = userRepository;
this.emailService = emailService;
}

public User createUser(String name, String email) {
if (isValidEmail(email)) {
User user = new User(name, email);
userRepository.save(user);
emailService.sendWelcomeEmail(email);
return user;
}
throw new IllegalArgumentException("Email formatı səhvdir");
}

private boolean isValidEmail(String email) {
return email != null && email.contains("@");
}
}

Xəta İdarəetməsi

Try-catch bloklarından düzgün istifadə:

public User getUserById(Long id) throws UserNotFoundException {
try {
return userRepository.findById(id);
} catch (DatabaseException e) {
logger.error("Database xətası: " + e.getMessage());
throw new UserNotFoundException("User tapılmadı: " + id);
}
}

Exception-lar yaratmaq:

public class UserNotFoundException extends Exception {
public UserNotFoundException(String message) {
super(message);
}

public UserNotFoundException(String message, Throwable cause) {
super(message, cause);
}
}

Class-lar

Kiçik class-lar:

// Yalnız User məlumatlarını saxlayır
public class User {
private String name;
private String email;
private LocalDateTime createdAt;

// constructor, getters, setters
}

// Yalnız User əməliyyatları
public class UserService {
public User createUser(UserCreateRequest request) {
// User yaratma məntiqi
}

public void updateUser(User user) {
// User yeniləmə məntiqi
}
}

// Yalnız database əməliyyatları
public class UserRepository {
public User save(User user) {
// Database-ə saxla
}

public User findById(Long id) {
// Database-dən tap
}
}

Nəticə

Clean Code prinsipləri:

  • Kodun oxunaqlığını artırır
  • Debug prosesini asanlaşdırır
  • Komanda üzvləri arasında əməkdaşlığı yaxşılaşdırır
  • Layihənin saxlanma xərclərini azaldır
  • Yeni developer-lərin kodla tanış olmasını sürətləndirir