기고글 토론 "더 잘하는 프로그래머(파트 01): 성공적인 MQL5 프로그래머가 되기 위해서는 다음의 5가지를 하지 말아야 합니다." - 페이지 2

 

좋은 기사입니다. 해야 할 일과 하지 말아야 할 일에 대한 개념이 잘 설명되어 있습니다.

이 경우 특정 예제의 오류는 사람들이 작업 스타일을 최적화하는 데 도움이되므로 기사의 가치를 떨어 뜨리지 않습니다. 이 작업은 훌륭하게 해결되었으며 모든 것이 가능한 한 간단하고 명확하게 작성되었습니다.

감사합니다, 오메가!

 
fxsaber #:

  • 루프에 있는 변수의 첫 번째 값이 잘못되었습니다.
  • 하나의 if 대신 두 개의 if가 있습니다.
  • 문자열 비교(문자)가 끝에 와야 합니다.
  • 부울 표현식은 대괄호로 묶이지 않습니다.
  • 입력 함수에서 매직 변수가 누락되었습니다.
  • 위치 개체가 생성되지 않았습니다.
메타 편집기에서 코딩하지 않고 작성하는 동안만 코딩했기 때문에 게시될 때까지 처음에 오류를 보지 못했지만, 사용된 모든 코딩 예제에는
 

흥미로운...

fxsaber #:

  • 루프의 첫 번째 변수 값이 올바르지 않습니다.
  • 하나의 if 대신 두 개의 if가 있습니다.
  • 문자열 비교(기호)가 끝에 와야 합니다.
  • 부울 표현식은 대괄호로 표시되지 않습니다.
  • 입력 함수에 매직 변수가 누락되었습니다.
  • 위치 개체가 생성되지 않습니다.

좋은 프로그래머 되기(1부): 더 나은 MQL5 프로그래머가 되기 위한 5가지 습관 없애기

 
Aliaksandr Hryshyn #:

흥미롭다....


:)
 
Aliaksandr Hryshyn #:

흥미로운...

좋은 프로그래머 되기(1부): 더 나은 MQL5 프로그래머가 되기 위한 5가지 습관 없애기

이것은 프리랜서이고 고객은 대부분 코드를 전혀 이해하지 못하며 나쁜 리뷰는 코드의 품질에 대한 것이 아닙니다. 나는 그것을 썼고 프로그램은 이익을주지 않았으므로 여기에 리뷰가 있습니다.

 

모든 사람이 꼭 읽어야 할 필독서(그리고 이 글의 저자는 더욱 그렇습니다): 모든 프로그래머가 알아야 할 97가지 사항

GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
  • github.com
Pearls of wisdom for programmers collected from leading practitioners. - GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitio...
 
출처:
int CountPosByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal(); i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
            { 
                counter++; 
            }
   return counter;
  }

제 생각에는 더 빠르고 명확하게 작동하는 변형입니다:

int PositionsByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal()-1; i>=0; i--)
   {
      if(!m_position.SelectByIndex(i))
         return (INVALID_HANDLE);

      if(m_position.PositionType()!=type ||
         m_position.Magic()!=MagicNumber ||
         m_position.Symbol()!=Symbol())
         continue;

      counter++; 
   }
   return counter;
  }

1. 루프 초기화의 오류는 역추적을 할 때 수량에서 1을 빼야 한다는 것입니다.

2. 라이브러리 함수에서 인덱스로 위치를 가져올 수없는 경우 오류로 루프를 종료 한 다음 함수를 다시 처리하거나 반복해야하는 경우 그렇지 않으면 신뢰할 수없는 금액을 얻을 위험이 있으며 여전히 재정으로 작업하고 때로는 위치에 많은 양이 있으며 이러한 작은 일이 손실로 이어질 수 있습니다.

3. 먼저 부울 변수를 확인한 다음 열거 형 열거 형을 확인한 다음 int, double, 문자열을 확인한 다음 확인에 실패하면 즉시 루프의 다음 요소로 이동해야합니다.

&&를 통해 비교 연산을 수행하면 프로그램은 반드시 각 조건을 확인합니다.

4. 함수의 이름도 중요하며 더 나은 것처럼 보입니다 PositionsByType, 사소한 것처럼 보이지만이 함수를 사용하려면 라이브러리와 목차로 이동할 필요가 없지만 표준 이름 Positions를 입력하기 시작하면 PositionsTotal, PositionsByType.....을 호출 할 수있는 몇 가지 옵션이 있습니다.

5. 가로 스크롤을 사용하면 가독성과 개발 속도가 크게 떨어지므로 코드의 너비를 존중하여 가로 스크롤을 사용하지 않도록 해야 합니다.


 
그건 잘못된 생각입니다:
"&&로 비교 연산을 수행하면 프로그램은 반드시 각 조건을 확인합니다.".
비교는 첫 번째 거짓까지 순서대로 수행됩니다.
그런데 이러한 상황에서는 조건이 충족되지 않을 확률도 고려할 수 있습니다.

 
Aliaksandr Hryshyn #:
그건 잘못된 생각입니다:
"&&를 통해 비교 연산을 수행하면 프로그램은 반드시 각 조건을 확인합니다.".
비교는 첫 번째 거짓까지 순서대로 이루어집니다.
그런데 이러한 상황에서는 조건이 충족되지 않을 확률도 고려할 수 있습니다.

예, 올바르게 수정 하셨으며 첫 번째 거짓까지 확인이 수행되며 가장 중요한 것은 작은 데이터 유형이 먼저 있어야한다는 것입니다.

조건이 함수로 구성된 경우 소비 된 리소스의 관점에서 가장 작은 것이 첫 번째이고 가장 큰 것이 가장 큰 것이어야하지만 프로그램 논리를 깨지 않고 ...

저는 모든 프로젝트에서 이 기법을 사용하며, 최적화 모드에서 테스터의 속도 향상은 눈에 띄게 나타납니다.

[삭제]  
Vitaly Muzichenko #:

이것은 프리랜서이며 고객은 대부분 코드를 전혀 이해하지 못하며 나쁜 리뷰는 코드의 품질에 대한 것이 아닙니다. 당신이 작성했지만 프로그램이 당신에게 이익을주지 않았다는 것이 리뷰입니다.

고객에게 이에 대해 미리 알려주나요, 아니면 돈이 더 중요하나요?