@n199a
Java

Как лучше сократить код return на Java?

Такой вопрос.
Имеется метод, который в качестве аргумента принимает четырёхугольник (внутри содержит четыре объекта типа Point. Point содержит в себе координаты Х и Y). Метод определяет, является ли четырёхугольник трапецией.

Справочно:
Трапеция - это четырёхугольник, у которого две стороны параллельны, а другие две - не параллельны.

Метод boolean isSidesParallel(side1, side2) определяет, параллельны ли стороны.

Собственно, сам код, который выполняет свою задачу. Но мне не нравится как выглядит return. Как привести его к более удобочитаемому виду и сократить его?

Код (жми)

@Override
    public boolean isTrapezoid(Quadrangle quadrangle) {
        // создаем точки
        Point p1 = quadrangle.getP1();
        Point p2 = quadrangle.getP2();
        Point p3 = quadrangle.getP3();
        Point p4 = quadrangle.getP4();

        // создаем стороны АB, BC, CD, DA
        Line sideAb = new Line(p1, p2);
        Line sideBc = new Line(p2, p3);
        Line sideCd = new Line(p3, p4);
        Line sideDa = new Line(p1, p4);

        // проверка, чтобы две противоположыне стороны были параллельны, а другие - не параллельны
        return (isSidesParallel(sideAb, sideCd) && !isSidesParallel(sideBc, sideDa)) || (!isSidesParallel(sideAb, sideCd) && isSidesParallel(sideBc, sideDa));
    }

  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
@koperagen
Условие "две стороны параллельны, другие две - нет" похоже на оператор xor
Для него таблица истинности
1 1 -> 0
1 0 -> 1
0 1 -> 1
0 0 -> 0
Т.е. можно записать так
isSidesParallel(sideAb, sideCd) ^ isSidesParallel(sideBc, sideDa)
(^ - это xor в джаве)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Bavashi
@Bavashi Куратор тега Java
Попробуйте так:
...
boolean ABCD = isSidesParallel(sideAb, sideCd);
boolean BCDA = isSidesParallel(sideBc, sideDa);

// проверка, чтобы две противоположыне стороны были параллельны, а другие - не параллельны
return (ABCD && !BCDA) || (!ABCD && BCDA);

Можно еще попробовать поиграться с тернарным оператором, но вряд ли вывод станет лучше.
Ответ написан
Alex_Wells
@Alex_Wells
PHP/TS/Kotlin developer
return (isSidesParallel(sideAb, sideCd) && !isSidesParallel(sideBc, sideDa)) || 
    (!isSidesParallel(sideAb, sideCd) && isSidesParallel(sideBc, sideDa));


и are sides parallel, а не is
Ответ написан
Therapyx
@Therapyx
Data Science
Написать его по человечески, с комментариями и чтобы его мог прочитать другой человек. А потом вернуть true или false.
мой лучший тебе совет. Не вые... Тренируйся писать хороший код. А хороший код - это не красивый на твой взгляд, а понятный как тебе, так и другим людям.
Ибо поверь, если в таком ключе будет что-то посложнее и ты вернешься к этому коду через год, то ты потом и глаза и голову сломаешь))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ОТП Банк Москва
от 240 000 до 270 000 ₽
Sportmaster Lab Санкт-Петербург
от 150 000 ₽
Эвотор Москва
от 180 000 до 250 000 ₽