Как стать автором
Обновить

Комментарии 6

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

Вы правы, это действительно лабораторная работа, расширенная в такой мини-проект)

Спасибо за отзыв, буду работать.

Чисто для начала.

1) if идет со скобкой то с пробелом, то без пробела. За такой "стиль" сразу будут бить.

2) Очень часто берется последний и предпоследний элементы ArrayList. Можно хотя бы сделать новый класс от него и добавить методы getLast и getBeforeLast.

3) Название неверное, так как JavaFX вообще не используется для вычисления выражения.

Ну это у вас мелкие придирки :)

Там чисто с архитектурной точки зрения много всякого: было бы круто сделать лексер, чтобы работать с потоком лексем, а не символов. Это позволило бы не парится подсчетом количества точек, например. Точнее - может и парится, но на другом уровне абстракции. Вообще очень полезно разделять код по разным уровням абстракции. Дикие лестницы из if/else наверное можно было бы заменить таблицей из методов (не знаю, позволяет ли Java вызывать методы по ссылке) или, если лексер будет построен по всем правилам ООП, - то обойтись наследованием и виртуальными методами (хотя, это уже начинает пахнуть фабриками фабрик).

Ну и всякие банальные советы по выносу одинакового кода в общие функции. Типа, если хендлер каждой кнопки выглядит вот так:

    public void click6() {
        if (text.length() >= 30)
            return;
        text += "6";
        label.setText(text);
    }

То это "фу". Надо сделать вспомогательный метод и дергать его:

    public void append_display(string ch) {
        if (text.length() >= 30)
            return;
        text += ch;
        label.setText(text);
      
      }
    public void click6() {
      append_display("6");
    }

Кода станет меньше, а с ним - и будет меньше потенциальных ошибок. Можно пойти еще дальше и вообще не писать отдельный хендлер на каждую кнопку. Большинство UI тулкитов позволяют назначать один хендлер на кучу кнопок и там внутри уже определять что было нажато. Надеюсь, JavaFX тоже так может.

Ну и за стилем кода тоже надо следить, конечно же...

Я посмотрел код очень быстро и не стал писать про длинные методы или внутреннюю логику, лексер и так далее. Написал лишь то, что лежало на поверхности.)

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории