매크로와 인라인 함수는 정말 다른 것입니다. 하지만 나는 그것에 대해 말하는 것이 아닙니다. 다음은 컴파일 타임에 인수 값을 알 수 없는 경우의 예입니다.
첫 번째 경우에는 코드가 현재 함수에 삽입되어야 하고(아마도), 두 번째 경우에는 스택을 통해 매개변수를 전달 하여 함수를 호출해야 합니다(아마도). 그러나 최적화를 위해 컴파일러는 실제로 두 번째 옵션을 대체하여 구현할 수 있습니다. 그렇 습니까? 모르겠어요. 그래서 내가 물었다.
고문을 받아야 하는 것은 Metaquote입니다. 하지만 제 의견은 귀하와 동일합니다(최적화로 인해 결과가 다를 수 있음).
1. Извини, - бред. Я понимаю, тут паранойя в моде, и является ломовым аргументом за "почему так не надо делать". Никакой опасности не вижу в упор. Смотрел внимательно, если чё. Любое имя, в конечном счёте есть ссылка. Индексация есть обычное расширение понятия имени. Не более. Давай запретим присваивание вообще. В целях безопасности. Ссылки же крайне опасны так?
2. Духу объектно-ориентированного программирования, при такой логике, яростно противоречат С++, С#, Делфи, пара дюжин менее популярных языков, в которых индексаторы совершенно нормально работают и справа и слева. Причём здравому смыслу и моему духу это почему-то не противоречит.
Индексаторы делаются для связи с внешней средой. Их функция именно интерфейсная. Я могу инкапсулировать и прятать что угодно, но индексы мне нужны для оперирования объектами как массивами. Фактически все массивы как-то устроены. Например обычные динамические массивы mql. Может запретим их слева от оператора присваивания ставить? Заменим функцией какой-нибудь типа SetArrayValue(array, i, j, value); Заодно и в читабельности выиграем. Да и отладка станет куда проще. Мля. Уф..
3. А как насчёт того, чтоб сделать нормальный индексатор? Горничная это конечно классно, но королева всё-таки лучше.
4. Вот в этом месте у меня крыша конкретно начала ехать. Это что, нечитабельно??
Вот это читабельнее, да?
t.setDataElement(i, i*i);
Круто. Пожалуй пойду лечиться.
5. Ваще круто.
6. Я плакаль.
e(배열, i, j, 값); 동시에 우리는 가독성에서 승리할 것입니다. 예, 디버깅이 훨씬 쉬울 것입니다. ㅋㅋㅋ 휴..
세터의 장점은 단순한 방정식 이상을 수행할 수 있다는 것입니다.
예를 들어, 로그에 정보를 기록하고, 데이터를 변환하고(문자열 또는 더 복잡한 데이터에 대해 이야기하는 경우), 중요한 이벤트(예: 데이터 업데이트)가 발생한 경우 다른 개체에 메시지를 보낼 수 있습니다.
객체가 날짜가 변경되었음을 어떻게 알 수 있습니까? 분명히 당신은 거기에 따옴표를 저장할 것입니다 .. 네, 이것은 잘못된 문제입니다. 왜냐하면 여러분의 객체는 구조체 구조에 가깝고 실제로는 아무 것도 제어하지 않기 때문입니다. 모든 것은 모든 작업을 수행하는 다른 클래스 쓰레기통에서 수행되며, 심지어 (더 나쁜 것은) 모든 것이 onStart(), onTick(), ...에서 발생합니다. :)
예를 들어, 로그에 정보를 기록하고, 데이터를 변환하고(문자열 또는 더 복잡한 데이터에 대해 이야기하는 경우), 중요한 이벤트(예: 데이터 업데이트)가 발생한 경우 다른 개체에 메시지를 보낼 수 있습니다.
날짜가 변경되었음을 개체가 어떻게 알 수 있습니까? 분명히 당신은 거기에 따옴표를 저장할 것입니다 .. 네, 이것은 잘못된 문제입니다. 왜냐하면 여러분의 객체는 구조체 구조에 가깝고 실제로는 아무 것도 제어하지 않기 때문입니다. 모든 것은 모든 작업을 수행하는 다른 클래스 쓰레기통에서 수행되며, 심지어 (더 나쁜 것은) 모든 것이 onStart(), onTick(), ...에서 발생합니다. :)
좋은 하루 되세요
트릭은 인덱서가 기능면에서 설정자 와 다르지 않다는 것입니다. 훨씬 더 편리한 구문입니다. 함수와 같은 방식으로 구현되며 그 내용은 무엇이든 될 수 있으며(가장 간단한 일반적인 경우는 배열의 경계를 확인하고 다른 오류를 해결하는 것입니다) 배열 요소 에 대한 참조를 반환하는 것으로 이어지지 않습니다. 조금도.
님도 좋은 하루 되세요.
(어제의 말투에 대해 죄송합니다. 나는 조금 성급했습니다 - 직장에서의 문제. 당신은 그것과 아무 관련이 없습니다. 글쎄, 아마도 당신은 범주를 너무 멀리 갔을 것입니다 :)
매크로와 인라인 함수는 정말 다른 것입니다. 하지만 나는 그것에 대해 말하는 것이 아닙니다. 다음은 컴파일 타임에 인수 값을 알 수 없는 경우의 예입니다.
첫 번째 경우에는 코드가 현재 함수에 삽입되어야 하고(아마도), 두 번째 경우에는 스택을 통해 매개변수를 전달 하여 함수를 호출해야 합니다(아마도). 그러나 최적화를 위해 컴파일러는 실제로 두 번째 옵션을 대체하여 구현할 수 있습니다. 그렇 습니까? 모르겠어요. 그래서 내가 물었다.
기준점 을 클릭하는 경우에만 타원 개체가 마우스로 선택됩니다.
이것은 버그입니까, 아니면 기능입니까? 매우 불편한 구현.
Это что, юмор такой чёрный?
1. Извини, - бред. Я понимаю, тут паранойя в моде, и является ломовым аргументом за "почему так не надо делать". Никакой опасности не вижу в упор. Смотрел внимательно, если чё. Любое имя, в конечном счёте есть ссылка. Индексация есть обычное расширение понятия имени. Не более. Давай запретим присваивание вообще. В целях безопасности. Ссылки же крайне опасны так?
2. Духу объектно-ориентированного программирования, при такой логике, яростно противоречат С++, С#, Делфи, пара дюжин менее популярных языков, в которых индексаторы совершенно нормально работают и справа и слева. Причём здравому смыслу и моему духу это почему-то не противоречит.
Индексаторы делаются для связи с внешней средой. Их функция именно интерфейсная. Я могу инкапсулировать и прятать что угодно, но индексы мне нужны для оперирования объектами как массивами. Фактически все массивы как-то устроены. Например обычные динамические массивы mql. Может запретим их слева от оператора присваивания ставить? Заменим функцией какой-нибудь типа SetArrayValue(array, i, j, value); Заодно и в читабельности выиграем. Да и отладка станет куда проще. Мля. Уф..
3. А как насчёт того, чтоб сделать нормальный индексатор? Горничная это конечно классно, но королева всё-таки лучше.
4. Вот в этом месте у меня крыша конкретно начала ехать. Это что, нечитабельно??
Вот это читабельнее, да?
t.setDataElement(i, i*i);
Круто. Пожалуй пойду лечиться.
5. Ваще круто.
6. Я плакаль.
e(배열, i, j, 값); 동시에 우리는 가독성에서 승리할 것입니다. 예, 디버깅이 훨씬 쉬울 것입니다. ㅋㅋㅋ 휴..
세터의 장점은 단순한 방정식 이상을 수행할 수 있다는 것입니다.
예를 들어, 로그에 정보를 기록하고, 데이터를 변환하고(문자열 또는 더 복잡한 데이터에 대해 이야기하는 경우), 중요한 이벤트(예: 데이터 업데이트)가 발생한 경우 다른 개체에 메시지를 보낼 수 있습니다.
객체가 날짜가 변경되었음을 어떻게 알 수 있습니까? 분명히 당신은 거기에 따옴표를 저장할 것입니다 ..
네, 이것은 잘못된 문제입니다. 왜냐하면 여러분의 객체는 구조체 구조에 가깝고 실제로는 아무 것도 제어하지 않기 때문입니다.
모든 것은 모든 작업을 수행하는 다른 클래스 쓰레기통에서 수행되며, 심지어 (더 나쁜 것은) 모든 것이 onStart(), onTick(), ...에서 발생합니다. :)
좋은 하루 되세요
3. 일반 인덱서를 만드는 것은 어떻습니까? 하녀는 확실히 멋지지만 여왕은 여전히 더 좋습니다.
개스킷을 무티. 사실, 일반 lvalue에 비해 실행 시간 면에서 훨씬 더 비쌉니다. 그러나 그것은 당신이 원하는 대로 보일 것입니다.
______
오, 씨발 두 개. 그런 다음 캐스트 연산자의 오버로드가 필요합니다. 피찰카.
세터의 장점은 단순한 방정식 이상을 수행할 수 있다는 것입니다.
예를 들어, 로그에 정보를 기록하고, 데이터를 변환하고(문자열 또는 더 복잡한 데이터에 대해 이야기하는 경우), 중요한 이벤트(예: 데이터 업데이트)가 발생한 경우 다른 개체에 메시지를 보낼 수 있습니다.
날짜가 변경되었음을 개체가 어떻게 알 수 있습니까? 분명히 당신은 거기에 따옴표를 저장할 것입니다 ..
네, 이것은 잘못된 문제입니다. 왜냐하면 여러분의 객체는 구조체 구조에 가깝고 실제로는 아무 것도 제어하지 않기 때문입니다.
모든 것은 모든 작업을 수행하는 다른 클래스 쓰레기통에서 수행되며, 심지어 (더 나쁜 것은) 모든 것이 onStart(), onTick(), ...에서 발생합니다. :)
좋은 하루 되세요
트릭은 인덱서가 기능면에서 설정자 와 다르지 않다는 것입니다. 훨씬 더 편리한 구문입니다. 함수와 같은 방식으로 구현되며 그 내용은 무엇이든 될 수 있으며(가장 간단한 일반적인 경우는 배열의 경계를 확인하고 다른 오류를 해결하는 것입니다) 배열 요소 에 대한 참조를 반환하는 것으로 이어지지 않습니다. 조금도.
님도 좋은 하루 되세요.
(어제의 말투에 대해 죄송합니다. 나는 조금 성급했습니다 - 직장에서의 문제. 당신은 그것과 아무 관련이 없습니다. 글쎄, 아마도 당신은 범주를 너무 멀리 갔을 것입니다 :)
무티 개스킷. 사실, 일반 lvalue에 비해 실행 시간 면에서 훨씬 더 비쌉니다. 그러나 그것은 당신이 원하는 대로 보일 것입니다.
______
오, 젠장 둘. 그런 다음 캐스트 연산자의 오버로드가 필요합니다. 피찰카.
사실, 나는 그들이 그것을 할 것이라고 생각합니다. 언어로 된 참조가 반환되면 명백한 결함이 있습니다.
참조 변수를 만들 필요는 없지만 함수에서 l-value를 반환하는 것은 신성합니다. :)
나는 이것이 근본적으로 해결할 수 없다고 생각하지 않습니다. 언어에 일반적인 mql 배열이 있으며 할당 연산자의 양쪽에서 기분이 좋습니다. 그러나 그들은 구현에 의한 C++ 클래스입니다!
다음은 동일한 시리즈의 또 다른 예입니다. 이 코드는 컴파일되지만 작동하지 않습니다.
나는 그것이 컴파일되어서는 안된다는 것을 말하는 것이 아닙니다. 일해야지..:)
...
나는 그것이 컴파일되어서는 안된다는 것을 말하는 것이 아닙니다. 일해야지..:)
MQL5에는 기타 상수 그룹에 속하는 멋진 상수 IS_DEBUG_MODE 가 있습니다. 테스터에 대해 유사한 상수를 추가할 수 있습니까? IS_TESTER_MODE 같은...
MQL5에는 기타 상수 그룹에 속하는 멋진 상수 IS_DEBUG_MODE 가 있습니다. 테스터에 대해 유사한 상수를 추가할 수 있습니까? IS_TESTER_MODE와 같은 것...
그러나 이러한 상수가 작동하지 않습니까?
ENUM_MQL5_INFO_INTEGER
식별자
설명
속성 유형
MQL5_PROGRAM_TYPE
mql5 프로그램 유형
ENUM_PROGRAM_TYPE
MQL5_DLLS_ALLOWED
주어진 실행 프로그램 에 대해 DLL을 사용할 수 있는 권한
부울
MQL5_TRADE_ALLOWED
이 실행 중인 프로그램 에 대한 거래 권한
부울
MQL5_디버깅
디버그 모드에서 실행 중인 프로그램의 서명
부울
MQL5_테스트
테스터에서 실행 중인 프로그램의 서명
부울
MQL5_최적화
최적화 과정에서 실행 중인 프로그램의 서명
부울
MQL5_VISUAL_MODE
시각적 테스트 모드에서 실행 중인 프로그램의 서명
부울