Если вы хотите, чтобы ваш код был более разборчивым или чтобы ваши пулл-реквесты быстро утверждались, отформатируйте код!
Как старший разработчик, я по-прежнему ожидаю, что другие люди будут форматировать свой код, и это помогает мне лучше и быстрее его понимать.
Хороший разработчик должен ценить формат кода не меньше, чем бизнес-логику.
Форматирование кода — это все, что касается коммуникации, хорошо отформатированный код передаст мысли разработчика другим.
Я приведу несколько примеров, и, надеюсь, это даст вам представление о том, как форматировать код, и понять, насколько это важно.
- Объявления переменных в функциях должны быть максимально приближены к их использованию, объявить переменную и использовать ее непосредственно в следующей строке кода.
public long getLikesCount(Tweet tweet) { TweetMetrics tweetMetrics = getTweetMetrics(tweet); long count = 0; if (tweetMetrics != null) { count = tweetMetrics.getLikes(); } return count; }
- Объявления переменных экземпляра должны находиться в одном месте и предпочтительно в верхней части класса или, по крайней мере, в нижней части.
class UploadService { public String webUrl; public UploadService(String webUrl) { this.webUrl = webUrl; } }
- Кроме того, объявления статических переменных должны появляться вверху или внизу класса.
class AppConstants { public final static String CLIENT_ID = "XXXXXX"; public final static String CLIENT_SECRET= "YYYYYY"; }
- Зависимые функции должны быть близко друг к другу по вертикали, вызывающая функция должна быть выше вызываемой функции, где это возможно.
public void sendWeeklyNewsletter(NewsLetterMessageRequest request) { List<Recipient> recipients = fetchRecipientsForNewsLetter(request.getNewsLetterId()); Message message = prepareNewsLetterMessage(request); EmailContent content = EmailContent.builder. .message(message) .recipients(recipients) .build(); sendEmail(content); } public List<Recipient> fetchRecipientsForNewsLetter(String newsLetterId) { } public Message prepareNewsLetterMessage(NewsLetterMessageRequest request) { } public void sendEmail(EmailContent content) { }
- Вертикальное форматирование: длина файла в строках должна быть около 200–500 строк, это, конечно, не обязательно, но по возможности необходимо соблюдать.
- Вертикальная открытость. Функции должны быть разделены пустыми строками, а также строки кода, которые различаются по функциональности, должны быть разделены пустыми строками (открытость разделяет понятия).
public User registerNewUser(String email) { User existing = fetchUserByEmail(email); if (existing != null) { throw new DuplicateUserRegistration(); } User user = User.builder() .email(email) .activationToken(*****) .createdDate(new Date()) .build(); return userRepository.save(user); } public User activateUser(String activationToken) { User user = fetchUserByActivationToken(activationToken); if (user == null) { throw new UserNotFoundException(); } user.setActivated(true); user.setModifiedDate(new Date()); userRepository.save(user); }
- Горизонтальное форматирование. Длина строки не должна превышать 100–120 символов и 200 символов. Большинство приложений Integrated Development Environment (IDE) позволяют пользователю определять максимальную длину строки.
- Горизонтальная открытость и плотность. Используйте горизонтальное пустое пространство, чтобы ассоциировать сильно связанные вещи и разъединять слабо связанные.
private void measureLine(String line) { lineCount++; int lineSize = line.length(); totalChars += lineSize(); lineWidthHistogram.addLine(lineSize, lineCount); recordWidestLine(lineSize); }
- Отступ должен показывать разные уровни иерархии в файле. Не нарушайте правило отступа, даже в случае коротких операторов if или функций.
// bad practice public void isTopPriority(Ticket ticket) { return ticket.equals(PRIORITY.HIGHT); } // good practice public void isTopPriority(Ticket ticket) { return ticket.equals(PRIORITY.HIGHT); } // bad practice public void allowUserToRead(Story story, User user) { if (user.isSubscribed) return true; if (limit <= FREE_LIMIT) return true; return false; } // good practice public void allowUserToRead(Story story, User user) { if (user.isSubscribed || user.reads < FREE_LIMIT) { return true; } return false; }
Надеюсь, эта история поможет вам понять форматирование кода и его важность.
Увидимся в моей следующей статье Важность комментариев в коде. Спасибо 😎