Понятия
От: BodyaSurgut  
Дата: 09.06.13 14:00
Оценка:
В чём отличие понятий «операция» и «оператор»?
В чем отличие операция присваивания и оператор присваивания? Можно примеры.
Re: Понятия
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 09.06.13 14:24
Оценка:
Здравствуйте, BodyaSurgut, Вы писали:

BS>В чём отличие понятий «операция» и «оператор»?


В наиболее типичном русском переводе, операция — это operator, а оператор — это statement. Но есть и альтернативные варианты перевода.

BS>В чем отличие операция присваивания и оператор присваивания? Можно примеры.


if (a = b) { ... }


операция (operator) присвоения, но не оператор (statement), потому что тут оператор — if.

a = b;


операция присвоения внутри оператора присвоения.
The God is real, unless declared integer.
Re[2]: Понятия
От: BodyaSurgut  
Дата: 09.06.13 14:40
Оценка:
Верно ли?

a += b; оператор
+= операция
Re: Понятия
От: Muxa  
Дата: 09.06.13 14:49
Оценка: +1
BS>В чём отличие понятий «операция» и «оператор»?
BS>В чем отличие операция присваивания и оператор присваивания? Можно примеры.
Различия примерно такие же как между понятиями "параметр" и "аргумент" функции.

a = b;
это операция (statement)


MyClass& operator =(MyClass& other){ ... }
это оператор (operator), вызывается при выполнении операции (statement'а)
Re[3]: Понятия
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 09.06.13 14:51
Оценка:
Здравствуйте, BodyaSurgut, Вы писали:

BS>Верно ли?


BS>a += b; оператор

BS> += операция

Да, при условиях из моего предыдущего ответа.
The God is real, unless declared integer.
Re[2]: Понятия
От: Панда Россия  
Дата: 09.06.13 19:01
Оценка:
M>
M>a = b;
M>
это операция (statement)


Не совсем согласен. На мой взгляд так:

Слово operator не следует калькировать с английского как "оператор" во избежание путаницы, а лучше переводить как "операция".
Пишем "MyClass& operator =..." — произносим при этом "я определил операцию присваивания".

А вот statement, и только его, следует переводить как "оператор" — языковая конструкция, с помощью которой мы указываем программе, что ей нужно сделать.
Например, условный оператор, оператор цикла, оператор вычисления выражения и т.д.

a = 3 + 2 + 1;

Здесь две операции (operator) сложения и одна операция (operator) присваивания.
Но вся эта строчка — это один оператор (statement) языка С++ (выражение с точкой с запятой в конце является оператором вычисления этого выражения).

MyClass& operator =(MyClass& other){ ... }

Это определение операции присваивания (operator)

M>
M>a = b
M>

Это выражение, в котором применяется операция (operator) присваивания

M>
M>a = b;
M>

Это оператор (statement), заставляющий программу вычислить выражение, стоящее перед точкой с запятой (при этом помещение значения b в переменную a — это побочный эффект вычисления выражения, в котором применяется операция (operator) присваивания)
Re[3]: Понятия
От: Muxa  
Дата: 09.06.13 19:19
Оценка:
Спорить не буду, но мне удобнее думать что оператор это мелкая (далее неделимая) частица языка программирования, нежели операция, что-то более крупное, общее, состоящее из операторов.
Возможно меня ввели в заблуждение, английские аналоги этих слов.
Re: Понятия
От: Кодт Россия  
Дата: 09.06.13 22:38
Оценка: 15 (2)
Здравствуйте, BodyaSurgut, Вы писали:

BS>В чём отличие понятий «операция» и «оператор»?

BS>В чем отличие операция присваивания и оператор присваивания? Можно примеры.

Поскольку эти термины совершенно по-зверски перегружены и перепутаны, то лучше всего смириться — и использовать терминологию, принятую в спецификации и стандарте конкретного языка.

Так вот, в стандартах Си и С++ словом "оператор" обозначают элемент синтаксиса: значок "=" и функцию, именованную этим значком "operator=(.....)"
А словом "операция" — отвлечённое действие, выполняемое какими-то средствами языка — от примитивных операторов и каких-то конструкций до библиотечных функций.

То же относится и к стандарту языка Паскаль, хотя авторы русских учебников почему-то упорно переводили "statement" как "оператор", а "operator", соответственно, как "операция".
if-then-else — это compound statement, а не "составной оператор"
Но с паскалем такие шутки ещё прокатывают, а вот с С++ уже нет, потому что есть лексема operator.

К сожалению, я затруднюсь найти подходящую кальку для statement, поэтому ограничусь прямым заимствованием: стейтмент.
Иногда это можно перевести словом "инструкция", но в стандарте Си instruction задействовано для инструкций процессора.


Упражнение по скачиванию стандартов с www.open-std.org и по поиску в них слов "operation" и "operator" оставляю желающим (там слишком много мелких цитат, чтобы тащить их сюда).


Да, чтобы дважды не вставать.
Припомню товарищу Александреску слово "функтор", которым он стал обозначать не то, что в математике, хаскелле или окамле называется функтором, а функциональные объекты. Или это надо товарища Степанова хаять?
(Шаблоны гораздо больше подходят на роль функторов — а в окамле функторы и есть аналоги плюсовых шаблонов).
Перекуём баги на фичи!
Re[2]: Понятия
От: LaptevVV Россия  
Дата: 15.06.13 03:32
Оценка:
Здравствуйте, Кодт, Вы писали:

К>То же относится и к стандарту языка Паскаль, хотя авторы русских учебников почему-то упорно переводили "statement" как "оператор", а "operator", соответственно, как "операция".

Так исторически сложилось в СССР — и никто не путался... :)
К>if-then-else — это compound statement, а не "составной оператор" :crash:
Дык нисто его составным оператором и не переводил — мне такого в советских книжках не встречалось.
К>Но с паскалем такие шутки ещё прокатывают, а вот с С++ уже нет, потому что есть лексема operator.

К>К сожалению, я затруднюсь найти подходящую кальку для statement, поэтому ограничусь прямым заимствованием: стейтмент.

Можно говорить о предложении. Раз уж язык (хоть и язык программирования), то почему бы не "предложение" (языка).
К>Иногда это можно перевести словом "инструкция", но в стандарте Си instruction задействовано для инструкций процессора.
Ну, если путаницы в контексте не возникнет, можно и "инструкцию

К>Припомню товарищу Александреску слово "функтор", которым он стал обозначать не то, что в математике, хаскелле или окамле называется функтором, а функциональные объекты. Или это надо товарища Степанова хаять?

К>(Шаблоны гораздо больше подходят на роль функторов — а в окамле функторы и есть аналоги плюсовых шаблонов).
Я впервые прочитал у Джосаттиса и Вандевурда в Шаблонах...
Они там пишут, что вообще-то функтором надо называть любую сущность, которая ведет себя как функция.
Но конкретно в этой книжке давайте будем звать только класс с перегруженной operator().
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Понятия
От: Кодт Россия  
Дата: 15.06.13 13:20
Оценка:
Здравствуйте, LaptevVV, Вы писали:

К>>То же относится и к стандарту языка Паскаль, хотя авторы русских учебников почему-то упорно переводили "statement" как "оператор", а "operator", соответственно, как "операция".

LVV>Так исторически сложилось в СССР — и никто не путался...

... до тех пор, пока не появился С++ с ключевым словом operator.

До сего момента я думал на "особый советский путь развития", когда сложилась собственная терминология, и с её помощью стали переводить иностранные спецификации. В этом нет ничего необычного, алгориФмы Маркова тому пример. И ничего ужасного тоже нет.
Но сомнения закрались, — и вправду: в спецификации Algol-60 (http://www.masswerk.at/algol60/syntax.txt, например) фигурируют "операторы" в несколько необычном ключе.
Опять же, у паскаля грамматика операторная (подкласс контекстно-свободной, для которого удобно делать парсеры на таблицах приоритетов). За исключением if-then/if-then-else.

К>>if-then-else — это compound statement, а не "составной оператор"

LVV>Дык нисто его составным оператором и не переводил — мне такого в советских книжках не встречалось.

Встречалось-встречалось.
Вот бы разжиться советскими учебниками по паскалю (Зима) и алголу (авторов не помню), чтоб проверить.

К>>Но с паскалем такие шутки ещё прокатывают, а вот с С++ уже нет, потому что есть лексема operator.


К>>К сожалению, я затруднюсь найти подходящую кальку для statement, поэтому ограничусь прямым заимствованием: стейтмент.

LVV>Можно говорить о предложении. Раз уж язык (хоть и язык программирования), то почему бы не "предложение" (языка).
К>>Иногда это можно перевести словом "инструкция", но в стандарте Си instruction задействовано для инструкций процессора.
LVV>Ну, если путаницы в контексте не возникнет, можно и "инструкцию

"Предложение" — хорошее слово. Что-то я его позабыл.

К>>Припомню товарищу Александреску слово "функтор", которым он стал обозначать не то, что в математике, хаскелле или окамле называется функтором, а функциональные объекты. Или это надо товарища Степанова хаять?

К>>(Шаблоны гораздо больше подходят на роль функторов — а в окамле функторы и есть аналоги плюсовых шаблонов).
LVV>Я впервые прочитал у Джосаттиса и Вандевурда в Шаблонах...
LVV>Они там пишут, что вообще-то функтором надо называть любую сущность, которая ведет себя как функция.
LVV>Но конкретно в этой книжке давайте будем звать только класс с перегруженной operator().

Ну, может, и они — застрельщики этого безобразия.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.