Начать следует с разъяснения. Я новенький. И это мое мнение, если вы видите какую-либо ошибку, не стесняйтесь указывать на нее.

По своему 1-летнему опыту я заметил кое-что очень тревожное — люди слепо верят, что так называемые «Хорошие практики» — это золотой Грааль, и вы никогда не должны задавать вопрос «Почему они такие?». Хороший пример — Патрик, мой так называемый «руководитель» проекта с открытым исходным кодом, которым мы занимаемся. Во время последнего обзора Pull я спросил Патрика : «Эй, почему ты везде используешь System.out.println()? Мы знаем, что используем только машины Windows. Мы знаем файлы, с которыми работаем. Какой смысл использовать System.out.println(), если мы критичны к производительности? Что ж, ответ был таким: “Читать понятнее (точка для вас) и ЭТО БЫСТРЕЕ, ЧЕМ ПЕЧАТЬ». Что ж, посмотрим, что быстрее Патрика.

Прежде всего, я должен попросить вас об одной вещи. В InteliJ мы получили секретную привязку клавиш. Это действительно секрет, поэтому, пожалуйста, не делитесь им ни с кем. Чтобы заставить его работать, вы просто наводите курсор на метод, который хотите исследовать, и нажимаете CTRL + ALT + B. И БУМ, мы в секретном месте, куда боятся заглянуть 95% программистов. Не надо, поверь. Вы 5%.

Давайте немного осмотримся в этом «Волшебном замке». Прежде всего, мы сравним System.out.print(String x) и System.out.println(String x).

Как мы видим, System.out.println(String x) вызывает System.out.print(String x), а затем метод newLine(). Купите, что на самом деле делает этот newLine()?

ensereOpen() — проверьте, является ли OutputStream null, если да, выдайте IOException (посмотрите на последний перехват)

textOut.newLine() — возвращает разделитель строк в зависимости от системы, «\r\n» для Windows и «\n» для Linux.

flushBuffer() в textOut и charOut — записывает всю строку байт за байтом до тех пор, пока в charBuffer не останется ничего >

В этом случае autoFlush выглядит забавно. Наш выходной объект — OutputStream. Ознакомьтесь с документацией по flush().

The flush method of OutputStream does nothing.

Итак, видите ли вы какие-либо повторяющиеся блоки кода, которые вы могли бы реорганизовать, чтобы избежать двойной проверки? Позволь мне показать тебе что-то.

System.out.print("String \n"); — UNIX-подобные системы.

System.out.print("String \r\n"); — системы Windows.

Что мы заархивировали?

  • Мы входим в блок Try-Catch только один раз.
  • Мы проверяем, равен ли OutputStream NULL только один раз.
  • Мы очищаем буферы только один раз.

И это, мой друг, 5%, это 3 ненужные операции на каждый System.out.println(String s), от которых мы просто избавляемся.

Спасибо, что прочитали это, извините за Paint-Screenshot, пожалуйста, не бойтесь заглянуть «под капот» (я действительно прошу вас сделать это) и хорошего дня!

Моя домашняя страница: https://c0dew3ll.github.io/