'조건부 분기 - '고투' 클루게? - 페이지 3

 
FourX :

내가 지금까지 Raptor를 알아낼 수 있었던 한, 그것들은 GoSub / Return 명령이나 MQL4에서 그러한 기능을 만드는 능력과 같은 것이 아닙니다. 따라서 이 용량을 수행하기 위해 MQL4에서 klug를 알아내려고 합니다.

함수 는 GOSUB/RETURN과 동일합니다. . .

start()
  {
   Print ( "About to call a function called, a_function . . ." );
  a_function();                                               //  GOSUB
   Print ( "Just returned from a function called, a_function" );
   return ( 0 );
  } 
   
   
   
void a_function()
   {
   Print ( "a_function has been called . . . " );
   return ;                                           // RETURN
   }
   
   
   
 
RaptorUK :

함수는 GOSUB/RETURN과 동일합니다. . .

나는 수많은 표준 및 사용자 정의 기능 을 '호출'하고 하나의 (적절한) Raptor 지점에서 사용할 수 있다는 것을 알고 있지만 GoTo Line 185 또는 GoTo Line 185 또는 귀하가 설명한 것과 같은 특정 레이블/기능 등 . 그런 다음 실행하고 프로그램에서 호출된 지점으로 돌아갑니다. 또는 해당 서브루틴의 조건부 결과에 따라 SubRoutine 및/또는 프로그램 섹션/Function이라고 하는 것에서 계속할 수 있습니다. 당신이 말했듯이, 당신은 몇 년 동안 GoSub를 직접 사용했고 몇 줄의 연속적인 코드 라인을 조건부로 건너뛰는 것은 전혀 같은 것이 아닙니다. 동일한 기능을 전혀 수행하지 않는다는 것을 이미 알고 있는 이 구분에 대해 계속 논의하고 싶지 않습니다. 그래서 이번 포스팅. 우리는 예를 들어 프로그램의 이전 지점으로 점프하고 매번 반복적으로 코딩할 필요 없이 프로그램에 이미 설정된 동일한 필요한 기능을 다시 활용하는 진정한 'GoSub'를 활용하는 방법을 아직 파악하지 못했습니다. 필요한 시간입니다.

참고: MetaEditor는 텍스트를 복사하는 시간의 약 85%에서 충돌합니다. 이것은 MT4의 많은 다른 인스턴스와 수많은 다른 컴퓨터 및 3가지 다른 버전의 Windows에 있습니다. MQL4를 사용한 32비트 및 64비트 시스템을 모두 포함하지 않고. MT4는 괜찮지만 MQL4 편집기는 그렇지 않습니다. 따라서 복사 및 붙여넣기는 실제로 실행 가능한 옵션이 아닙니다. 그렇더라도 여전히 'GoSub' 또는 GoTo'와 동일한 용량을 제공하지 않습니다.

 

이것에 정말 의미가 있습니까? mql4가 mql4라는 사실은 사실입니다. 따라서 mql4로 코딩할 때 mql4를 생각해야 합니다. 한 언어로 코딩하려고 하면 다른 구성을 지원하는 다른 언어에서 어떻게 해결했을지 고려하는 동안 아무 의미가 없다고 생각해야 합니다. GoSub/Return 및 GoTo를 사용해야만 해결할 수 있다고 생각하는 mql4의 코딩 문제가 있는 경우 보고 싶습니다. 고양이 가죽을 벗기는 방법은 항상 한 가지 이상 있다는 것을 알게 될 것이기 때문입니다.

 

FourX :

그렇더라도 여전히 'GoSub' 또는 GoTo'와 동일한 용량을 제공하지 않습니다.

죄송합니다. MQL4 기능GOSUB 가 어떤 식으로든 다르다는 귀하의 관점을 이해하는 데 정말 어려움을 겪고 있습니다. (고토는 완전히 다른 생선 주전자입니다.)

이 Gosub에 충실합시다. MQL4 함수 서브루틴입니다. 값을 반환할 수도 있고 반환하지 않을 수도 있습니다. 모든 서브루틴 호출은 호출된 메인 코드의 다음 라인으로 돌아갑니다. 나는 이것에 대해 Raptor의 의견에 100% 동의합니다.

(나도 위의 SDC의 관점에 동의합니다).

 

스레드의 while 포인트는 다음과 같은 다른 환경에서 제공되는 것과 같이 프로그램 모듈/기능을 반복적으로 재사용하기 위해 프로그램 내에서 또는 다른 프로그램에서 외부로 조건부 분기를 수행할 수 있는지 확인하는 것입니다. 초기에 언급된 것들: fGoTo, fGoSub. 나는 이미 MQL4가 이것들을 직접적으로 제공하지 않는다는 것을 알고 있습니다. 이것이 이 스레드의 요점입니다. 이 기능을 수행하기 위해 '해결책(SubRoutine?)' 등을 만들 있습니까? 개념적으로 이것은 MQL4의 '포함' 파일과도 유사합니다.

GetLastError() 함수 값의 '경고' 또는 '인쇄'를 통해 MQL4 디버거의 제한된 용량을 보완하기 위해 우리 모두가 사용하는 해결 방법과 유사합니다.

이것은 if, while, loop, continue, return 등과 같은 숫자 조건부 부울을 포함하는 일반 MQL4 함수와 전혀 다릅니다. 프로그래밍 모듈/기능을 반복적으로 재사용할 수 있는 다른 환경에서 제공되는 예제와 같은 기능, 종종 프로그램의 (훨씬) 더 이른 부분에서. 한 번만 선언하십시오: 프로그램 내에서 필요한 기능이 이미 제공되어 있는 곳이라면 대부분 반복해서 사용하십시오. 일부 환경에서 fGoSub 는 사용자가 특정 기능을 수행하는 모듈인 별도의 작은 프로그램에서 이러한 다른 fSubRoutine 을 가져오고 활용할 수 있도록 합니다. MQL4의 '포함' 파일과 다소 유사할 수 있습니다.

지금 존재하지 않는다고 해서 '해결책'을 만들 수 있다면 이 강력한 프로그래밍 기능을 활용해서는 안 된다는 뜻입니까?

우리 모두 알다시피, 동일한 결과를 얻기 위해 무언가를 프로그래밍하는 방법에는 여러 가지가 있습니다. 이것은 '문제를 보여주시면 fGoTofGoSub 없이 해결하는 방법을 알려드리겠습니다.'의 경우가 아닙니다. 다음 중 하나입니다. 기능을 생성할 수 있다면 다양한 상황에서 다양한 방식으로 활용할 수 있는 추가적인 프로그래밍 유연성과 용량을 갖게 됩니다.

 

mql4의 사용자 정의 함수 가 무엇인지 이해하지 못하는 것 같습니다. . . mql4 사용자 정의 함수가 설명하는 것과 정확히 일치하지 않는 이유에 대한 예를 제공할 수 있습니까? 제 생각에는 그렇습니다. . . 다른 많은 EA, 지표 및 스크립트에서 재사용하는 많은 기능이 있습니다.

start() 를 프로그램으로 생각하십시오. . 시작 내 어디에서나 사용자 정의 함수를 호출할 수 있습니다. . . 함수가 완료되면 프로그램은 사용자 정의 함수가 호출된 행 다음 행으로 돌아갑니다. . . 마치 GOSUB처럼.

 

FourX :

스레드의 while 포인트는 다음과 같은 다른 환경에서 제공되는 것과 같이 프로그램 모듈/기능을 반복적으로 재사용하기 위해 프로그램 내에서 또는 다른 프로그램에서 외부로 조건부 분기를 수행할 수 있는지 확인하는 것입니다. 초기에 언급된 것들: fGoTo, fGoSub.

프로그래밍 모듈/기능을 반복적으로 재사용할 수 있는 다른 환경에서 제공한 예제와 같은 기능을 제공하려고 합니다.

Mql4는 구식 언어입니다. 레벨은 약 1990년입니다. 그러나 goto와 gosub는 1970년경부터 더 오래된 구성입니다. 프로그래밍 스타일을 mql4보다 구식으로 만드는 요점은 무엇입니까? dll-s를 통해 C#과 같은 실제 프로그래밍 언어를 사용하는 것이 훨씬 좋습니다. 1990년대와 2000년대의 대부분의 발명품(예: 클래스, 인터페이스, 객체, 이벤트 및 리스너와 같은 디자인 패턴, 테스트 주도 프로그래밍과 같은 프로그래밍 방법 등)은 코드 반복을 방지하고 재사용 가능하고 신뢰할 수 있으며 읽기 가능한 코드를 빠르게 작성할 수 있도록 도와줍니다. 나는 당신이 이 goto 프로젝트 를 모두 잊어야 한다고 생각합니다.
 
FourX :

나는 수많은 표준 및 사용자 정의 기능을 '호출'하고 하나의 (적절한) Raptor 지점에서 사용할 수 있다는 것을 알고 있지만 GoTo Line 185 또는 GoTo Line 185 또는 귀하가 설명한 것과 같은 특정 레이블/기능 등 . 그런 다음 실행하고 프로그램에서 호출된 지점으로 돌아갑니다.

함수 내부에서 반환하면 함수가 호출된 곳으로 반환됩니다. 이전 gosub/return을 100% 대체합니다. 또한 이 함수는 값을 전달하고 값을 반환할 수 있으며 자체 네임스페이스와 스택 프레임이 있기 때문에 전역 변수 엉망도 더 이상 필요하지 않습니다. 나는 당신의 문제를 정말로 이해하지 못합니다. 실제로 하고 싶은 것에 대한 구체적인 예(아마도 의사 코드 또는 기본)를 제공하세요. 그러면 동일한 예가 if/else, switch/를 사용하여 훨씬 더 명확하고 재사용 가능하며 유지 관리 가능한 방식으로 수행되는 방법을 보여줄 수 있습니다. 케이스 및 함수 호출.

정말 누락된 유일한 것은 예외입니다. 예외를 시뮬레이션하려고 합니까? GOTO로도 이 작업을 수행할 수 없으며 이 작업을 수행할 때 호출 스택에 대해 적절하게 신경을 써야 합니다.

동일한 함수 내에서 여러 개의 return 문을 가질 수 있으며 break를 사용하여 루프를 벗어날 수도 있습니다. 이것은 구조화된 언어에서 GOTO에 도달할 수 있는 가장 가까운 것이며 이러한 것들(다중 종료)은 이미 일부 엄격한 순수주의자도.

 
erzo :
dll-s를 통해 C#과 같은 실제 프로그래밍 언어를 사용하는 것이 훨씬 좋습니다.

이 플랫 저수준 C 호출 규칙 API와 상호 작용하는 DLL을 만드는 데 C#은 권장되지 않습니다. C#은 다른 C# 및 다양한 Microsoft 항목과 상호 작용하고 싶지만 다른 환경만큼 범용이 아닌 경우에 적합합니다. 매우 전문화되어 있습니다.

최신 프로그래밍 언어에서 C 호출 규칙과 쉽게 인터페이스하는 DLL을 만들고 싶다면 ObjectPascal(Free Pascal) 또는 Delphi를 제안합니다.

 
7bit :

이 플랫 저수준 C 호출 규칙 API와 상호 작용하는 DLL을 만드는 데 C#은 권장되지 않습니다.

제가 자바를 더 잘 알고 사용을 고려하고 있지만 다리를 만들기가 어렵습니다. 하지만 C#을 추천하지 않는다면 더 쉬울 것 같지만 Java를 사용해 보겠습니다. (파스칼은 제 스타일이 아닙니다.) 조언 감사합니다!