Haxe 에서의 골프에 대한 일반적인 팁은 무엇입니까 ? 코드 골프 문제에 적용 할 수 있고 최소한 Haxe에 특정한 아이디어를 찾고 있습니다 (예 : “댓글 제거”는 답이 아닙니다).
답변 당 하나의 팁을 게시하십시오.
Haxe는 여기 에서 온라인으로 실행할 수 있습니다 !
답변
문자열 보간
Haxe는 작은 따옴표 문자열에서 문자열 보간 을 지원 합니다 . JavaScript ES6의 템플릿 문자열과 같이 다음을 사용하여 문자열에 표현식을 포함 할 수 있습니다 ${...}
.
trace('2 + 2 = ${2 + 2}');
그러나 ES6과 달리 표현식이 단일 변수 인 경우 중괄호를 생략 할 수 있습니다.
var x = 2 + 2;
trace('2 + 2 = $x');
이 두 예제는 모두 print 2 + 2 = 4
입니다.
답변
배열 이해
Haxe는 배열 이해를 지원합니다.
trace([for (i in 0...5) i]); // Prints 0,1,2,3,4
다른 많은 언어 들과는 달리, 당신은 또한 while
이해에 사용할 수 있습니다 :
var i = 5;
trace([while (i > 0) i--]); // Prints 5,4,3,2,1
필요한 배열의 길이를 모르는 경우 매우 유용합니다.
당신은 또한 체인 for
, while
그리고 if
문 :
trace([for (x in ['A','B','C','D'])
for (y in ['x','y'])
if (x + y != "Cx")
x + y
]); // Prints Ax,Ay,Bx,By,Cy,Dx,Dy
답변
범위 연산자
Haxe에는 ...
정수 범위를 만드는 데 사용할 수 있는 범위 연산자 가 있습니다. 예를 들어, 대신
var i = 0;
while (i < 10) trace(i++);
당신은 이것을 할 수 있습니다 :
for (i in 0...10) trace(i++);
에 대한 세부 사항 x...y
:
x
그리고y
둘 다 Ints 여야합니다.x
보다 클 수 없습니다y
.- 이것은 모든 Iterable과 같은 장소에서 사용될 수 있는 IntIterator 객체를 반환합니다 .
답변
조건부로 명령문 실행
분명히 다음을 사용하여 조건부로 아무것도 실행할 수 있습니다 if
.
if(n>5)doSomething(n);
그러나 위와 같이 하나의 명령문 만있는 경우 삼항 조건부 연산자를 사용하여 바이트를 저장할 수 있습니다.
n>5?doSomething(n):0;
을 사용하여 다른 바이트를 저장하는 &&
경우도 있지만 &&
두 표현식 모두 부울을 반환하는 경우에만 작동 하기 때문에 매우 드 rare니다 .
n>5&&doSomething(n);
이 한 가지 중요한 예외는 키워드 : Haxe가로 실행되는 경우 return
, break
또는 continue
어디서든 즉시 실행하고 작업 한 어떤 표현 종료됩니다. 이것은 이것 대신에 :
if(n>5)return n;
이 작업을 수행하면 2 바이트를 절약 할 수 있습니다.
n>5&&return n;
답변
표현식에 키워드 사용
Haxe의 또 다른 특이한 특징은 모든 것이 표현 이라는 것입니다 . 예를 들어이 코드는 완벽하게 유효합니다.
function(n){while(n>0)n%4==1?return 6:n--;return 3;}
좋아, 그것은 쓸모없는 예이지만, 당신은 내 요점을 얻길 바랍니다. 대부분의 키워드에서 작동합니다.
function(n){while(n>0)n%4==1?break:n--;return n;}
이렇게하면 물론 짧아도 if
/ else
인라인 을 사용할 수 있습니다 .p=if(n>1)7else 4;
p=n>1?7:4;
인라인을 사용할 수없는 키워드
var
-컴파일러는 Void를 값으로 사용하려는 것에 대해 불평합니다.for
/while
-위와 동일하지만, 배열 이해에 사용할 수 있습니다 .
답변
기능 괄호 생략
대부분의 언어와 달리 Haxe의 모든 것은를 포함한 표현{blocks}
입니다. 따라서, Haxe 프로그램의 어느 곳에서든지 ( 괄호 제외) 중괄호 switch
는 단일 명령문 만 포함하면 생략 될 수 있습니다. 그래서 이것 대신에 :
function f(n){return Math.pow(3,n);}
당신은 이것을 할 수 있습니다 :
function f(n)return Math.pow(3,n);
많은 기능에 쉬운 2 바이트 저장.
함수에 여러 명령문이 포함되어 있어도 블록 외부 로 이동하여 바이트를 절약 할 수 있습니다 return
.
function f(a){var b=a*a;return a<0?-b:b;}
function f(a)return{var b=a*a;a<0?-b:b;}
이것은 블록이 블록 내부의 마지막 표현식으로 평가되기 때문에 작동합니다.