Conseils pour jouer au golf dans Applescript

13

Quels conseils avez-vous pour jouer au golf dans Applescript? Je cherche des idées qui peuvent être appliquées aux problèmes de golf de code en général qui sont au moins quelque peu spécifiques à Applescript (par exemple, "supprimer les commentaires" n'est pas une réponse).

Beta Decay
la source
Cette question est trop large. Il ne peut pas être répondu par une seule réponse complète et bien écrite (et la question l'interdit même explicitement).
Rainbolt
1
Pourtant, c'est juste une question amusante :)
MadTux
5
Signalé pour la conversion en CW (selon notre convention pour les «conseils pour jouer au golf en x»).
Geobits
@MadTux Oui, Applescript n'est généralement pas le premier choix dans les langues de golf ;-). Mais il y a des occasions , en particulier dans la catégorie des sources restreintes , où cela devient marginalement utile.
Digital Trauma
4
@Rainbolt En quoi est-ce différent dans la nature des autres conseils pour jouer au golf en x questions?
Digital Trauma

Réponses:

6

L' ofopérateur est utilisé pour obtenir une propriété d'un objet:

log words of "Hello World"

Mais dans de nombreux cas, vous pouvez utiliser 'sun raccourci pour enregistrer 1 caractère:

log "Hello World"'s words
Traumatisme numérique
la source
6
Il semble quelque peu ridicule, mais aussi quelque peu impressionnant, qu'Applescript considère les apostrophes comme possessifs. Je peux juste imaginer l'un des concepteurs de langage présenter cette idée au groupe.
Geobits
9
@Geobits Ce sont d'excellents adjectifs pour décrire Applescript en général. Je n'ai tout simplement pas décidé si Applescript est ridiculement génial ou vraiment ridicule ;-)
Digital Trauma
4

L'éditeur Applescript est un petit IDE pratique qui met en évidence la syntaxe et embellit votre code. Cependant, aux fins du golf, il est contre-productif car il ajoute une indentation et des mots-clés superflus, par exemple après des enddéclarations. Par exemple:

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

devient ce qui suit une fois collé dans l'éditeur Applescript et compilé / exécuté:

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

Évidemment, le premier extrait est meilleur pour le golf.

Traumatisme numérique
la source
OMI, cela peut être considéré comme un conseil général, non spécifique à l'AS. De nombreux IDE modernes le font si vous les laissez.
Geobits du
2
@Geobits d'accord. Bien que je pense que l'ajout de mots clés spécifiques après endest assez spécifique à Applescript.
Digital Trauma
Oui, c'est juste déroutant pour moi. La chose d'indentation / espacement est très courante, cependant, avec des supports inutiles, etc.
Geobits
@Geobits Applescript est une question de lisibilité. Je suppose que l'idée est de faire clairement savoir qui endappartient à quelle instruction de début de bloc lorsque vous avez plusieurs blocs imbriqués
Digital Trauma
4

tell les blocs sont courants dans Applescript:

tell application "TextEdit"
    activate
end tell

Cependant, pour économiser de l'espace, ce qui suit est équivalent, lorsque l'intérieur du tellbloc est composé d'une seule ligne:

tell application "TextEdit" to activate
Traumatisme numérique
la source
3
Ce qui est lui-même tell app "TextEdit" to activate.
wchargin
@WChargin Oui. Ajoutez-le comme autre réponse si vous le souhaitez.
Digital Trauma,
4

Certains mots ont des synonymes plus courts. Par exemple, applicationpeut être écrit comme app* et stringpeut être écrit commetext .

Aussi, every <noun>peut être écrit simplement au pluriel, comme dans characters of "hello world"(ou "foo"'s characters).

* Bien que le compilateur de Script Editor le remodifie.

Peter Hosey
la source
3

Devis requis Opération

Pour toute opération nécessitant un devis pour faire quelque chose, c'est à dire

log "Bonjour tout le monde!"

Vous pouvez raccourcir à

log "Bonjour tout le monde!"

Répétition

Dans les boucles répétitives, on peut entièrement supprimer le mot "fois".

répéter x fois
fin

contre

répéter x
fin

<= et> =

Chaque fois que ces opérateurs sont appelés, vous pouvez les remplacer respectivement par et . Bien que cela puisse ne pas réduire le nombre octet (sauf si les conventions de comptage d'octets spéciaux sont mis en œuvre, que je suggère), il fait réduire le nombre de caractères.

Saisir de STDIN

Vous pouvez saisir à partir de STDIN avec les caractères suivants:

on run argv
fin

Sortir rapidement

Si vous avez besoin de quitter un code rapidement (pour une raison quelconque, c'est-à-dire en évitant des ifs excessifs )

quitter
Addison Crump
la source
Haha wow, vous devez avoir fait du chalutage pour trouver cela;)
Beta Decay
Je l'utilise beaucoup .
Addison Crump
La question ou les conseils?
Beta Decay
Les conseils. Et AppleScript en général.
Addison Crump
Oh, je parlais de la question :)
Beta Decay
2

Applescript permet d'insérer des mots clés supplémentaires pour améliorer la lisibilité:

log the words of "Hello World"

Mais le theici est complètement superflu et peut être omis pour une sauvegarde de 4 caractères:

log words of "Hello World"
Traumatisme numérique
la source
2
Vous pouvez avoir des variantes encore plus courtes:, log"Hello World"'s wordsparce que vous 1) n'avez pas besoin d'espace entre une expression et un élément cité, et 2) parce que vous 'spouvez l'utiliser en remplacement de of.
Addison Crump
@VTCAKAVSMoACE oui, 'sest adressé dans cette réponse codegolf.stackexchange.com/a/37643/11259 . Bon à savoir log"cependant.
Digital Trauma
2

Raccourcissement du support

Semblable à l'article sur les citations, j'ai réalisé plus tard que vous pouvez également raccourcir des choses comme ceci:

si "a" = caractère 1 de (x comme chaîne) alors retourne {vrai, vrai}

à

si "a" = caractère 1 de (x comme chaîne) alors retourne {vrai, vrai}

Il espacera également les supports pour vous. Dans cet exemple, j'économise 5 octets.

Addison Crump
la source
2

Considérant...

Dans les questions qui nécessitent une sensibilité à la casse, il peut être difficile de traiter les cas.

JUSQU'À MAINTENANT:

considérant le cas
    (quelque chose à voir avec les choses sensibles à la casse)
fin de considérer

Je ne connaissais pas vraiment ce mot-clé jusqu'à ce que j'en ai vraiment besoin. En utilisant les autres conseils de cette page de conseils, nous pouvons réduire cela à:

considérant le cas
(quelque chose à voir avec les choses sensibles à la casse)
fin

Pour autant que je sache, cela nécessite une déclaration complète. (J'ai essayé beaucoup de choses.) Voir cette page pour plus de détails.

Addison Crump
la source
1

Dans quelques cas exceptionnels, les «doubles angles» ou «doubles chevrons» peuvent être plus courts que le nom anglais d'une commande, d'un paramètre ou d'une constante.

La forme encodée en chevrons réduirait l'AppleScript pour supprimer le presse-papiers de 20 à 16 caractères:

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

Il laisserait tomber 2 caractères lors de la récupération de texte dans une boîte de dialogue (comme cela se produit dans le métronome et Pi Day ):

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

(Vous préférerez peut-être éviter la boîte de dialogue et utiliser les arguments de ligne de commande d' osascript (1) , si vous avez au moins Mac OS X 10.4.)

Avec un clavier américain, «est option- \ et» est option-shift- \. Une commande «event abcdefgh»comporte 16 caractères. Un paramètre ou une constante «class abcd»a 12 caractères.

La forme codée en chevrons est presque toujours trop longue pour le golf. Voici un exemple sans parenthèses à double angle:

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

Et la même chose avec eux:

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

Changer _open for access(16) en «event rdwropen»(16) était neutre. Changer write permission_(17) en given«class perm»:(18) coûte 1 caractère. Les autres supports à double angle coûtent plus cher.

Pour utiliser des parenthèses à double angle, vous devez connaître le code magique à 4 ou 8 lettres. J'ai trouvé quelques codes en enregistrant un fichier de script depuis Script Editor, puis en l'ouvrant dans un éditeur hexadécimal. J'ai couru emacsdans un terminal et utilisé M-x hexl-find-file. J'ai trouvé et édité certains codes, comme JonspClpinto JanspClpet ttxtinto atxt. J'ai ensuite enregistré le fichier et l'ai rouvert dans Script Editor. «event JanspClp»et «class atxt»est apparu dans le script.

Un document intitulé Terminologie AppleScript et référence des codes d'événements Apple répertorie certains codes. J'en ai trouvé une copie sur https://applescriptlibrary.wordpress.com/

L'éditeur de script traduira les crochets doubles en anglais avant d'enregistrer votre script. Pour la déférence chevron, vous devez écrire votre script dans un autre éditeur de texte, comme TextEdit. Enregistrez le script en tant que fichier texte brut dans l'encodage Mac OS Roman (ou MacRoman). Mac OS X préfère que vous nommiez le fichier avec un suffixe .applescript.

Si vous comptez des octets, MacRoman a 1 octet par caractère, donc chaque «ou» compte pour 1 octet.

kernigh
la source