Welche Tipps haben Sie zum Golfen in Applescript? Ich bin auf der Suche nach Ideen, die sich auf Code-Golf-Probleme im Allgemeinen anwenden lassen, die zumindest etwas spezifisch für Applescript sind (z. B. "Kommentare entfernen" ist keine Antwort).
Welche Tipps haben Sie zum Golfen in Applescript? Ich bin auf der Suche nach Ideen, die sich auf Code-Golf-Probleme im Allgemeinen anwenden lassen, die zumindest etwas spezifisch für Applescript sind (z. B. "Kommentare entfernen" ist keine Antwort).
Antworten:
Der of
Operator wird verwendet, um eine Eigenschaft von einem Objekt abzurufen:
log words of "Hello World"
In vielen Fällen können Sie jedoch 's
eine Verknüpfung zum Speichern eines Zeichens verwenden:
log "Hello World"'s words
Der Applescript Editor ist eine praktische kleine IDE, die Ihren Code syntaktisch hervorhebt und verschönert. Für das Golfen ist es jedoch kontraproduktiv, da es Einrückungen und überflüssige Schlüsselwörter hinzufügt, z end
. B. nach Aussagen. Beispielsweise:
repeat with w in "Hello World"'s words
log w
end
wird wie folgt, wenn es in den Applescript-Editor eingefügt und kompiliert / ausgeführt wird:
repeat with w in "Hello World"'s words
log w
end repeat
Offensichtlich ist das erste Snippet für die Zwecke des Golfspiels besser.
end
ziemlich Applescript-spezifisch ist.
end
, welche Block-Start-Anweisung zu welcher gehört, wenn Sie mehrere verschachtelte Blöcke haben
tell
Blöcke sind in Applescript üblich:
tell application "TextEdit"
activate
end tell
Um jedoch Platz zu sparen, ist Folgendes äquivalent, wenn das Innere des tell
Blocks nur eine Zeile ist:
tell application "TextEdit" to activate
tell app "TextEdit" to activate
.
Einige Wörter haben kürzere Synonyme. Beispielsweise application
kann als app
* und string
als geschrieben werden text
.
Auch every <noun>
kann geschrieben werden als einfach Plural, wie in characters of "hello world"
(oder "foo"'s characters
).
* Obwohl der Compiler des Skript-Editors es wieder ändern wird.
Für jede Operation, die ein Angebot erfordert, um etwas zu tun, dh
log "Hallo Welt!"
Sie können zu verkürzen
log "Hallo Welt!"
In Wiederholungsschleifen kann man das Wort "times" vollständig entfernen.
x-mal wiederholen Ende
gegen
wiederhole x Ende
Jedes Mal, wenn diese Operatoren aufgerufen werden, können Sie sie durch ≤
und ersetzen ≥
. Während dies nicht Byteanzahl reduzieren kann (es sei denn , besondere Bytezählung Konventionen umgesetzt werden, was ich vorschlagen), es tut Zeichenzahl reduzieren.
Sie können aus STDIN mit den folgenden Zeichen greifen:
on run argv Ende
Wenn Sie einen Code schnell verlassen müssen (aus welchem Grund auch immer, dh um übermäßige if
s zu verhindern) ...
Verlassen
In Applescript können einige zusätzliche Schlüsselwörter eingefügt werden, um die Lesbarkeit zu verbessern:
log the words of "Hello World"
Das the
hier ist jedoch völlig überflüssig und kann für eine Speicherung von 4 Zeichen weggelassen werden:
log words of "Hello World"
log"Hello World"'s words
weil Sie 1) keinen Abstand zwischen einem Ausdruck und einem zitierten Element benötigen und 2) 's
anstelle von verwenden können of
.
's
wird in dieser Antwort angesprochen codegolf.stackexchange.com/a/37643/11259 . Gut zu wissen log"
.
Ähnlich wie in dem Beitrag über Zitate wurde mir später klar, dass Sie auch Dinge wie diese verkürzen können:
Wenn "a" = Zeichen 1 von (x als Zeichenfolge), dann geben Sie {true, true} zurück.
zu
Wenn "a" = Zeichen 1 von (x als Zeichenfolge), dann geben Sie {true, true} zurück.
Es wird auch für Sie Klammern platzieren. In diesem Beispiel spare ich 5 Bytes.
Bei Fragen, die Groß- und Kleinschreibung erfordern, kann es schwierig sein, Fälle tatsächlich zu behandeln.
in Betracht ziehen (etwas mit Groß- und Kleinschreibung zu tun) Ende zu überlegen
Ich kannte dieses Schlüsselwort nicht wirklich, bis ich es wirklich brauchte. Mit den anderen Tipps auf dieser Seite können wir dies auf Folgendes reduzieren:
in Betracht ziehen (etwas mit Groß- und Kleinschreibung zu tun) Ende
Soweit ich weiß, ist eine vollständige Erklärung erforderlich. (Ich habe viele Dinge ausprobiert.) Weitere Informationen finden Sie auf dieser Seite .
In einigen Ausnahmefällen können die "doppelten spitzen Klammern" oder "doppelten Winkel" kürzer sein als der englische Name eines Befehls, eines Parameters oder einer Konstante.
Die Chevron-codierte Form würde das AppleScript verkleinern, um die Zwischenablage von 20 auf 16 Zeichen zu löschen :
set the clipboard to -- 20
«event JonspClp» -- 16
Beim Abrufen von Text aus einem Dialogfeld werden 2 Zeichen entfernt (wie im Metronom und in Pi Day ):
(display dialog""default answer"")'s text returned -- 46
(display dialog""default answer"")'s«class ttxt» -- 44
(Möglicherweise möchten Sie den Dialog lieber vermeiden und die Befehlszeilenargumente von osascript (1) verwenden , wenn Sie mindestens Mac OS X 10.4 verwenden.)
Bei einer US-Tastatur ist «Option- \ und» Option-Umschalt- \. Ein Befehl «event abcdefgh»
hat 16 Zeichen. Ein Parameter oder eine Konstante «class abcd»
hat 12 Zeichen.
Die Chevron-codierte Form ist fast immer zu lang für Golf. Hier ist ein Beispiel ohne doppelte spitze Klammern:
set x to open for access"output"write permission 1
write"One line of text
"to x
close access x
Und das gleiche mit ihnen:
set x to«event rdwropen»"output"given«class perm»:1
«event rdwrwrit»"One line of text
"given«class refn»:x
«event rdwrclos»x
Das Ändern von _open for access
(16) zu «event rdwropen»
(16) war neutral. Das Ändern von write permission_
(17) zu given«class perm»:
(18) kostet 1 Zeichen. Die anderen Doppelwinkel kosten mehr.
Um doppelte spitze Klammern zu verwenden, müssen Sie den magischen 4-Buchstaben- oder 8-Buchstaben-Code kennen. Ich habe einige Codes gefunden, indem ich eine Skriptdatei aus dem Skript-Editor gespeichert und dann in einem Hex-Editor geöffnet habe. Ich bin emacs
in ein Terminal gelaufen und habe benutzt M-x hexl-find-file
. Ich habe einige Codes gefunden und bearbeitet, wie JonspClp
in JanspClp
und ttxt
in atxt
. Ich habe die Datei dann gespeichert und im Skript-Editor erneut geöffnet. «event JanspClp»
und «class atxt»
erschien im Skript.
In einem Dokument mit dem Titel " AppleScript Terminology" und "Apple Event Codes Reference" werden einige Codes aufgelistet. Ich habe eine Kopie davon unter https://applescriptlibrary.wordpress.com/ gefunden.
Der Skript-Editor übersetzt doppelte spitze Klammern ins Englische, bevor Sie Ihr Skript speichern. Für die Chevron-Ehrerbietung müssen Sie Ihr Skript in einem anderen Texteditor wie TextEdit schreiben. Speichern Sie das Skript als reine Textdatei in der Mac OS Roman- (oder MacRoman-) Codierung. Mac OS X bevorzugt, dass Sie die Datei mit einem .applescript-Suffix benennen.
Wenn Sie Bytes zählen, hat MacRoman 1 Byte pro Zeichen, also zählt jedes «oder» als 1 Byte.