Функции - Степень идентичности (версия 2 от 29.09.07)

01.10.07

Разработка - Математика и алгоритмы

Степень идентичность в этой версии рассматривается в пяти разрезах.
Пока хорошо проработаны только первые три (имена, параметры, код), но их совокупность позволяет выделить некоторые значимые термины для классификации.
Данная классификация послужит методической основой для некой универсальной и автоматически пополняемой библиотеки функций из наиболее популярных конфигураций.
Рейтинг будет вычисляться просто - если одна и та же функция встречается в двух конфигурациях, то её рейтинг = 2.

Функции – Степень идентичности (версия 2 от 29.09.07)

Введение

Что стоит за словами "Эти две функции одинаковы"? Насколько одинаковы эти функции? Могут ли считаться одинаковыми функции, вся разница в которых заключается лишь в том, что в одной использованы английские ключевые слова, а в другой русские?

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

Данная классификация призвана сформировать некоторый общий словарь терминов, однозначно определяющий степень схожести двух произвольных функций, вычисленную несколькими произвольными инструментами для сравнения функций, или используемый при визуальном анализе кода.

Необходимые ограничения

В данной классификации вопрос о синтаксической правильности кода функции не поднимается в принципе - функции априори считаются синтаксически корректными. Исходя из этого утверждения, тело функции и тело процедуры можно считать абсолютно аналогичным (несмотря, на то, что функция обязана возвращать значение)

В данной классификации не рассматривается вопрос о видимости функции из других модулей, поэтому ключевое слово Экспорт нас не интересует.

В описания синтаксиса не включены ключевые слова, обозначающие начало функции и её завершение (Функция, Function, КонецФукнции, EndFunction). Предполагается, что все эти ключевые слова могут быть заменены на пару Функция-КонецФункции.

Качество и наличие комментариев являются предметом другой классификации.

В рамках данной классификации аналогично может быть рассмотрена идентичность процедур.

Общее представление об идентичности функций

Идентичность функций будет рассматривается в следующих относительно независимых разрезах:
  • Идентичность по наименованию

  • Идентичность по параметрам

  • Идентичность по реализации

  • Идентичность по возвращаемым значениям

  • Идентичность по результатам

Идентичность по наименованию

Функция <ИмяФункции>([<ПараметрыФункции>])

Одноименные функции – функции с совпадающими наименованиями без учета регистра.

Разноименные функции – функции с различающимися именами.

Идентичность по параметрам

ПараметрыФункции = [<Параметр>]*[,<Параметр>]

Параметр = [[Знач] <ИмяПараметра>[=<ДефЗнач>],]

Т.к. у нас нет возможности проверить тип параметра, будем ориентироваться только на имя параметра, признак передачи по значению, наличие значения по умолчанию, а также на количество параметров.

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

Пока только проработан вариант полного совпадения количества и дополнительных характеристик параметров.

Полная идентичность по параметрам – количество параметром, их название и дополнительные характеристики совпадают.

Идентичность по параметрам – количество параметров и дополнительные характеристик совпадают, а вот наименования параметров не совпадают.

Идентичность по реализации

Полная идентичность по реализации – у двух функций тело функции полностью совпадает без учета незначащих символов и комментариев.

Идентичность реализации – идентичные по параметрам функций полностью совпадают без учета незначащих символов и комментариев, но в случае приведения имен параметров к одним значениям с соответствующей заменой имен в теле функции.

Идентичность по возвращаемым значениям

Анализу подлежат все возможные значения-параметры обязательного оператора Возврат.

Идентичность по результатам

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

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

Обобщенная степень идентичности

Объединение всей совокупности классификаций по идентичности позволяет ввести обобщенные понятия степени идентичности.

Полная идентичность – две функции полностью идентичны по параметрам и по коду.

Идентичность – две функции идентичны по параметрам и по коду.

Синонимичные функции – две функции идентичны или полностью идентичны, но различаются наименованиями.

Заключение

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

Для идентичных функций (не полная идентичность) необходимо проработать такую ситуацию, когда в теле функции изменяется переменная, предполагаемая как локальная, но не закрытая от изменения оператором Перем; В результате замены одной идентичной функции на другую и наличии совпадения глобальной переменной и «незакрытой» локальной переменной, могут возникнуть проблемы.



См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    3165    stopa85    12    

38

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    7556    user1959478    51    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3111    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    10905    7    SpaceOfMyHead    18    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4361    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

В статье анализируются средства платформы для решения системы линейных уравнений в 1С. Приводятся доводы в пользу некорректной работы встроенных алгоритмов, а значит потенциально некорректного расчета себестоимости в типовых конфигурациях.

23.11.2022    3531    gzharkoj    14    

25

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    9042    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. brr 184 01.10.07 11:02 Сейчас в теме
2. brix8x 526 01.10.07 12:33 Сейчас в теме
Нет, это не ТЗ, хотя при создании программы готовая классификация может быть полезной.
Оставьте свое сообщение