tag:blogger.com,1999:blog-8224163229837394669.post586204333089661338..comments2023-06-06T17:33:26.280+02:00Comments on The lonely compiler: Перекрыть Енисей или перекрыть функцию (2)zouevhttp://www.blogger.com/profile/09163739178551976623noreply@blogger.comBlogger1125tag:blogger.com,1999:blog-8224163229837394669.post-86535677819541367192007-07-11T18:57:00.000+02:002007-07-11T18:57:00.000+02:00Да, давние проблемы с терминологией. Поскольку я у...Да, давние проблемы с терминологией. Поскольку я уже давно читаю лекции по C++, то о точном использовании терминов я думал многократно. <BR/><BR/>Сам использую "оператор" и "операция". Не буду описывать своих долгих колебаний. Говорю так еще и для простоты, потому что для многих других языков хочу if и for называть операторами, а + и * - операциями.<BR/><BR/>C++ и Страуструп ввели, конечно, сумятицу в термины. Еще большая сумятица возникла в переводах. А легкость принятия чего-то не нашего и отторжения нашего привела к тому, что многие стали использовать неестественные термины. А еще подлило масла в огонь, что оператор присваивания вовсе не оператор, а операция, причем, с побочным эффектом, которым и является вот это самое присваивание (!). А я учу студентов, что побочные эффекты функций - это плохо! Так что тут дело не только в терминологии, но и в существе дела! Ведь в довершение всего операция присваивания возвращает результат, как правило, в пустоту, а вот ежели после нее точку с запятой поставить, она становится оператором. ЗастрелИцца!<BR/><BR/>Правда, я всякий раз расшаркиваюсь перед студентами, вводя определения этих слов на первой лекции.<BR/><BR/>Перегрузка и переопределение - это тоже два похожих термина, которые постоянно путаются. Я использую именно "переопределение", а не "перекрытие". Перегрузка использует одно и то же имя функции, но разные типы параметров. При этом перегрузка, как правило, работает в одном пространстве имен. Не всегда, правда. Например, перегрузка в Delphi работает сквозь пространства имен модулей. Кроме того, есть языки (каюсь - не помню, какие), где перегрузка работает сквозь наследование (С++ точно не из их числа). Переопределение, напротив, подразумевает использование одного имени в разных пространствах имен. В частности, все виртуальные функции в подклассах переопределяют одноименные в базовом. Но переопределение может быть и с другими параметрами - в этом случае нет полиморфизма, но есть перекрытие - когда функцией из "верхнего" пространства имен уже нельзя пользоваться прямо. Как-то так объясняю и студентам. <BR/><BR/>Путаные понятия! Отражают непростые семантические нюансы.<BR/><BR/>Кстати, подброшу еще одно слово, которое используется также во множестве смыслов - ссылка. Эти смыслы - родственные, но, тем не менее, - разные. <BR/><BR/>Да - и, раз уж зашла речь о C++, - еще одно слово "статический". Смысла три, а то и четыре есть точно!<BR/><BR/>Споры о чистоте терминов, несомненно, порой, очень похожи на споры Остроконечников и Тупоконечников. Или на споры, какой язык программирования лучше. То есть совершенно бессмысленны. <BR/><BR/>Но все равно споришь :) И - решаешь для себя.<BR/><BR/>А то, что после 90 года мы ринулись на Запад и стали его слушать больше, чем здравый смысл - так это ж общеизвестно! Правильно, так его, выжить из себя совка! Только на Западе тоже все путано. Понаввели терминов понимаешь.<BR/><BR/>Михалкович Станиславmikshttps://www.blogger.com/profile/08436779508236455194noreply@blogger.com