Consejos para jugar golf en Applescript

13

¿Qué consejos tienes para jugar al golf en Applescript? Estoy buscando ideas que se puedan aplicar a los problemas de golf de código en general que sean al menos algo específicos de Applescript (por ejemplo, "eliminar comentarios" no es una respuesta).

Decaimiento Beta
fuente
Esta pregunta es demasiado amplia. No se puede responder con una respuesta completa y bien escrita (y la pregunta incluso lo prohíbe explícitamente).
Rainbolt
1
Aún así, es solo una pregunta divertida :)
MadTux
55
Marcado para la conversión a CW (según nuestra convención para preguntas de 'consejos para jugar golf en x').
Geobits
@MadTux Sí, Applescript no suele ser la primera opción en los idiomas de golf ;-). Pero hay ocasiones , particularmente en la categoría de fuente restringida donde se vuelve marginalmente útil.
Trauma digital
44
@Rainbolt ¿Cómo es esto diferente en naturaleza a otros consejos para jugar golf en x preguntas?
Trauma digital

Respuestas:

6

El ofoperador se utiliza para obtener una propiedad de un objeto:

log words of "Hello World"

Pero en muchos casos, puede usar 'scomo acceso directo para guardar 1 carácter:

log "Hello World"'s words
Trauma digital
fuente
66
Parece algo ridículo, pero también algo asombroso, que Applescript analice los apóstrofes como posesivos. Me imagino que uno de los diseñadores de idiomas le lanzó esa idea al grupo.
Geobits
99
@Geobits Esos son excelentes adjetivos para describir Applescript en general. Simplemente no he decidido si Applescript es ridículamente increíble o increíblemente ridículo ;-)
Digital Trauma
4

Applescript Editor es un pequeño IDE útil que resalta la sintaxis y embellece su código. Sin embargo, a los fines del golf, es contraproducente ya que agrega sangría y palabras clave superfluas, por ejemplo, después de las enddeclaraciones. Por ejemplo:

repeat with w in "Hello World"'s words
log w
end

se convierte en lo siguiente cuando se pega en el Editor de Applescript y se compila / ejecuta:

repeat with w in "Hello World"'s words
    log w
end repeat

Obviamente, el primer fragmento es mejor para el golf.

Trauma digital
fuente
En mi opinión, esto puede verse como un consejo general, no específico para AS. Muchos IDEs modernos hacen esto si los dejas.
Geobits
2
@Geobits De acuerdo. Aunque creo que la adición de palabras clave específicas después endes bastante específica de Applescript.
Trauma digital
Sí, eso es desconcertante para mí. Sin embargo, la cosa de sangría / espaciado es muy común, junto con corchetes innecesarios, etc.
Geobits
@Geobits Applescript tiene que ver con la legibilidad. Supongo que la idea es dejar en claro cuál endpertenece a qué instrucción de inicio de bloque cuando tiene múltiples bloques anidados
Digital Trauma
4

tell Los bloques son comunes en Applescript:

tell application "TextEdit"
    activate
end tell

Sin embargo, para ahorrar espacio, lo siguiente es equivalente, cuando el interior del tellbloque es solo una línea:

tell application "TextEdit" to activate
Trauma digital
fuente
3
Que en sí es tell app "TextEdit" to activate.
wchargin
@WChargin Sí. Agréguelo como otra respuesta si lo desea.
Trauma digital
4

Algunas palabras tienen sinónimos más cortos. Por ejemplo, applicationse puede escribir como app* y stringse puede escribir como text.

Además, every <noun>se puede escribir simplemente como el plural, como en characters of "hello world"(o "foo"'s characters).

* Aunque el compilador de Script Editor lo cambiará de nuevo.

Peter Hosey
fuente
3

Operación de cotización requerida

Para cualquier operación que requiera una cotización para hacer algo, es decir

log "Hola Mundo!"

Puedes acortar a

log "Hola Mundo!"

Repitiendo

En los bucles de repetición, se puede eliminar por completo la palabra "veces".

repetir x veces
final

versus

repetir x
final

<= y> =

Cada vez que se llama a estos operadores, puede reemplazarlos con y , respectivamente. Si bien esto puede no reducir el conteo de bytes (a menos que se implementen convenciones especiales de conteo de bytes, lo que sugiero), reduce el conteo de caracteres.

Agarrando de STDIN

Puede tomar STDIN con los siguientes caracteres:

en ejecución argv
final

Saliendo rápidamente

Si necesita salir de un código rápidamente (por cualquier razón, es decir, evitando ifs excesivos ) ...

dejar
Addison Crump
fuente
Jaja wow, debes haber hecho un poco de búsqueda para encontrar esto;)
Beta Decay
Yo lo uso mucho .
Addison Crump
La pregunta o los consejos?
Beta Decay
Los consejos. Y AppleScript en general.
Addison Crump
Oh, estaba hablando de la pregunta :)
Beta Decay
2

Applescript permite insertar algunas palabras clave adicionales para facilitar la lectura:

log the words of "Hello World"

Pero el theaquí es completamente superfluo y puede omitirse para guardar 4 caracteres:

log words of "Hello World"
Trauma digital
fuente
2
Puede tener variantes aún más cortas: log"Hello World"'s wordsporque 1) no necesita el espacio entre ninguna expresión y elemento citado, y 2) porque 'sse puede usar en reemplazo de of.
Addison Crump
@VTCAKAVSMoACE sí, 'sse trata en esta respuesta codegolf.stackexchange.com/a/37643/11259 . log"Aunque es bueno saberlo .
Trauma digital
2

Acortamiento de soporte

Similar a la publicación sobre citas, me di cuenta más tarde que también puedes acortar cosas como esta:

si "a" = carácter 1 de (x como cadena), entonces devuelve {verdadero, verdadero}

a

si "a" = carácter 1 de (x como cadena), entonces devuelve {verdadero, verdadero}

También espaciará los corchetes para ti. En este ejemplo, guardo 5 bytes.

Addison Crump
fuente
2

Considerando...

En las preguntas que requieren mayúsculas y minúsculas, puede ser difícil lidiar con los casos.

HASTA AHORA:

considerando el caso
    (algo que ver con mayúsculas y minúsculas)
terminar considerando

En realidad, no conocía esta palabra clave hasta que realmente la necesitaba. Usando los otros consejos en esta página de consejos, podemos reducir esto a:

considerando el caso
(algo que ver con mayúsculas y minúsculas)
final

Requiere una declaración completa, que yo sepa. (He intentado muchas cosas). Consulte esta página para obtener más detalles.

Addison Crump
fuente
1

En algunos casos excepcionales, los «corchetes de doble ángulo» o los «dobles galones» pueden ser más cortos que el nombre en inglés de un comando, parámetro o constante.

La forma codificada en chevron reduciría el AppleScript para eliminar el portapapeles de 20 a 16 caracteres:

set the clipboard to  -- 20
«event JonspClp»      -- 16

Caería 2 caracteres al recuperar texto de un cuadro de diálogo (como sucede en el metrónomo y Pi Day ):

(display dialog""default answer"")'s text returned  -- 46
(display dialog""default answer"")'s«class ttxt»    -- 44

(Es posible que prefiera evitar el diálogo y usar los argumentos de la línea de comandos de osascript (1) , si tiene al menos Mac OS X 10.4).

Con un teclado estadounidense, «es opción- \ y» es opción-cambio- \. Un comando «event abcdefgh»tiene 16 caracteres. Un parámetro o constante «class abcd»tiene 12 caracteres.

La forma codificada en chevron es casi siempre demasiado larga para el golf. Aquí hay un ejemplo sin corchetes de doble ángulo:

set x to open for access"output"write permission 1
write"One line of text
"to x
close access x

Y lo mismo con ellos:

set x to«event rdwropen»"output"given«class perm»:1
«event rdwrwrit»"One line of text
"given«class refn»:x
«event rdwrclos»x

Cambiar _open for access(16) a «event rdwropen»(16) fue neutral. Cambiar write permission_(17) a given«class perm»:(18) cuesta 1 personaje. Los otros soportes de doble ángulo cuestan más.

Para usar corchetes de doble ángulo, debe conocer el código mágico de 4 u 8 letras. Encontré algunos códigos guardando un archivo de script desde Script Editor, luego abriéndolo en un editor hexadecimal. Corrí emacsen una terminal y usé M-x hexl-find-file. Encontré y edité algunos códigos, como JonspClpinto JanspClpy ttxtinto atxt. Luego guardé el archivo y lo volví a abrir en Script Editor.«event JanspClp»y «class atxt»apareció en el guión.

Un documento titulado AppleScript Terminology y Apple Event Codes Reference enumera algunos códigos. Encontré una copia en https://applescriptlibrary.wordpress.com/

Script Editor traducirá corchetes de doble ángulo al inglés antes de guardar su script. Para la deferencia de chevron, debe escribir su script en otro editor de texto, como TextEdit. Guarde la secuencia de comandos como un archivo de texto sin formato en la codificación romana de Mac OS (o MacRoman). Mac OS X prefiere que nombre el archivo con un sufijo .applescript.

Si cuenta bytes, MacRoman tiene 1 byte por carácter, por lo que cada «o» cuenta como 1 byte.

kernigh
fuente