커뮤니티

문의 드립니다

프로필 이미지
zmfha
2026-03-11 00:09:24
89
글번호 231031
답변완료

제목


예스랭귀지 if-else 문법, begin/end 사용 기준 및 Text_New 관리 방식 문의


본문


안녕하세요.


예스랭귀지로 지표를 작성하면서 문법 관련해 헷갈리는 부분이 있어 문의드립니다.

아래 세 가지에 대해 정확한 기준을 알고 싶습니다.


1. if-then-else 문법 처리 기준


예스랭귀지에서 else가 어떤 if에 연결되는지 기준이 궁금합니다.


예를 들어 아래와 같은 코드에서


if 조건1 then

if 조건2 then

값1;

else

값2;


이 경우 else가


조건1에 연결되는지


조건2에 연결되는지


어떤 기준으로 해석되는지 궁금합니다.


또한 실제 수식 작성 시 아래 형태 중 문법 오류가 가장 적고 권장되는 방식이 무엇인지 알고 싶습니다.


if 조건 then begin

값1;

end else begin

값2;

end;


또는


if 조건 then 값1

else 값2;


또는


else를 사용하지 않고 조건을 분리해서 각각 if로 작성하는 방식이 더 안정적인지 궁금합니다.


특히 예스랭귀지에서

문법 에러, 잘못된 토큰: Else

오류가 발생하는 대표적인 패턴이 있다면 함께 알려주시면 감사하겠습니다.


2. begin / end 생략 가능 범위


예스랭귀지에서 제어문 작성 시 begin ~ end를 생략할 수 있는 정확한 기준이 궁금합니다.


예를 들어


if 조건 then

값1;


처럼 한 줄만 실행되는 경우에는 begin/end 생략이 가능한 것으로 알고 있습니다.


하지만 아래와 같은 중첩 구조에서는 어떤 경우에 문제가 발생하는지 궁금합니다.


if 조건1 then

if 조건2 then

값1;

else

값2;


또는


if 조건 then

begin

값1;

end

else

begin

값2;

end;


실무적으로 예스랭귀지에서는 안정성을 위해

begin ~ end를 어느 정도까지 반드시 사용하는 것이 권장되는지도 궁금합니다.


3. Text_New 생성 및 관리 방식


차트에 표시를 만들기 위해 Text_New를 사용하고 있습니다.


예를 들어 별표, 숫자, 사각형 같은 이벤트 표시를 만들 때


tx = Text_New(...);


형태로 조건이 만족할 때마다 생성하고 있습니다.


이와 관련해 궁금한 점은 다음과 같습니다.


같은 봉에서 서로 다른 조건이 동시에 만족하면

Text_New가 모두 생성되는 것이 맞는지


같은 위치에서 반복 생성될 경우

기존 텍스트가 덮어써지는지

아니면 서로 다른 오브젝트로 계속 누적되는지


이벤트성 표시(별표, 사각형 등)는

보통 Text_Delete까지 함께 관리하는 것이 일반적인지

아니면 단순 생성만 해도 문제 없는지


수평선처럼 여러 개 누적되는 구조에서는

Text_New도 최근 N개만 유지하도록 직접 삭제 관리하는 방식이 권장되는지


가능하다면 간단한 예제 코드도 함께 설명해주시면 큰 도움이 될 것 같습니다.


감사합니다.

지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-03-11 13:24:33

안녕하세요 예스스탁입니다. 1 if 조건1 then if 조건2 then 값1; else 값2; 위와 같이 작성되면 조건2와 연결됩니다. 예스랭귀지는 탭이나 들여쓰기로 구분하지 않습니다. 별도로 begin end로 지정하지 않으면 가까운 if문에 대한 부정입니다. 조건1에 대한 부정을 하시려면 아래와 같이 begin end로 지정해 else가 연결되는 문장을 구분해 주셔야 합니다. if C > O then Begin if C > ma(C,20) then var1 = 1; End else var1 = -1; 2 if 조건 then { 실행1 실행2 } if문에 실행문이 2개이상일 때는 반드시 begin end로 지정하셔야 합니다. begin end 대신에 { }를 사용하셔도 됩니다. 실행문이 하나이면 생략이 가능합니다. 3 각각의 Text_New는 모두 별개입니다. 하나의 봉에서 각각 만족하면 각자 텍스트를 표시하므로 표시위치가 같다면 해당 자리에 다른 오브젝트로 중첩되서 표시됩니다. 4 "Text_New도 최근 N개만 유지하도록 직접 삭제 관리하는 방식되는지" 위 내용은 별도로 권장하는 방식이 없습니다. 차트 전체에 표시를 남기고자 하시면 delete를 사용하지 않고 최근 N개만 표시하고자 하시면 delete를 사용해 이전것을 삭제하게 작성하시면 됩니다. 사용자분 의도에 따라 작성해서 사용하시면 됩니다. 아래식이 최근 n개의 텍스트만 출력하는 내용입니다. Text_Delete가 이전것을 지우는 내용이 없으므로 전체 표시가 됩니다. input : n(5); var : ii(0); Array : tx[50](0); if CrossUp(ma(C,5),ma(c,20)) Then { For ii = 49 DownTo 1 { tx[ii] = tx[ii-1]; } tx[0] = Text_New(sDate,sTime,L,"골드:"+NumToStr(C,2)); Text_Delete(tx[n]); } 즐거운 하루되세요