Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегрузка операторов 
:(
    Опции темы
azesmcar
Дата 6.12.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(newbee @  6.12.2011,  10:59 Найти цитируемый пост)
Еще! Отказываясь от операторов мы забываем о такой головной боли (особенно начинающих программистов) как порядок выполнения операторов. 

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

Отказываться от какой либо возможности языка стоит лишь тогда, когда от нее есть только вред и никакой пользы. А так код испортить можно чем угодно, функция math.abs вполне может форматировать диск, никто не мешает программисту написать такой код, но это не значит, что от функций нужно отказываться.

Добавлено @ 11:10
Цитата(newbee @  6.12.2011,  11:05 Найти цитируемый пост)
Удивительность перегрузки - это аргумент, я его констатировала. 

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

Это сообщение отредактировал(а) azesmcar - 6.12.2011, 11:10
PM   Вверх
newbee
Дата 6.12.2011, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 1
Всего: 19



Цитата(502 @  6.12.2011,  12:03 Найти цитируемый пост)
это распространяется на любые функции
Нет. Если в мануале по языку сказано, что встроенная функция add обладает всеми свойствами математического плюса и предназначена для сложения двух чисел, в случае с отсутствием возможности перегрузки (или перегрузки встроенных функций, не знаю, бывает ли такое в жизни), я могу со всей уверенностью писать add(a,b), не опасаясь угробить свой порно-архив.

Это сообщение отредактировал(а) newbee - 6.12.2011, 11:56


--------------------
You're face to face
With man who sold the world
PM   Вверх
newbee
Дата 6.12.2011, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 1
Всего: 19



Цитата(azesmcar @  6.12.2011,  12:07 Найти цитируемый пост)
Мне непонятно что в перегрузке удивительного? Можно написать функцию add, которая будет выполнять деление, это тоже будет удивительно, но это НЕ аргумент в пользу отказа от функций, это аргумент в пользу увольнения программиста.
Стандартный оператор +. Я его перегружаю и переназначаю на деление. Потом вижу в коде a<стандартный оператор +>b и открываю небольшой кирпичный заводик.

Цитата(azesmcar @  6.12.2011,  12:07 Найти цитируемый пост)
Для четкого порядка выполнения существуют скобки, вовсе не обязательно помнить порядок выполнения всех операторов.
Существуют. Мы ими пользуемся и получаем инфиксный лисп, или не пользуемся и имеем нечто близкое к математическому, но при большом числе операторов это стремится превратиться в кашу и будет переписано в инфиксный лисп при первом же рефакторинге.

azesmcar, наш спор не имеет смысла, т.к. я сама выступаю за максимальную вседозволенность - фрилав, анархия и полный легалайз! - просто в топике выступаю в роли Кэпа: чем язык гибче, тем больше потенциальных косяков может всплыть во время его использования. Это не должно останавливать от использования такого языка, но просто быть готовым к неожиданностям надо.

Еще в кучу перегрузки (функций): если программа на нашем языке выполняется нативно, перегрузка неизбежно (или нет?) приведет к name-mangling в исполняемом файле программы.


--------------------
You're face to face
With man who sold the world
PM   Вверх
502
Дата 6.12.2011, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Я всегда прав
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 16.7.2011

Репутация: нет
Всего: 4



Цитата(newbee @  6.12.2011,  11:56 Найти цитируемый пост)
Если в мануале по языку сказано, что встроенная функция add

ok, тут я погорячился, все кроме встроенных
Цитата(newbee @  6.12.2011,  12:12 Найти цитируемый пост)
Стандартный оператор +. Я его перегружаю и переназначаю на деление.

пишу функцию add и делаю деление  smile 
Цитата(newbee @  6.12.2011,  12:12 Найти цитируемый пост)
приведет к name-mangling в исполняемом файле программы

тебя волнует name-mangling в исполняемом файле программы?  smile 
PM MAIL   Вверх
newbee
Дата 6.12.2011, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 1
Всего: 19



Цитата(502 @  6.12.2011,  13:32 Найти цитируемый пост)
пишу функцию add и делаю деление 
Делай, но согласись, одно дело, когда непонятное поведение преследует тебя только в твоем коде, и другое - если оно по факту может происходить в любом месте.

Цитата(502 @  6.12.2011,  13:32 Найти цитируемый пост)
тебя волнует name-mangling в исполняемом файле программы?
Ну вообще то да, случается, что волнует.


--------------------
You're face to face
With man who sold the world
PM   Вверх
502
Дата 6.12.2011, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Я всегда прав
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 16.7.2011

Репутация: нет
Всего: 4



Цитата(newbee @  6.12.2011,  12:41 Найти цитируемый пост)
Делай, но согласись, одно дело, когда непонятное поведение преследует тебя только в твоем коде, и другое - если оно по факту может происходить в любом месте.

не совсем понял


Код

a.add(b)

Код

a.operator+(b)
a + b // sytax sugar

в чем отличие ?
PM MAIL   Вверх
newbee
Дата 6.12.2011, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 1
Всего: 19



Цитата(502 @  6.12.2011,  13:52 Найти цитируемый пост)
a.add(b)
Это в язык не встроено. Тут ты полагаешься на авось, изучаешь документацию на функцию add или вычитываешь ее исходник. Если в языке включена перегрузка, выполняешь квест, описанный ниже.

Цитата(502 @  6.12.2011,  13:52 Найти цитируемый пост)
a.operator+(b)
a + b // sytax sugar
Это встроено. Если перегрузки нет, ты уверен, что выполнится именно то, что написано: значения двух переменных будут сложены - вот в этом весь цимес. Если мы имеем перегрузку функций/операторов, в этом ты тоже не уверен и полагаешься на авось или ищешь типы переменных (а в с++ еще и то к каким типам они могут быть приведены! (а в с++ типы приводятся двумя способами, совсем свихнуться можно!)), устанавливаешь какой из множества операторов + будет выполнен и изучаешь документацию на него или вычитываешь его исходник.


--------------------
You're face to face
With man who sold the world
PM   Вверх
azesmcar
Дата 6.12.2011, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(newbee @  6.12.2011,  13:10 Найти цитируемый пост)
Это в язык не встроено. Тут ты полагаешься на авось, изучаешь документацию на функцию add или вычитываешь ее исходник. Если в языке включена перегрузка, выполняешь квест, описанный ниже.

a + b для НЕ фундаментальных типов тоже в документацию не встроено. Речь идет не о переопределении операторов, а о перегрузке.
PM   Вверх
newbee
Дата 6.12.2011, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 1
Всего: 19



Цитата(azesmcar @  6.12.2011,  15:06 Найти цитируемый пост)
a + b для НЕ фундаментальных типов тоже в документацию не встроено. Речь идет не о переопределении операторов, а о перегрузке.
Ладно, я последний раз попробую объяснить... Ты перегружаешь оператор + для множества комбинаций типов. Потом где-то видишь строчку a+b и реально нет никаких гарантий, что будет выполнено нечто вроде сложения или хотя бы конкатенации. Чтобы не быть голословной, пусть "где-то" - это в каком-то шаблонном коде (c++) или просто в языке с динамической типизацией, видя который перед своими глазами ты действительно не знаешь, какого типа у тебя a и b, и какой код будет выполнен во время вызова a+b. В случае отсутствия возможности перегружать операторы ты будешь уверен, что выболнится то, что написано: сложение, а для "неправильных" типов либо ошибка компиляции, либо сигнал/эксепшн - в зависимости от языка.


--------------------
You're face to face
With man who sold the world
PM   Вверх
502
Дата 6.12.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Я всегда прав
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 16.7.2011

Репутация: нет
Всего: 4



Цитата(newbee @  6.12.2011,  14:28 Найти цитируемый пост)
Потом где-то видишь строчку a+b и реально нет никаких гарантий, что будет выполнено нечто вроде сложения или хотя бы конкатенации. Чтобы не быть голословной, пусть "где-то" - это в каком-то шаблонном коде (c++) или просто в языке с динамической типизацией, видя который перед своими глазами ты действительно не знаешь, какого типа у тебя a и b, и какой код будет выполнен во время вызова a+b.

подставь a.add(b) вместо a+b, ничего не изменится => методы/функции не нужны

Это сообщение отредактировал(а) 502 - 6.12.2011, 14:38
PM MAIL   Вверх
newbee
Дата 6.12.2011, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 1
Всего: 19



Цитата(502 @  6.12.2011,  15:37 Найти цитируемый пост)
подставь a.add(b) вместо a+b, ничего не изменится => методы/функции не нужны
Ты дундук! Я тебе о перегрузке, а ты все за оператор VS функция цепляешься...

Добавлено через 1 минуту и 16 секунд
И ваще, господа спорщики, выкладывайте свои мнения по поводу сабжа а не моего первого комментария


--------------------
You're face to face
With man who sold the world
PM   Вверх
azesmcar
Дата 6.12.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(newbee @  6.12.2011,  14:28 Найти цитируемый пост)
Ты перегружаешь оператор + для множества комбинаций типов. Потом где-то видишь строчку a+b и реально нет никаких гарантий, что будет выполнено нечто вроде сложения или хотя бы конкатенации.

Я и говорю о том, что если программист перегружает оператор + и реализует в нем деление, то его надо кастрировать. Это не повод отменять операторы и их перегрузку, как неправильное использование исключений не повод отменять исключения. Перегрузка операторов - это всего лишь еще одна возможность языка и это возможность (как и впрочем 99% других) дает программисту возможность написать индокод, но это не значит, что сама возможность плохая и она не нужна. Я говорю о том, что не считаю аргументом в пользу отказа от некой возможности то, что используя эту возможность можно написать плохой код.

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

У меня нет аргументов, почему язык должен этого не поддерживать, у меня есть аргументы для обратного утверждения. Почему я должен делить значение встроенного типа int с помощью оператора, а своего типа big_int с помощью функции?

Это сообщение отредактировал(а) azesmcar - 6.12.2011, 14:58
PM   Вверх
mes
Дата 7.12.2011, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(newbee @  6.12.2011,  13:28 Найти цитируемый пост)
 Ты перегружаешь оператор + для множества комбинаций типов. Потом где-то видишь строчку a+b и реально нет никаких гарантий, что будет выполнено нечто вроде сложения или хотя бы конкатенации. 

Да полностью согласен.. Для тех, кому гибкость не нужна, такие языки как С++ противопоказаны,  в крайнем случае С в котором отсутсвует перегрузка как таковая, хотя и он для неокрепшей психики не рекомендуются.. Лучше уж к языкам Виртам приобщиться (привет главному агитатору этого дела, давно его видно не было).. Сухие, не эмоциональные предложения  обеспечат мнимую уверенность в безопасности кода..
Но есть люди, которым охота придать окрас своим предложениям.. Им не нравится односложные предложения первого класса, а хочется передать свою мысль во всей ее красоте. Таким неохота нудно и банально описывать компилятору, что он должен сделать, а проще переложить эту рутинную работу на его плечи, извлекая из системы типов максимальную пользу...
Но для второго мало желания красиво выражаться, нужно еще и учиться, знать правила (а в некоторых языках  (С++) из за многообразия ньюансов это действительно затруднительно).. Мало вероятно, что некто имея уровень образования соответсвующий 3му классу, сможет писать сочинения на уровне Чехова..  Поэтому мое мнение, спорить надо не о наличие в языке возможностей перегрузки, в частности, операторов, а о пороге вхождения таких языков.. 

P.S. (примеры языков приводил со своей колокольни)

Это сообщение отредактировал(а) mes - 7.12.2011, 09:01


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0572 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.