Комментарии 30
Ну в приципе логично. Все это операторы равенства. Просто некоторые операторы равенства равнее других операторов равенства.
+6
Более интересно — являются ли они отношениями эквивалентности. Основная претензия к «как-бы типа равенству» в PHP заключается не в том, что есть == и ===, а в том, что == не является отношением эквивалентности (а операторы сравнения не являются отношениями порядка).
Насколько я знаю ничего подобного с 6ю опреаторами равенства в Perl6 нету.
Насколько я знаю ничего подобного с 6ю опреаторами равенства в Perl6 нету.
+2
Просто чем более язык ООП, тем больше у него всяких операторов равенства.
-3
Приведите в качестве примера еще один ОО язык в котором также много операторов равенства.
0
Питон
-1
Давайте посмотрим. Я немного знаком с Питоном. Сколько там операторов равенства?
0
0
НЛО прилетело и опубликовало эту надпись здесь
Я заметил только «больше», «меньше», «равно», «не равно» а так же менее строгие «меньше либо равно», «больше либо равно».
Другой вопрос, что питон позволяет их переопределить для своих классов.
Вплоть до того, что если A и B — экземпляры некоего класса, то одновременно может выполняться такое:
Это говорит только об одном: программаст — ССЗБ.
Другой вопрос, что питон позволяет их переопределить для своих классов.
Вплоть до того, что если A и B — экземпляры некоего класса, то одновременно может выполняться такое:
>>> print A == B and A != B
True
Это говорит только об одном: программаст — ССЗБ.
0
Хотя вот Ruby еще
phrogz.net/ProgrammingRuby/language.html#table_18.4
phrogz.net/ProgrammingRuby/language.html#table_18.4
0
В любом лисп-подобном языке их будет масса. Так в языке Scheme есть "=", «char=?», «eq?», «eqv?», «equal?». В некоторых диалектах бываёт ещё варианты. Гораздо проще работать с десятком простых и предсказуемых операторов, чем с парочкой операторов, обладающих крайне запутанной семантикой. Конечно если ваша цель — написать работающую программу, а не срубить бабла на поддержке.
+1
«Простых и предсказуемых» означает в том числе «имеющих предсказуемые и различимые названия». Довольно трудно вспомнить, чем отличаются «eq?», «eqv?» и «equal?»
0
Совершенно нетрудно. Чем короче оператор, тем быстрее он работает и тем реже возвращает «true». «eq?» сравнивает только ссылки на объекты (самые простые объекты типа #t, #f или #popa собственно являются ссылками в таблицу символов и для них он тоже работает), «eqv?» сравнивает значения (то есть работает уже и для символов и чисел), «equal?» сравнивает структуры (рекурсивно). На практике «eqv?» используется редко, так как вам чаще всего нужно знать — тот ли это объект или другой или сравнивать числа (числовым операторам сравнения). Ни о каких автоматических преобразованиях типов речи не идёт никогда — а это очень важно.
Почему я так ненавижу автоматические преобразования типа? Потому что в 90% случаев они не нужны, так что в тех редких случаях где они нужны их несложно сделать и явно, а зато если неявное преобразование типа происходит там, где оно не нужно — вы имеете либо просто ошибку либо дырку в безопасности. Упростить себе жизнь в 1 случае из 10 за счёт усложнения в 9 случаях из 10 — кто ж вас умным назовёт? Пока PHP использовался для совсем простых страничек (100KB HTML+CSS, две строки на PHP) соотношение было обратным, но как только речь заходит о какой-нибудь несчастной гостевой книге — так соотношение начинает приближаться к 1-к-1 (и свидетельствует о том, что пора переходить на использование какого-нибудь языка программирования — хотя бы даже и Perl'а), а форумы уж точно на PHP делать не следует (если есть выбор: если у вас на хостинге есть только PHP и нету ничего больше, то куда деваться?), не говоря уже о бо́льших проектах.
Почему я так ненавижу автоматические преобразования типа? Потому что в 90% случаев они не нужны, так что в тех редких случаях где они нужны их несложно сделать и явно, а зато если неявное преобразование типа происходит там, где оно не нужно — вы имеете либо просто ошибку либо дырку в безопасности. Упростить себе жизнь в 1 случае из 10 за счёт усложнения в 9 случаях из 10 — кто ж вас умным назовёт? Пока PHP использовался для совсем простых страничек (100KB HTML+CSS, две строки на PHP) соотношение было обратным, но как только речь заходит о какой-нибудь несчастной гостевой книге — так соотношение начинает приближаться к 1-к-1 (и свидетельствует о том, что пора переходить на использование какого-нибудь языка программирования — хотя бы даже и Perl'а), а форумы уж точно на PHP делать не следует (если есть выбор: если у вас на хостинге есть только PHP и нету ничего больше, то куда деваться?), не говоря уже о бо́льших проектах.
0
по-моему, ООП подходом было бы логичнее создать метод compare()
+1
There is more than one way to do it. :)
+2
Мне нравится как это сделано в Питоне: есть оператор проверки на равенство, есть проверка неравенства, есть больше, меньше и т. п.
Если нужно, ты можешь их переопределить. Но конечно, тут надо быть аккуратным, чтобы не получить курьезы типа такого:
Если нужно, ты можешь их переопределить. Но конечно, тут надо быть аккуратным, чтобы не получить курьезы типа такого:
>>> print A==B and A != B
True
0
а можно увидеть реально рабочий пример на пайтоне — как добиться «A == B and A != B»? а то вы меня прям заинтриговали.
0
эм, переопределить оба параметра на тру в любом случае?
0
Пожалуйста.
А код вот такой:
In [1]: A = Eqt(1) In [2]: B = Eqt(2) In [3]: A == B Out[3]: True In [4]: A != B Out[4]: True In [5]: A==B and A != B Out[5]: True
А код вот такой:
class Eqt: def __init__(self,p) self.param = p def __ne__(self, other): return True def __eq__(self, other): return True
+1
Немного опередили :)
Фишка действительно в переопределении функций сравнения. Такой подвох хорошо виден в маленькой программе, а в большой с массой компонент надо быть внимательным. Впрочем, это верно для любого программирования, тот же C тоже допускает приколы типа
Фишка действительно в переопределении функций сравнения. Такой подвох хорошо виден в маленькой программе, а в большой с массой компонент надо быть внимательным. Впрочем, это верно для любого программирования, тот же C тоже допускает приколы типа
#define i j /* Have nice debug :) */
0
НЛО прилетело и опубликовало эту надпись здесь
Периодическая таблица операторов ;)
www.ozonehouse.com/mark/blog/code/PeriodicTable.html
www.ozonehouse.com/mark/blog/code/PeriodicTable.html
0
Любопытно наблюдать за миграциями поста из /new/ на главную и назад :-)
0
There Are Too Many Ways To Do It
0
почитал ссылку — все понятно.
к чему претензии?
к чему претензии?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Об одном нововведении в Perl 6