Рубрики
Без рубрики

Эффективная Java: Знать и использовать библиотеки

Погружение в главу 59 Эффективной Java. Помеченный java, эффективный, библиотеки, архитектура.

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

Давайте рассмотрим пример. Давайте рассмотрим следующий код. Задача этого кода состоит в том, чтобы выбрать случайное число до заданного предела:

static Random rnd = new Random();

static int random(int upperLimit) {
  return Math.abs(rnd.nextInt()) % n;
}

На первый взгляд этот код может показаться разумным, он, кажется, выполняет свою работу и в краткой форме. Даже после некоторого быстрого тестирования он, похоже, справляется со своей задачей. Что не сразу бросается в глаза, так это то, что в этом коде есть ряд проблем:

  • Распределение ценностей неравномерно. То, как это проявится, будет зависеть от того, является ли n степенью двойки, но из-за двоичной арифметики и теории чисел распределение не будет равным.

    • В редких случаях (когда rnd.nextInt() возвращает Целое число. MIN_VALUE ) код попытается сделать значение положительным, вызвав Math.abs , который в данном конкретном случае все равно вернет Целое число. МИНИМАЛЬНОЕ ЗНАЧЕНИЕ . Это может привести к возвращению отрицательного числа, к которому код, скорее всего, не подготовлен. Это также будет чрезвычайно сложно проверить.

Так как же нам решить эти проблемы? Как насчет того, чтобы мы просто использовали: Random.nextInt(int) ? Хотя, возможно, это не тот интересный ответ, который вы искали, это почти всегда так. Встроенные библиотечные функции в Java были написаны экспертами, использовались в бесчисленных приложениях и хорошо изучены. Это не оскорбление ваших навыков программирования, а просто факт того, какое программное обеспечение разрабатывается в каждом конкретном случае. Вы получаете от этого пару преимуществ.

  • Вам даже не нужно думать о том, как выполнить задачу, просто вызовите функцию и двигайтесь дальше.

  • Скорее всего, производительность этих функций будет выше вашей собственной. Хотя возможно, что вы могли бы написать более эффективную функцию для вашего конкретного случая использования, вероятность того, что вы придумаете универсальное решение, которое будет быстрее, чем их проверенная версия, невелика.

  • Вы также получите выгоду от бесплатных улучшений по мере прохождения обновлений. Даже если вы ничего не делаете, вы можете увидеть эти преимущества.

Так почему бы кому-нибудь не использовать эти встроенные функции? Вероятно, наиболее распространенной причиной этого, на мой взгляд, является отсутствие знакомства. Нет никаких сомнений в том, что API-сервис Java довольно велик. Было бы глупо думать, что кто-то может эффективно разместить все пространство API в своем мозгу. При этом есть несколько процессов, которым вы можете следовать, чтобы помочь вам в этом:

  • Познакомьтесь с несколькими основными пакетами: java.lang , java.util , java.io , java.потоки и т.д.

  • Потратьте время на изучение примечаний к выпуску в каждом выпуске Java. С новым более быстрым циклом выпуска Java эти примечания к выпуску могут быть намного проще в использовании.

  • Надеюсь, само собой разумеется, но также поищите в Интернете решения вашей проблемы, прежде чем изобретать свою собственную версию. Этого часто бывает достаточно, чтобы вы познакомились со встроенной функцией.

Даже при большом количестве встроенных функций на языке Java все равно будут вещи, которые не будут реализованы на основном языке. Тем не менее, есть несколько замечательных универсальных библиотек, которые вы все еще можете использовать для решения своих проблем. Библиотеки, такие как: Guava , Apache Commons и т.д. Хотя вы не совсем получаете все преимущества встроенных функций, вы получите некоторые преимущества в меньшей степени.

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

Оригинал: “https://dev.to/kylec32/effective-java-know-and-use-the-libraries-15h4”