Answers:
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
。显然,您可以使用if
:
if(n>5)doSomething(n);
但是,如果只有上述一条语句,则可以使用三元条件运算符保存一个字节:
n>5?doSomething(n):0;
有时您可以使用来保存另一个字节&&
,尽管这种情况很少见,因为&&
仅当两个表达式都返回布尔值时,它才有效:
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);
一个简单的两个字节保存在许多函数上。
即使一个函数必须包含多个语句,也可以通过将代码块移到外部来节省一个字节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;}
之所以有效,是因为一个块求值到该块内的最后一个表达式。
n*n*n
,或者等效地使用n*n*n*n
数字的tesseract,等等。但是,Math.pow
这里是一个很好的例子。
Math.pow(3,n)
改用;-)