Здравствуйте, BodyaSurgut, Вы писали:
BS>В чём отличие понятий «операция» и «оператор»?
В наиболее типичном русском переводе, операция — это operator, а оператор — это statement. Но есть и альтернативные варианты перевода.
BS>В чем отличие операция присваивания и оператор присваивания? Можно примеры.
if (a = b) { ... }
операция (operator) присвоения, но не оператор (statement), потому что тут оператор — if.
BS>В чём отличие понятий «операция» и «оператор»? BS>В чем отличие операция присваивания и оператор присваивания? Можно примеры.
Различия примерно такие же как между понятиями "параметр" и "аргумент" функции.
a = b;
это операция (statement)
MyClass& operator =(MyClass& other){ ... }
это оператор (operator), вызывается при выполнении операции (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) присваивания)
Спорить не буду, но мне удобнее думать что оператор это мелкая (далее неделимая) частица языка программирования, нежели операция, что-то более крупное, общее, состоящее из операторов.
Возможно меня ввели в заблуждение, английские аналоги этих слов.
Здравствуйте, BodyaSurgut, Вы писали:
BS>В чём отличие понятий «операция» и «оператор»? BS>В чем отличие операция присваивания и оператор присваивания? Можно примеры.
Поскольку эти термины совершенно по-зверски перегружены и перепутаны, то лучше всего смириться — и использовать терминологию, принятую в спецификации и стандарте конкретного языка.
Так вот, в стандартах Си и С++ словом "оператор" обозначают элемент синтаксиса: значок "=" и функцию, именованную этим значком "operator=(.....)"
А словом "операция" — отвлечённое действие, выполняемое какими-то средствами языка — от примитивных операторов и каких-то конструкций до библиотечных функций.
То же относится и к стандарту языка Паскаль, хотя авторы русских учебников почему-то упорно переводили "statement" как "оператор", а "operator", соответственно, как "операция".
if-then-else — это compound statement, а не "составной оператор"
Но с паскалем такие шутки ещё прокатывают, а вот с С++ уже нет, потому что есть лексема operator.
К сожалению, я затруднюсь найти подходящую кальку для statement, поэтому ограничусь прямым заимствованием: стейтмент.
Иногда это можно перевести словом "инструкция", но в стандарте Си instruction задействовано для инструкций процессора.
Упражнение по скачиванию стандартов с www.open-std.org и по поиску в них слов "operation" и "operator" оставляю желающим (там слишком много мелких цитат, чтобы тащить их сюда).
Да, чтобы дважды не вставать.
Припомню товарищу Александреску слово "функтор", которым он стал обозначать не то, что в математике, хаскелле или окамле называется функтором, а функциональные объекты. Или это надо товарища Степанова хаять?
(Шаблоны гораздо больше подходят на роль функторов — а в окамле функторы и есть аналоги плюсовых шаблонов).
Здравствуйте, Кодт, Вы писали:
К>То же относится и к стандарту языка Паскаль, хотя авторы русских учебников почему-то упорно переводили "statement" как "оператор", а "operator", соответственно, как "операция".
Так исторически сложилось в СССР — и никто не путался... :) К>if-then-else — это compound statement, а не "составной оператор" :crash:
Дык нисто его составным оператором и не переводил — мне такого в советских книжках не встречалось. К>Но с паскалем такие шутки ещё прокатывают, а вот с С++ уже нет, потому что есть лексема operator.
К>К сожалению, я затруднюсь найти подходящую кальку для statement, поэтому ограничусь прямым заимствованием: стейтмент.
Можно говорить о предложении. Раз уж язык (хоть и язык программирования), то почему бы не "предложение" (языка). К>Иногда это можно перевести словом "инструкция", но в стандарте Си instruction задействовано для инструкций процессора.
Ну, если путаницы в контексте не возникнет, можно и "инструкцию
К>Припомню товарищу Александреску слово "функтор", которым он стал обозначать не то, что в математике, хаскелле или окамле называется функтором, а функциональные объекты. Или это надо товарища Степанова хаять? К>(Шаблоны гораздо больше подходят на роль функторов — а в окамле функторы и есть аналоги плюсовых шаблонов).
Я впервые прочитал у Джосаттиса и Вандевурда в Шаблонах...
Они там пишут, что вообще-то функтором надо называть любую сущность, которая ведет себя как функция.
Но конкретно в этой книжке давайте будем звать только класс с перегруженной operator().
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, 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().