过长函数
A function is too long, making it hard to read and maintain—usually a sign multiple responsibilities haven't been split.
When a function becomes too long, it's usually handling too many responsibilities. Long functions are harder to understand, test, and maintain. As a rule of thumb, consider splitting a function once it exceeds 20–30 lines.
This function handles too much: base score calculation, equipment bonuses, skill modifiers, and achievement bonuses. It should be split into several smaller functions, each responsible for a specific calculation step.
import java.util.List;public class ScoreCalculator {public int calculateScore(Player player) {int score = 0;// Calculate base scorescore += player.getLevel() * 100;score += player.getExperience() / 10;// Calculate equipment bonusesfor (Equipment item : player.getEquipment()) {if ("weapon".equals(item.getType())) {score += item.getAttack() * 2;} else if ("armor".equals(item.getType())) {score += item.getDefense() * 1.5;} else if ("accessory".equals(item.getType())) {score += item.getMagic() * 3;}}// Calculate skill bonusesfor (Skill skill : player.getSkills()) {if (skill.getLevel() > 5) {score += skill.getLevel() * skill.getMultiplier();}}// Calculate achievement bonusesint achievementBonus = 0;for (Achievement achievement : player.getAchievements()) {if (achievement.isCompleted()) {achievementBonus += achievement.getPoints();}}score += achievementBonus * 0.1;// Apply special rulesif (player.isVIP()) {score *= 1.5;}// Apply time-based bonusesif (player.getPlayTime() > 1000) {score += 500;}// Apply guild bonusesif (player.getGuild() != null) {score += player.getGuild().getBonusPoints();if (player.getGuild().getRank().equals("Legendary")) {score *= 1.2;}}// Apply seasonal events bonusif (isSeasonalEventActive()) {score += calculateSeasonalBonus(player);}// Apply level milestone bonusesif (player.getLevel() >= 50) {score += 1000;}if (player.getLevel() >= 100) {score += 2000;}// Apply difficulty modifierString difficulty = player.getDifficulty();if ("hard".equals(difficulty)) {score *= 1.3;} else if ("nightmare".equals(difficulty)) {score *= 1.5;} else if ("hell".equals(difficulty)) {score *= 2.0;}// Ensure score is not negativeif (score < 0) {score = 0;}return score;}private boolean isSeasonalEventActive() {// Check if seasonal event is currently activereturn true; // Simplified for example}private int calculateSeasonalBonus(Player player) {// Calculate seasonal event bonusreturn player.getLevel() * 10;}}// Supporting classes for demonstrationclass Player {private int level;private int experience;private int playTime;private boolean isVIP;private String difficulty;private List<Equipment> equipment;private List<Skill> skills;private List<Achievement> achievements;private Guild guild;// Getterspublic int getLevel() { return level; }public int getExperience() { return experience; }public int getPlayTime() { return playTime; }public boolean isVIP() { return isVIP; }public String getDifficulty() { return difficulty; }public List<Equipment> getEquipment() { return equipment; }public List<Skill> getSkills() { return skills; }public List<Achievement> getAchievements() { return achievements; }public Guild getGuild() { return guild; }}class Equipment {private String type;private int attack;private int defense;private int magic;public String getType() { return type; }public int getAttack() { return attack; }public int getDefense() { return defense; }public int getMagic() { return magic; }}class Skill {private int level;private double multiplier;public int getLevel() { return level; }public double getMultiplier() { return multiplier; }}class Achievement {private boolean completed;private int points;public boolean isCompleted() { return completed; }public int getPoints() { return points; }}class Guild {private String rank;private int bonusPoints;public String getRank() { return rank; }public int getBonusPoints() { return bonusPoints; }}