1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Стартап проверить есть ли блоки над игроком

Тема в разделе "Разработка плагинов для новичков", создана пользователем iceeee645745, 19 янв 2021.

  1. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Внутри метода всегда локал вар, а имена остаются записаны так для галочки отдельно. Их даже можно стереть обфускатором. На время работы кода это влияет ровно никак.
     
  2. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Александр абсолютно прав. Компиляторы умеют избавляться от ненужных переменных примерно с годов, когда Java 1 ещё не вышла, т.к. это оптимизация, лежащая практически на самом видном месте, и относительно легко реализуемая.

    Я бы в своём коде пошёл ещё дальше.
    Для меня читабельность — это когда код, который ты читаешь, ведёт линейное повествование, в одном направлении.
    Код:
    public boolean isBlockUpTrue(Player player) {
        World world = player.getWorld();
        Location playerLocation = player.getLocation();
    
        int high = world.getHighestBlockAt(playerLocation)
                .getLocation()
                .getBlockY();
    
        return high > playerLocation.getBlockY();
    }
    Когда появляюются инлайны — код приходится читать не только вертикально, но и горизонтально.
    Так же стоит помнить о том, что когда вы в своих этих инлайнах вызываете один и тот же метод дважды, может оказаться, что это "тяжёлый" метод, и вы сильно потеряете на этом.
     
    Последнее редактирование: 27 янв 2021
  3. Nikolai_Faint

    Nikolai_Faint Активный участник Пользователь

    Баллы:
    96
    Это влияет лишь на то, как новичок будет писать в дальнейшем свой код, основываясь на таких примерах. Конечно можно заявить что оптимизатор на моменте компиляции все вырежет, но т.к это не всегда получается сделать (Т.к код имеет свойство ветвится, и опять же у компилятора лишь абстрактное понимание твоего кода. Если он видит что какая-то переменная используется только один раз в примере то будет оптимизировать это, но если он увидит что переменная покидает зону функции то конечно не будет оптимизировать это, более того, он оставит все как есть. Можешь скомпилировать такой пример, и распарсить листинг ассемблера жабы)

    Конечно, очевидная оптимизация локальных переменных это обыденное дело, но есть примеры куда сложнее. В этом и дело, учить новичка такому - плохая практика. Такие примеры объяснять нужно, а не писать.
    В таком случае тебе нужно читать книжки. Самое смешное что в твоём примере толком и объяснения нету, если новичек будет это читать ему придётся гуглить каждую функцию.
    Грамотная реализация - уместить объяснение работы кода в документацию.
    А кто вызывает что-то дважды? Я лишь переместил вариант alexandrage в вид inline, о том что там внутри не знаю т.к уже практически 2 года ничего не разрабатываю под жавку. За это время кучу всего поменялось, возможно внутри что-то действительно вызывается два раза, но опять же не знаю. (Или ты про пример с getLocation, тогда более понятнее, но всё же за годы без практики я абсолютно забыл что и как работает в spigot'e)


    p.s Опять же, моя позиция тут - "Пиши маленький код но с большой документацией", возможно это немного глуповато, но в моей практике я получаю с этого только пользу.
    У всех разное мнение к тому какой должен быть код, и разное видение того что происходит внутри.
    Спасибо за дискуссию.
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Хрена ты тут пукан рвешь из за размера кода, может хватит уже? Не смеши людей.
     
  5. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    @Nikolai_Faint
    Давай ещё раз посмотрим на твой код:
    Вот ты сделал инлайн метода player.getLocation(). Смотрим реализацию:
    upload_2021-2-1_12-23-2.png
    Итого твой инлайн вместо 1 создания нового объекта, где я вынес ссылку на созданную локацию в отдельную переменную, создаёт два.

    То, чем ты предлагаешь нам заняться — преждевременная оптимизация.

    Поддержу, из темы сваливаю.
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    И потом удивляются. куда же память так быстро уходит и почему gc вызывает лаги.
     

Поделиться этой страницей