Dicas para jogar golfe no Applescript

13

Que dicas você tem para jogar golfe no Applescript? Estou procurando idéias que possam ser aplicadas para codificar problemas de golfe em geral que sejam pelo menos um pouco específicos ao Applescript (por exemplo, "remover comentários" não é uma resposta).

Beta Decay
fonte
Esta pergunta é muito ampla. Não pode ser respondida com uma resposta completa e bem escrita (e a pergunta proíbe explicitamente isso).
Rainbolt
1
Ainda assim, é apenas uma questão engraçado :)
MadTux
5
Sinalizado para conversão em CW (de acordo com nossa convenção para perguntas sobre "dicas para jogar golfe em x").
Geobits
@ MadTux Sim, o Applescript não costuma ser a primeira escolha em idiomas de golfe ;-). Mas há ocasiões , particularmente na categoria de fonte restrita, em que ela se torna marginalmente útil.
Digital Trauma
4
@Rainbolt Como isso é de natureza diferente de outras dicas para jogar golfe em x perguntas?
Digital Trauma

Respostas:

6

O ofoperador é usado para obter uma propriedade de um objeto:

log words of "Hello World"

Mas, em muitos casos, você pode usar 'scomo atalho para salvar 1 caractere:

log "Hello World"'s words
Trauma Digital
fonte
6
Parece um tanto ridículo, mas também impressionante, que Applescript analise apóstrofos como possessivos. Eu posso imaginar um dos designers de linguagem lançando essa idéia para o grupo.
Geobits
9
@ Geobits Esses são ótimos adjetivos para descrever o Applescript em geral. Eu só não decidi se Applescript é ridiculamente incrível ou impressionante ridículo ;-)
Digital Trauma
4

O Applescript Editor é um pequeno IDE útil que destaca a sintaxe e embeleza o seu código. No entanto, para fins de golfe, é contraproducente, pois adiciona indentação e palavras-chave supérfluas, por exemplo, enddeclarações após . Por exemplo:

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

torna-se o seguinte quando colado no Editor de Applescript e compilado / executado:

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

Obviamente, o primeiro trecho é melhor para fins de golfe.

Trauma Digital
fonte
Na IMO, isso pode ser visto como uma dica geral, não específica para o AS. Muitos IDEs modernos fazem isso se você permitir.
Geobits
2
@Geobits Agreed. Embora eu ache que a adição de palavras-chave específicas depois endseja bastante específica da Applescript.
Digital Trauma
Sim, isso é apenas desconcertante para mim. O recuo / coisa espaçamento é muito comum, no entanto, juntamente com suportes desnecessários, etc.
Geobits
@Geobits Applescript tem tudo a ver com legibilidade. Eu acho que a idéia é deixar claro que endpertence a qual declaração bloco inicial quando você tem vários blocos aninhados
Trauma Digital
4

tell blocos são comuns no Applescript:

tell application "TextEdit"
    activate
end tell

No entanto, para economizar espaço, o seguinte é equivalente quando o interior do tellbloco é apenas uma linha:

tell application "TextEdit" to activate
Trauma Digital
fonte
3
O que em si é tell app "TextEdit" to activate.
wchargin
@WChargin Sim. Adicione-o como outra resposta, se quiser.
Digital Trauma
4

Algumas palavras têm sinônimos mais curtos. Por exemplo, applicationpode ser escrito como app* e stringpode ser escrito como text.

Além disso, every <noun>pode ser escrito como simplesmente o plural, como em characters of "hello world"(ou "foo"'s characters).

* Embora o compilador do Script Editor o altere novamente.

Peter Hosey
fonte
3

Operação necessária de cotação

Para qualquer operação que exija uma cotação para fazer algo, ou seja,

log "Olá, mundo!"

Você pode reduzir para

log "Olá, mundo!"

recorrente

Nos loops de repetição, pode-se remover completamente a palavra "tempos".

repita x vezes
fim

versus

repita x
fim

<= e> =

Sempre que esses operadores forem chamados, você poderá substituí-los por e , respectivamente. Enquanto isto pode não reduzir a contagem de byte (a menos que as convenções de contagem byte especial são implementadas, o que eu sugiro), que faz reduzir a contagem de caracteres.

Agarrando a partir de STDIN

Você pode acessar STDIN com os seguintes caracteres:

em execução argv
fim

Saindo rapidamente

Se você precisar sair rapidamente de um código (por qualquer motivo, ou seja, evitando excesso de ifs) ...

Sair
Addison Crump
fonte
Haha uau, você deve ter feito alguns arrastões para encontrar isso;)
Decay Beta
Eu uso muito isso .
Addison Crump
A pergunta ou as dicas?
Beta Decay
As dicas. E AppleScript em geral.
Addison Crump
Ah, eu estava falando sobre a pergunta :) #
094 Decay Beta
2

O Applescript permite que algumas palavras-chave extras sejam inseridas para facilitar a legibilidade:

log the words of "Hello World"

Mas o theaqui é completamente supérfluo e pode ser omitido para salvar 4 caracteres:

log words of "Hello World"
Trauma Digital
fonte
2
Você pode ter variantes ainda mais curtas: log"Hello World"'s wordsporque você 1) não precisa do espaço entre nenhuma expressão e item entre aspas e 2) porque 'spode ser usado em substituição de of.
Addison Crump
@VTCAKAVSMoACE sim, 'sé abordado nesta resposta codegolf.stackexchange.com/a/37643/11259 . É bom saber sobre isso log".
Digital Trauma
2

Encurtamento do suporte

Semelhante ao post sobre citações, percebi depois que você também pode encurtar coisas assim:

se "a" = caractere 1 de (x como string), retorne {true, true}

para

se "a" = caractere 1 de (x como string), retorne {true, true}

Também vai colocar colchetes para você. Neste exemplo, eu salvo 5 bytes.

Addison Crump
fonte
2

Considerando...

Em perguntas que exigem distinção entre maiúsculas e minúsculas, pode ser difícil lidar com os casos.

ATÉ AGORA:

considerando caso
    (algo a ver com coisas que diferenciam maiúsculas de minúsculas)
final considerando

Na verdade, eu não conhecia essa palavra-chave até precisar dela. Usando as outras dicas nesta página de dicas, podemos reduzir isso para:

considerando caso
(algo a ver com coisas que diferenciam maiúsculas de minúsculas)
fim

Requer uma declaração completa, até onde eu saiba. (Eu tentei muitas coisas.) Veja esta página para mais detalhes.

Addison Crump
fonte
1

Em alguns casos excepcionais, os "colchetes de ângulo duplo" ou "divisas duplas" podem ser menores que o nome em inglês de um comando, parâmetro ou constante.

O formulário codificado em chevron reduziria o AppleScript para excluir a área de transferência de 20 a 16 caracteres:

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

Ele solta 2 caracteres ao buscar texto em uma caixa de diálogo (como acontece no metrônomo e no dia do Pi ):

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

(Você pode preferir evitar a caixa de diálogo e usar os argumentos da linha de comando do osascript (1) , se você tiver pelo menos o Mac OS X 10.4.)

Com um teclado americano, «é opção- \ e» é opção-shift- \. Um comando «event abcdefgh»tem 16 caracteres. Um parâmetro ou constante «class abcd»possui 12 caracteres.

A forma codificada em chevron é quase sempre muito longa para o golfe. Aqui está um exemplo sem colchetes de ângulo duplo:

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

E o mesmo com eles:

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

Mudar _open for access(16) para «event rdwropen»(16) foi neutro. Alterar write permission_(17) para given«class perm»:(18) custa 1 caractere. Os outros suportes de ângulo duplo custam mais.

Para usar colchetes de ângulo duplo, você precisa conhecer o código mágico de 4 ou 8 letras. Encontrei alguns códigos salvando um arquivo de script no Editor de scripts e abrindo-o em um editor hexadecimal. Eu corri emacsem um terminal e usei M-x hexl-find-file. Eu encontrei e editei alguns códigos, como JonspClpem JanspClpe ttxtem atxt. Salvei o arquivo e o reabri no Editor de scripts. «event JanspClp»e «class atxt»apareceu no script.

Um documento intitulado AppleScript Terminology e Apple Event Codes Reference lista alguns códigos. Encontrei uma cópia em https://applescriptlibrary.wordpress.com/

O Editor de scripts traduzirá colchetes de ângulo duplo para o inglês antes de salvar seu script. Para deferência da chevron, você deve escrever seu script em outro editor de texto, como o TextEdit. Salve o script como um arquivo de texto sem formatação na codificação Mac OS Roman (ou MacRoman). O Mac OS X prefere que você nomeie o arquivo com um sufixo .applescript.

Se você contar bytes, o MacRoman terá 1 byte por caractere, portanto cada «ou» contará como 1 byte.

Kernigh
fonte