¿Qué consejos generales tienes para jugar al golf en Haxe ? Estoy buscando ideas que se puedan aplicar a problemas de código de golf y que también sean al menos algo específicas para Haxe (por ejemplo, "eliminar comentarios" no es una respuesta).
Por favor, publique un consejo por respuesta.
¡Haxe se puede ejecutar en línea aquí !
Respuestas:
Interpolación de cuerdas
Haxe admite la interpolación de cadenas en cadenas de comillas simples. Al igual que las cadenas de plantilla en JavaScript ES6, puede incluir una expresión en una cadena con
${...}
:Sin embargo, a diferencia de ES6, puede omitir las llaves cuando la expresión es una sola variable:
Ambos ejemplos se imprimen
2 + 2 = 4
.fuente
Matriz de comprensiones
Haxe admite comprensiones de matriz:
A diferencia de muchos otros idiomas, también puede usar
while
en comprensiones:Esto puede ser muy útil cuando no sabe cuánto tiempo necesita una matriz.
También puede hacer la cadena
for
,while
yif
declaraciones:fuente
Operador de rango
Haxe tiene un operador de rango
...
que puede usarse para crear rangos de enteros. Por ejemplo, en lugar de esto:Puedes hacerlo:
Detalles para
x...y
:x
yy
ambos deben ser Ints.x
no puede ser mayor quey
.fuente
Ejecutar una declaración condicionalmente
Obviamente puedes ejecutar cualquier cosa condicionalmente con
if
:Sin embargo, si solo tiene una instrucción como la anterior, puede usar el operador condicional ternario para guardar un byte:
A veces puede guardar otro byte utilizando
&&
, aunque esto es muy raro porque&&
solo funciona si ambas expresiones devuelven booleanos:Una excepción importante a esto son las palabras clave : si Haxe se encuentra con un
return
,break
o encontinue
cualquier lugar , lo ejecutará inmediatamente y cerrará cualquier expresión en la que estuviera trabajando. Esto significa que en lugar de esto:Puede hacer esto para guardar 2 bytes:
fuente
Use palabras clave en expresiones
Otra característica inusual de Haxe es que todo es una expresión . Por ejemplo, este código es perfectamente válido:
Bien, ese es un ejemplo bastante inútil, pero espero que entiendas mi punto. Esto funciona con la mayoría de las palabras clave:
Esto le permite usar
if
/ enelse
línea, comop=if(n>1)7else 4;
, aunque por supuestop=n>1?7:4;
es más corto.Palabras clave que no puede usar en línea
var
- El compilador se quejará de intentar usar Void como valor.for
/while
- Igual que el anterior, aunque puede usarlos en comprensiones de matriz .fuente
Omitir soportes de función
A diferencia de la mayoría de los idiomas, todo en Haxe es una expresión , incluido
{blocks}
. Por lo tanto, los corchetes en cualquier parte de un programa Haxe (con la excepción de lasswitch
expresiones) se pueden omitir si contienen una sola declaración. Entonces, en lugar de esto:Puedes hacerlo:
Dos bytes fáciles guardados en muchas funciones.
Incluso si una función debe contener varias declaraciones, a menudo puede guardar un byte moviendo el
return
exterior del bloque:Esto funciona porque un bloque se evalúa como la última expresión dentro del bloque.
fuente
n*n*n
, o de manera equivalenten*n*n*n
para el testeo de un número, etc. Sin embargo, aquíMath.pow
sirve como un buen ejemplo.Math.pow(3,n)