Должен быть лучший способ написать это

#java

#java

Вопрос:

 public static boolean isValidCoordinate(Coordinate point) {
    Point map = point.mapCoordinates, tileSet = point.tileSetCoordinates, tile = point.tileCoordinates, pixel = point.pixelCoordinates;
    if (map != null amp;amp; map.x >= 0 amp;amp; map.y >= 0) {
        if (tileSet != null) {
            if (tileSet.x >= 0 amp;amp; tileSet.y >= 0) {
                if (tile != null) {
                    if (tile.x >= 0 amp;amp; tile.y >= 0) {
                        if (pixel != null) {
                            if (pixel.x >= 0 amp;amp; pixel.y >= 0) {
                                return true;
                            }
                            else {
                                return false;
                            }
                        }
                        else {
                            return true;
                        }
                    }
                    else {
                        return false;
                    }
                }
                else {
                    return true;
                }
            }
            else {
                return false;
            }
        }
        else {
            return true;
        }
    }
    else {
        return false;
    }
}
  

Класс coordinate содержит 4 точечных объекта, представляющих уникальный набор координат. Каждый набор координат должен быть положительным. Координаты карты не могут быть нулевыми, но другие точки могут, если все, что после них, равно нулю, а все, что перед ними, является положительным в этом списке: mapCoordinates, tileSetCoordinates, tileCoordiantes, pixelCoordinates. Спасибо

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

1. Действительно серьезно неоднозначное название вопроса.

2. просто сведите эти ветви if и else в одно логическое уравнение.

3. Если вы откроете этот код в IntelliJ и нажмете Alt Enter достаточное количество раз, это упростит это для вас.

Ответ №1:

Конечно, есть. Используйте методы для сохранения DRY:

 boolean isValid(Point p) {
    return p == null || (p.x >= 0 amp;amp; p.y >= 0);
}

boolean isValid(Coordinate c) {
    return isValid(c.mapCoordinates)
        amp;amp; isValid(c.tileSetCoordinates) 
        amp;amp; isValid(c.tileCoordinates) 
        amp;amp; isValid(c.pixelCoordinates);
}
  

И да, вызов переменных типа Point coordinate и переменных типа Coordinate point , скорее всего, собьет читателя с толку.

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

1. 1: Создание координаты c понятнее, но вы должны изменить все способы использования. т. е. s/point/c/ 😉

2. Ага, я пропустил return true среди всех тех, которые возвращают false … исправлено.

3. Все еще не эквивалентно, поскольку map не может быть true. Хотя все еще 1.