История изменений
Исправление www_linux_org_ru, (текущая версия) :
Если «длина(х) == длина(у1) + длина(у2)» - инвариант алгоритма, в котором эта функция используется,
да
не выставлять эту функцию во внешний интерфейс и паниковать при нарушении инварианта.
это как «не выставлять»? допустим, у нас несколько алгоритмов, которым нужна эта функций, причем их могут добавлять совершенно посторонние люди (которые в курсе про инвариант из доков)
и паниковать при нарушении инварианта.
для паники (или ее отсутствия) придется считать каждый раз длину; а если подсчитать длину долго (например, нужно пройти по всему массиву), а вот найти точку где длина(х1) == длина(у1) можно быстро (например бинарным поиском — такова специфика задачи) ?
Исправление www_linux_org_ru, :
Если «длина(х) == длина(у1) + длина(у2)» - инвариант алгоритма, в котором эта функция используется,
да
не выставлять эту функцию во внешний интерфейс и паниковать при нарушении инварианта.
это как «не выставлять»? допустим, у нас несколько алгоритмов, которым нужна эта функций, причем их могут добавлять совершенно посторонние люди (которые в курсе про инвариант из доков)
и паниковать при нарушении инварианта.
а если подсчитать длину долго (например, нужно пройти по всему массиву), а вот найти точку где длина(х1) == длина(у1) можно быстро (например бинарным поиском — такова специфика задачи) ?
Исходная версия www_linux_org_ru, :
Если «длина(х) == длина(у1) + длина(у2)» - инвариант алгоритма, в котором эта функция используется,
да
не выставлять эту функцию во внешний интерфейс и паниковать при нарушении инварианта.
это как «не выставлять»? допустим, у нас несколько алгоритмов, которым нужна эта функций, причем их могут добавлять совершенно посторонние люди (которые в курсе про инвариант из доков)
и паниковать при нарушении инварианта.
а если подсчитать длину долго (например, нужно пройти по всему массиву), а вот найти точку где длина(х1) == длина(у1) можно быстро (например бинарным поиском — такова специфика задачи)