Спецификаторы доступа

 

Разработчик MQL5 приблизил функционал языка к аналогу С++.

Есть такой вопрос к нему по спецификаторам. Работают ли в MQL5 следующие утверждения?

1) В  С++ существуют внутренние связи, внешние связи и отсутствие связей.

2) Глобальные переменные имеют внешние связи и это позволяет получить доступ к ним из любой части программы.

3) Если к глобальным переменным добавить спецификатор static, то глобальные переменные утратят внешние связи и будут иметь только внутренние связи, т.е. будут доступны только внутри файла, в котором они были описаны.

4) Локальные переменные не имеют связей и поэтому доступны только внутри блока где они были описаны.


Лично у меня по 2-му 4-му пп вопросов нет. А вот по 3-му есть...

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
denkir:

Разработчик MQL5 приблизил функционал языка к аналогу С++.

Есть такой вопрос к нему по спецификаторам. Работают ли в MQL5 следующие утверждения?

1) В  С++ существуют внутренние связи, внешние связи и отсутствие связей.


Лично у меня по 2-му 4-му пп вопросов нет. А вот по 3-му есть...

У меня по 1-му п. вопрос - что это за хреновина такая? Может имеется в виду область видимости?
 
Dima_S:
У меня по 1-му п. вопрос - что это за хреновина такая? Может имеется в виду область видимости?

Да, практически... но, имхо, корректнее говорить про связь...

Лично сам не слышал такого термина, как внешняя  область видимости... или я не прав?

 

Чтобы не городить отсебятину, процитирую первоисточник:

Описанием определяется область видимости имени. Это значит, что имя может использоваться только в определенной части текста программы.

Если имя описано в функции (обычно его называют "локальным именем"), то область видимости имени простирается от точки описания до конца блока, в котором появилось это описание.

Если имя не находится в описании функции или класса (его обычно называют "глобальным именем"), то область видимости простирается от точки описания до конца файла,

в котором появилось это описание.

Описание имени в блоке может скрывать описание в объемлющем блоке или глобальное имя; т.е. имя может быть переопределено так, что оно будет обозначать другой объект внутри блока.

После выхода из блока прежнее значение имени (если оно было) восстанавливается.


 
Dima_S:
У меня по 1-му п. вопрос - что это за хреновина такая? Может имеется в виду область видимости?

поддерживаю вопрос и особенно что "мелким шрифтом"

Денис, у вас с именованием понятий явный перебор - помню вашу статью о UML - https://www.mql5.com/ru/articles/304 - там тоже были заморочки с использованием якобы "устоявшейся" терминологии.

понятно, что сейчас преобладает переводная литература и каждый переводчик один и тот же термин переводит по своему.

но ещё задолго до ООП, UML была устоявшаяся и понятная русскому слуху терминология.

но называть "область видимости" - "связями", пусть "внешними свзями", "внутренними связями" и ещё "отсутствием связи" - требует детального пояснения и обоснования.

если Вы вводите новый термин, так поясните что за хреновину вы имеете ввиду

Разработка эксперта средствами UML
Разработка эксперта средствами UML
  • 2011.11.18
  • Dennis Kirichenko
  • www.mql5.com
В статье рассматривается создание торгового советника с помощью графического языка UML, который используется для визуального моделирования объектно-ориентированных программных систем. Основным преимуществом такого подхода является визуализация работы проектировщика. Приведен пример проектирования структуры и свойств советника при помощи программы Software Ideas Modeler.
 
Возможно, это переводил бывший работник МИДа))

 
Dima_S:

Чтобы не городить отсебятину, процитирую первоисточник:

Dima_S, я спросил у разработчика относительно приведённых утверждений. Накопал их отсюда.

А с вашим первоисточником никак не поспоришь :-)

Согласен, что понятие "видимость" используется чаще. Особенно в среде MQL.

Использование volatile, extern, register, auto, mutable в C++ (обзор)
Использование volatile, extern, register, auto, mutable в C++ (обзор)
  • www.quizful.net
В языке C++ есть квалификаторы и спецификаторы, которые в связи с их не очень частым использованием могут вызвать замешательство у неискушённых и начинающих. В данном коротком очерке я собираюсь пролить свет на данную тему. Начнём с квалификатора volatile Если подходить формально то квалификатор volatile информирует компилятор что переменная...
 
abolk:

поддерживаю вопрос и особенно что "мелким шрифтом"

Денис, у вас с именованием понятий явный перебор - помню вашу статью о UML - https://www.mql5.com/ru/articles/304 - там тоже были заморочки с использованием якобы "устоявшейся" терминологии.

понятно, что сейчас преобладает переводная литература и каждый переводчик один и тот же термин переводит по своему.

но ещё задолго до ООП, UML была устоявшаяся и понятная русскому слуху терминология.

но называть "область видимости" - "связями", пусть "внешними свзями", "внутренними связями" и ещё "отсутствием связи" - требует детального пояснения и обоснования.

если Вы вводите новый термин, так поясните что за хреновину вы имеете ввиду

abolk, я ссылку привёл на терминологию. Эти термины ввёл не я. Просто в описании MQL5 мало инфы по спецификаторам, пытаюсь поэтому что-то выяснить...

А про UML. Всё таки это другой язык, терминология которого по естественным причинам отличается от сишной и mql'евской. Свои аргументы я изложил при ответе на конкретные вопросы. А ваше мнение про заморочки считаю субъективным восприятием проблематики. 

 
denkir:

Dima_S, я спросил у разработчика относительно приведённых утверждений. Накопал их отсюда.

Мрак. Читаем:

языках с\с++ существуют внутренние связи, внешние связи и отсутствие связей. Глобальные переменные имеют внешние связи и это позволяет получить доступ к ним из любой части программы. Если к глобальным переменным добавить спецификатор static, то глобальные переменные утратят внешние связи и будут иметь только внутренние связи, т.е. будут доступны только внутри файла, в котором они были описаны. Локальные переменные не имеют связей и поэтому доступны только внутри блока где они были описаны. 

Если переменная хранит описание некоего объекта, то применение термина "связь" понятна и обоснована. Через связь получается доступ к информации об объекте.

Но как получить доступ к информации об объекте, которая хранится в локальных переменных? Если судя по тексту статьи - локальные переменные не имеют связей?

 
denkir:

Dima_S, я спросил у разработчика относительно приведённых утверждений. Накопал их отсюда.

А с вашим первоисточником никак не поспоришь :-)

Согласен, что понятие "видимость" используется чаще. Особенно в среде MQL.

Это цитата из книги Б. Страуструпа (разработчика С++).

У него, кажется, и сайт есть - так что можете поспорить))

 
denkir:

я ссылку привёл на терминологию. Эти термины ввёл не я.

а кто сказал, что автор ввёл термины, которые появились с лёкой руки переводчика?

переводчик - это же не автор статьи.

вопрос к Вам: вы можете пояснить сами что спрашиваете?

вот вы написали, что корректней говорить не "область видимости", а "связь":

denkir:

Да, практически... но, имхо, корректнее говорить про связь...

Лично сам не слышал такого термина, как внешняя  область видимости... или я не прав?

 поясните почему так считаете

Причина обращения: