ru

Роберт Мартин

  • Александр Маруевhas quoted2 years ago
    Горизонтальные пропуски используются для группировки взаимосвязанных ­элементов и разделения разнородных элементов

    Оператор присваивания должен быть выделен пробелами, чтобы выделить невзаимосвязанные эллементы: переменную от присваиваемого значения.

  • Александр Маруевhas quoted2 years ago
    Пробелы также применяются для визуального обозначения приоритета операторов

    Операторы "*" и "/" не выделяются пробелами, так как у них высокий приоритет. Операторы "+" и "-" выделяются, так как у них низкий приоритет.

  • Александр Маруевhas quoted2 years ago
    Однако потом я обнаружил, что такое выравнивание не приносит пользы. Оно визуально выделяет совсем не то, что требуется, и отвлекает читателя от моих истинных намерений. Например, в приведенном выше списке объявлений читатель просматривает имена переменных, не обращая внимания на их типы. Аналогичным образом в списке команд присваивания возникает соблазн просмотреть правосторонние значения, не замечая оператора присваивания.

    Речь идет о выравнивании по именам переменных.
    Пример:
    private   Socket          socket;
    private   InputStream     input;
    private   OutputStream    output;
    private   Request         request;
    private   Response        response;
    private   FitNesseContext context;

  • Александр Маруевhas quoted2 years ago
    Сейчас я отдаю предпочтение невыровненным объявлениям и присваиваниям, как в следующем фрагменте, потому что они помогают выявить один важный дефект. Если в программе встречаются длинные списки, нуждающиеся в выравнивании, то проблема кроется в длине списка, а не в отсутствии выравнивания.

    Речь идет о выравнивании по именам переменных.
    Пример:
    private Socket socket;
    private InputStream input;
    private OutputStream output;
    private Request request;
    private Response response;
    private FitNesseContext context;

  • Александр Маруевhas quoted2 years ago
    У каждого программиста есть свои любимые правила форматирования, но если он работает в группе, то должен руководствоваться групповыми правилами.

    Группа разработчиков согласует единый стиль форматирования, который в дальнейшем применяется всеми участниками. Код программного продукта должен быть оформлен в едином стиле. Он не должен выглядеть так, словно был написан несколькими личностями, расходящимися во мнениях по поводу оформления.
  • Александр Маруевhas quoted2 years ago
    Хорошая программная система состоит из набора удобочитаемых документов, оформленных в едином, согласованном стиле. Читатель должен быть уверен в том, что форматные атрибуты, встречающиеся в одном исходном файле, будут иметь точно такой же смысл в других файлах. Ни в коем случае не усложняйте исходный код, допуская его оформление в нескольких разных стилях.
  • Александр Маруевhas quoted2 years ago
    из-за разбросанной повсюду обработки ошибок практически невозможно понять, что же делает код. Обработка ошибок важна, но если они заслоняют собой логику программы — значит, она реализована неверно.
  • Александр Маруевhas quoted2 years ago
    Если ваш код вызывает метод стороннего API, способный вернуть null, создайте для него обертку в виде метода, который инициирует исключение или возвращает объект особого случая.

    Речь идет о большом количестве null проверок в программе.

  • Александр Маруевhas quoted2 years ago
    Первый закон. Не пишите код продукта, пока не напишете отказной модульный тест.

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

    Третий закон. Не пишите код продукта в объем большем, чем необходимо для прохождения текущего отказного теста.

    Эти три за
  • Александр Маруевhas quoted2 years ago
    Скрытие реализации не сводится к созданию прослойки функций между переменными. Скрытие реализации направлено на формирование абстракций! Класс не просто ограничивает доступ к переменным через методы чтения/записи. Вместо этого он предоставляет абстрактные интерфейсы, посредством которых пользователь оперирует с сущностью данных. Знать, как эти данные реализованы, ему при этом не обязательно.

    Речь идет о реализации интерфейсов для создания абстракций.
    Пример:
    Листинг 6.1. Конкретная реализация Point

    public class Point {
    public double x;
    public double y;
    }

    Листинг 6.2. Абстрактная реализация Point
    public interface Point {
    double getX();
    double getY();
    void setCartesian(double x, double y);
    double getR();
    double getTheta();
    void setPolar(double r, double theta);
    }

fb2epub
Drag & drop your files (not more than 5 at once)