3 плохих фрагмента Java, которые вы должны увидеть

  • Чистый код
  • Значимые имена
  • Тесты

О них все время кричат. Вы знаете, я знаю, и все знают о чистом коде.

А как насчет грязного кода? Вот 3 фрагмента кода с ошибками. Подробно объясняя, почему они важны.

Давайте углубимся.

Как решить четвертую задачу Эйлера?

Вы на собеседовании на должность разработчика Java. Вы получаете задачу по кодированию, которую нужно решить. Оказывается, это 4-я задача Эйлера.

Вот настоящая проблема, которую вам нужно решить.

"Палиндромное число одинаково читается в обоих случаях. Самый большой палиндром, составленный из произведения двух двузначных чисел, равен 9009 = 91 × 99.

Найдите наибольший палиндром, составленный из произведения двух трехзначных чисел.источник

Вот один неверный подходк этой проблеме.

Это метод грубой силы. Начните с двух циклов, умножьте множители и найдите наибольший.

Циклы содержат создание строк. Нет необходимости использовать StringBuffer или String. Это только добавляет сложности и бессмысленных вычислений.

Вот мой подход.

Начните с 1000, уменьшите множители, найдите правильное решение.

Используйте математику, чтобы избежать сложности пробелов. Переверните число, используя математику, а не строки. Строки внутри цикла вызывают только накладные расходы памяти.

Проверьте раздел комментариев, чтобы найти еще лучшее решение о том, как сократить бесполезные вычисления.

Вы разводите условия?

Если объект является экземпляром X, выполните M. Если объект является экземпляром Y, выполните Z.

Это распространенная проблема кодирования и имеет свою собственную закономерность. Вы должны использовать Strategy для решения этой проблемы.

Некоторые разработчики прибегают к операторам if-else. Это хорошо работает, если есть только 2-3 условия.

Хотя это кажется жизнеспособным решением, условия размножаются. Никто не станет переписывать эти 2–3 условия в стратегии. Следующий разработчик добавит еще один и пойдет дальше.

Вот один из примеров условий разведения.

Лучше всего использовать стратегии. Вы можете создать Map<Condition, Strategy> и оценить на его основе.

Как расположить данные в алфавитном порядке?

Вам необходимо отсортировать данные в алфавитном порядке.

У вас есть страны клиентов, имена или фамилии, которые нуждаются в алфавитном порядке.

Лексический порядок не совпадает с алфавитным порядком. Пример: «Z» будет стоять перед «а».

Вот как может выглядеть плохое решение.

Вот решение грубой силы. Сравните каждую из них и расположите их правильно. Это наихудший способ сортировки строк.

Вы не увидите этого в производственном коде. Вы могли видеть, как новички пробуют это решение.

Вот более элегантный способ сортировки строк. Сортировка строк с помощью Collections#sort. Предоставьте пользовательский компаратор и отсортируйте их по желанию.

Но вам нужен алфавитный порядок. Сортировка по умолчанию дает лексический порядок. Этот порядок соответствует кодам ASCII. Лексический порядок не совпадает с алфавитным порядком.

// this won't work as expected 
list.sort(Comparator.naturalOrder());

Всегда ищите нативное решение. Здесь Collator вам поможет.

// this will sort the countries in alphabetical order
Collections.sort(countries, Collator.getInstance(new Locale(languageCode)));

Украсть мою электронную книгу

Я уже написал много плохих фрагментов Java. Вы можете украсть их из Моей Гамроуд.

Чаевые в размере одного-двух долларов помогли бы мне создать лучшую электронную книгу бесплатно!