Сравнение (программирование)

Поделись знанием:
Перейти к: навигация, поиск

Сравне́ние в программировании — общее название ряда операций над па́рами значений одного типа, реализующих математические отношения равенства и порядка. В языках высокого уровня такие операции, чаще всего, возвращают булево значение («истина» или «ложь»).

По-разному рассматривается сравнение скалярных (числовых) объектов, указателей и объектов сложных типов данных.



Сравнение скалярных типов данных

При сравнении объектов скалярных (числовых) типов данных сравнивается непосредственно сами хранимые числовые значения. Сами числовые значения, при этом, остаются неизменными.

В языках низкого уровня скалярные объекты записываются в регистры процессора, а для их сравнения используется, обычно, команда CMP, которая определённым образом устанавливает флаги процессора.

В языках высокого уровня используются логические операторы, которые возвращают (в точку вызова) некоторое значение, которое интерпретируется как логическое.

Логические операторы реализуют следующие математические операции сравнения:

  • Проверка на равенство (<math>=</math>) или/и неравенство (<math>\ne</math>);
  • Проверка на строгое неравенство (<math><</math> и <math>></math>);
  • Проверка на нестрогое неравенство (<math>\leqslant</math> и <math>\geqslant</math>).

В языках высокого уровня, соответственно, реализованы следующие логические операторы:

  • Проверка на равенство (= в Паскале и == в Си) и неравенства (<> в Паскале и != в Си);
  • Отношение строгого порядка (< и >);
  • Отношение нестрогого порядка (<=, >=).

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

Сравнение нечисловых данных

Даже если аргументы сравнения не представляют собой числовые данные, их сравнение всё равно может быть реализовано, в том числе как часть стандарта языка программирования. При работе со сложными объектами программа оперирует с ними с помощью указателей. Таким образом, появляется как минимум два варианта сравнения данных:

  • Сравнение указателей — сравнение значений указателей. Равенство указателей означает, что две переменных указывают на один и тот же объект данных (участок памяти).
  • Сравнение содержимого — сравнение объектов с точки зрения логики на основе знания их содержимого. Например, сравнение строк.

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

Сравнение содержимого, например, сравнение строк, чаще всего встроена в реализацию среды исполнения для языка и может являться частью стандарта. Однако допускается самостоятельная реализация правил сравнения содержимого для пользовательских структур путём перегрузки операторов (Си) или определения (переопределения) методов (Object.equals и интерфейс Comparable в Java). Для встроенных типов данных (например, String) хотя часто нельзя переопределить правила сравнения, их можно настроить с учётом текущей языка и локализации, а также использовать собственные реализации правил сравнения с функциями сортировки (интерфейс Comparator в Java).

Некоторые стандарты, например DOM Level 3, определяет дополнительные типы эквивалентности. В частности, стандарт DOM Level 3 предполагает, что один и тот же элемент документа может быть представлен двумя и более участками в памяти компьютера. Поэтому определяется дополнительная операция isSameNode, которая является проверкой равенства содержимого с точки зрения языка программирования, но фактически является проверкой эквивалентности указателей с точки зрения стандарта DOM.[1]

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

Напишите отзыв о статье "Сравнение (программирование)"

Примечания

  1. [www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1950641247 Document Object Model Core]


Отрывок, характеризующий Сравнение (программирование)

10 го октября, в тот самый день, как Дохтуров прошел половину дороги до Фоминского и остановился в деревне Аристове, приготавливаясь в точности исполнить отданное приказание, все французское войско, в своем судорожном движении дойдя до позиции Мюрата, как казалось, для того, чтобы дать сражение, вдруг без причины повернуло влево на новую Калужскую дорогу и стало входить в Фоминское, в котором прежде стоял один Брусье. У Дохтурова под командою в это время были, кроме Дорохова, два небольших отряда Фигнера и Сеславина.
Вечером 11 го октября Сеславин приехал в Аристово к начальству с пойманным пленным французским гвардейцем. Пленный говорил, что войска, вошедшие нынче в Фоминское, составляли авангард всей большой армии, что Наполеон был тут же, что армия вся уже пятый день вышла из Москвы. В тот же вечер дворовый человек, пришедший из Боровска, рассказал, как он видел вступление огромного войска в город. Казаки из отряда Дорохова доносили, что они видели французскую гвардию, шедшую по дороге к Боровску. Из всех этих известий стало очевидно, что там, где думали найти одну дивизию, теперь была вся армия французов, шедшая из Москвы по неожиданному направлению – по старой Калужской дороге. Дохтуров ничего не хотел предпринимать, так как ему не ясно было теперь, в чем состоит его обязанность. Ему велено было атаковать Фоминское. Но в Фоминском прежде был один Брусье, теперь была вся французская армия. Ермолов хотел поступить по своему усмотрению, но Дохтуров настаивал на том, что ему нужно иметь приказание от светлейшего. Решено было послать донесение в штаб.
Для этого избран толковый офицер, Болховитинов, который, кроме письменного донесения, должен был на словах рассказать все дело. В двенадцатом часу ночи Болховитинов, получив конверт и словесное приказание, поскакал, сопутствуемый казаком, с запасными лошадьми в главный штаб.


Ночь была темная, теплая, осенняя. Шел дождик уже четвертый день. Два раза переменив лошадей и в полтора часа проскакав тридцать верст по грязной вязкой дороге, Болховитинов во втором часу ночи был в Леташевке. Слезши у избы, на плетневом заборе которой была вывеска: «Главный штаб», и бросив лошадь, он вошел в темные сени.
– Дежурного генерала скорее! Очень важное! – проговорил он кому то, поднимавшемуся и сопевшему в темноте сеней.
– С вечера нездоровы очень были, третью ночь не спят, – заступнически прошептал денщицкий голос. – Уж вы капитана разбудите сначала.
– Очень важное, от генерала Дохтурова, – сказал Болховитинов, входя в ощупанную им растворенную дверь. Денщик прошел вперед его и стал будить кого то:
– Ваше благородие, ваше благородие – кульер.
– Что, что? от кого? – проговорил чей то сонный голос.
– От Дохтурова и от Алексея Петровича. Наполеон в Фоминском, – сказал Болховитинов, не видя в темноте того, кто спрашивал его, но по звуку голоса предполагая, что это был не Коновницын.
Разбуженный человек зевал и тянулся.
– Будить то мне его не хочется, – сказал он, ощупывая что то. – Больнёшенек! Может, так, слухи.
– Вот донесение, – сказал Болховитинов, – велено сейчас же передать дежурному генералу.
– Постойте, огня зажгу. Куда ты, проклятый, всегда засунешь? – обращаясь к денщику, сказал тянувшийся человек. Это был Щербинин, адъютант Коновницына. – Нашел, нашел, – прибавил он.
Денщик рубил огонь, Щербинин ощупывал подсвечник.
– Ах, мерзкие, – с отвращением сказал он.
При свете искр Болховитинов увидел молодое лицо Щербинина со свечой и в переднем углу еще спящего человека. Это был Коновницын.
Когда сначала синим и потом красным пламенем загорелись серники о трут, Щербинин зажег сальную свечку, с подсвечника которой побежали обгладывавшие ее прусаки, и осмотрел вестника. Болховитинов был весь в грязи и, рукавом обтираясь, размазывал себе лицо.
– Да кто доносит? – сказал Щербинин, взяв конверт.
– Известие верное, – сказал Болховитинов. – И пленные, и казаки, и лазутчики – все единогласно показывают одно и то же.
– Нечего делать, надо будить, – сказал Щербинин, вставая и подходя к человеку в ночном колпаке, укрытому шинелью. – Петр Петрович! – проговорил он. Коновницын не шевелился. – В главный штаб! – проговорил он, улыбнувшись, зная, что эти слова наверное разбудят его. И действительно, голова в ночном колпаке поднялась тотчас же. На красивом, твердом лице Коновницына, с лихорадочно воспаленными щеками, на мгновение оставалось еще выражение далеких от настоящего положения мечтаний сна, но потом вдруг он вздрогнул: лицо его приняло обычно спокойное и твердое выражение.