Лучшие вопросы
Таймлайн
Чат
Перспективы
Сравнение (программирование)
конструкция или оператор языка программирования, который проверяет или определяет некоторую связь между двумя объектами Из Википедии, свободной энциклопедии
Remove ads
Сравне́ние в программировании — общее название ряда операций над па́рами значений одного типа, либо с приведением типа, реализующих математические отношения равенства и порядка. В языках высокого уровня такие операции, чаще всего, возвращают булево значение («истина» или «ложь»).
По-разному рассматривается сравнение скалярных (числовых) объектов, указателей и объектов сложных типов данных.
Remove ads
Сравнение скалярных типов данных
Суммиров вкратце
Перспектива
При сравнении объектов скалярных (числовых) типов данных сравниваются непосредственно сами хранимые числовые значения. Сами числовые значения, при этом, остаются неизменными.
В языках низкого уровня скалярные объекты записываются в регистры процессора, а для их сравнения используется, обычно, команда CMP
, которая определённым образом устанавливает флаги процессора.
В языках высокого уровня используются логические операторы, которые возвращают (в точку вызова) некоторое значение, которое интерпретируется как логическое.
Логические операторы реализуют следующие математические операции сравнения:
- Проверка на равенство () или/и неравенство ();
- Проверка на строгое неравенство ( и );
- Проверка на нестрогое неравенство ( и ).
В языках высокого уровня, соответственно, реализованы следующие логические операторы:
- Проверка на равенство (
=
в Паскале и==
в Си) и неравенства (<>
в Паскале и!=
в Си); - Отношение строгого порядка (
<
и>
); - Отношение нестрогого порядка (
<=
,>=
).
В языках со слабой типизацией возвращаемое значение, обычно, является целым числом так, что нулевое значение интерпретируется как «ложь», а любое отличное от нуля значение — как «истина». В языках с более сильной типизацией вводится специальный логический тип данных (англ. boolean), но возможно приведение других типов к логическому.
Remove ads
Сравнение нечисловых данных
Суммиров вкратце
Перспектива
Даже если аргументы сравнения не представляют собой числовые данные, их сравнение всё равно может быть реализовано, в том числе как часть стандарта языка программирования. При работе со сложными объектами программа оперирует с ними с помощью указателей. Таким образом, появляется как минимум два варианта сравнения данных:
- Сравнение указателей — сравнение значений указателей. Равенство указателей означает, что две переменных указывают на один и тот же объект данных (участок памяти).
- Сравнение содержимого — сравнение объектов с точки зрения логики на основе знания их содержимого. Например, сравнение строк.
Некоторые языки, ограничивающие работу с указателями, например, Java, хотя не позволяют сравнивать указатели операндами больше-меньше, позволяют проверить равенство указателей.
Сравнение содержимого, например, сравнение строк, чаще всего встроена в реализацию среды исполнения для языка и может являться частью стандарта. Однако допускается самостоятельная реализация правил сравнения содержимого для пользовательских структур путём перегрузки операторов (Си) или определения (переопределения) методов (Object.equals
и интерфейс Comparable
в Java). Для встроенных типов данных (например, String
) хотя часто нельзя переопределить правила сравнения, их можно настроить с учётом текущей языка и локализации, а также использовать собственные реализации правил сравнения с функциями сортировки (интерфейс Comparator
в Java).
Некоторые стандарты, например DOM Level 3, определяет дополнительные типы эквивалентности. В частности, стандарт DOM Level 3 предполагает, что один и тот же элемент документа может быть представлен двумя и более участками в памяти компьютера. Поэтому определяется дополнительная операция isSameNode
, которая является проверкой равенства содержимого с точки зрения языка программирования, но фактически является проверкой эквивалентности указателей с точки зрения стандарта DOM.[1]
В некоторых языках в качестве эквивалентных также могут рассматриваться значения близкие по смысловой нагрузке, хотя и имеющие разные типы, например, пустая строка, пустой массив, число 0, нулевой (null) указатель, ложь — имеют смысл пустоты, отрицания.
Remove ads
Примечания
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads