Re[19]: *
От: Mamut Швеция http://dmitriid.com
Дата: 28.10.04 15:30
Оценка: 2 (2) +3
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Mamut, Вы писали:


M>>Что такое еxported items?


СГ>Все что написано внутри модуля считается инкапсулированным в нем. Модуль является не только единицей компиляции и исполнения, но и единицей инкапсуляции (что правильно). Для того чтобы что-то из написанного можно было увидеть из других модулей это что-то надо как-то отметить, логично да?


Стоп. Предположим я — ученик 7-9 класса. Моя реакция: "Чего?" Переведите с китайского. Что за инкапсуляция. Что за единица компиляции. Что значит увидеть из других модулей?

СГ>Вопрос как это синтаксически отметить так чтобы и видно сразу было и писать не много? Вот для этих отметок придумали использовать "*" и "-". Для переменных "-" означает доступ только для чтения, "*" означает полный доступ.


Для языка, в котором текста и так явно слишком много, это утверждение странно. Почему не пойти по минимизации дальше и не заменить begin end на {}? Или почему не заменить *- на exportable и readonly? Хуже бы от этого не стало. Налицо плохой дизайн языка.

СГ>Подробности в Langauge Report, а тут пример:


Опять же предположим я — ученик 7-9 класса. Зачем мне читать Language Report?

СГ>
СГ>MODULE Test;

СГ>TYPE
СГ>  MyPrivateType = RECORD (* ... *) END; (* Другие модули этого типа не видят *)

СГ>  MyPublicType* = RECORD (* Другие модули этот тип видят *)
СГ>    PrivateVariable   : INTEGER; (* Из других модулей эта переменная не видна *)
СГ>    ReadOnlyVariable- : INTEGER; (* Другие модули могут только читать эту переменную *)
СГ>    ReadWriteVariable*: INTEGER; (* Другие модули могут и читать и писать в эту переменную *)
СГ>  END;
СГ>


Для сравнения (гипотетически):

TYPE
MyPrivateType = RECORD (* ... *) END; (* Другие модули этого типа не видят *)

  exportable MyPublicType = RECORD 
  PrivateVariable   : INTEGER; 
  readonly exportable ReadOnlyVariable,
  readonly            ReadOnlyLocalVariable: INTEGER; 
  exportable          ReadWriteVariable: INTEGER;
END;


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

Единственная причина, по которой существуют извращения типа readonly exportable и exportable — это отказ от классов и полей private и public, которые являются намного интуитивнее, чем эти извращения.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.