Tipps zum Golfen in Applescript

13

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).

Beta-Zerfall
quelle
Diese Frage ist zu weit gefasst. Es kann unmöglich mit einer vollständigen, gut geschriebenen Antwort beantwortet werden (und die Frage verbietet dies sogar ausdrücklich).
Rainbolt
1
Trotzdem ist es nur eine lustige Frage :)
MadTux
5
Zur Umstellung auf CW vorgemerkt (gemäß unserer Konvention für 'Tipps zum Golfen in x'-Fragen).
Geobits
@MadTux Ja, Applescript ist normalerweise nicht die erste Wahl in Golfsprachen ;-). Es gibt jedoch Gelegenheiten , insbesondere in der Kategorie der beschränkten Quellen, in denen dies nur geringfügig von Nutzen ist.
Digital Trauma
4
@Rainbolt Wie unterscheidet sich das von anderen Tipps zum Golfen in x Fragen?
Digitales Trauma

Antworten:

6

Der ofOperator wird verwendet, um eine Eigenschaft von einem Objekt abzurufen:

log words of "Hello World"

In vielen Fällen können Sie jedoch 'seine Verknüpfung zum Speichern eines Zeichens verwenden:

log "Hello World"'s words
Digitales Trauma
quelle
6
Es scheint etwas lächerlich, aber auch etwas fantastisch, dass Applescript Apostrophe als besitzergreifend parst. Ich kann mir vorstellen, dass einer der Sprachdesigner diese Idee der Gruppe vorstellt.
Geobits
9
@Geobits Das sind großartige Adjektive zur Beschreibung von Applescript im Allgemeinen. Ich habe nur nicht entschieden, ob Applescript lächerlich genial oder unglaublich lächerlich ist ;-)
Digital Trauma
4

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.

Digitales Trauma
quelle
IMO kann dies als allgemeiner Tipp gesehen werden, nicht spezifisch für AS. Viele moderne IDEs tun dies, wenn Sie es zulassen.
Geobits
2
@ Geobits Einverstanden. Obwohl ich denke, dass die Hinzufügung bestimmter Schlüsselwörter nach endziemlich Applescript-spezifisch ist.
Digitales Trauma
Ja, das ist nur verwirrend für mich. Der Einzug / Abstand ist jedoch sehr häufig, zusammen mit unnötigen Klammern usw.
Geobits
Bei @Geobits Applescript dreht sich alles um Lesbarkeit. Ich denke, die Idee ist es, klar zu machen end, welche Block-Start-Anweisung zu welcher gehört, wenn Sie mehrere verschachtelte Blöcke haben
Digitales Trauma
4

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 tellBlocks nur eine Zeile ist:

tell application "TextEdit" to activate
Digitales Trauma
quelle
3
Welches selbst ist tell app "TextEdit" to activate.
wchargin
@WChargin Ja. Fügen Sie es als eine andere Antwort hinzu, wenn Sie möchten.
Digitales Trauma
4

Einige Wörter haben kürzere Synonyme. Beispielsweise applicationkann als app* und stringals 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.

Peter Hosey
quelle
3

Angebot erforderlich Operation

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!"

Wiederholen

In Wiederholungsschleifen kann man das Wort "times" vollständig entfernen.

x-mal wiederholen
Ende

gegen

wiederhole x
Ende

<= und> =

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.

Grabbing von STDIN

Sie können aus STDIN mit den folgenden Zeichen greifen:

on run argv
Ende

Schnell beenden

Wenn Sie einen Code schnell verlassen müssen (aus welchem ​​Grund auch immer, dh um übermäßige ifs zu verhindern) ...

Verlassen
Addison Crump
quelle
Haha wow, du musst ein paar Schleppnetze gemacht haben, um das zu finden;)
Beta Decay
Ich benutze es oft .
Addison Crump
Die Frage oder die Tipps?
Beta Decay
Die Spitzen. Und AppleScript im Allgemeinen.
Addison Crump
Oh, ich sprach über die Frage :)
Beta Decay
2

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 thehier ist jedoch völlig überflüssig und kann für eine Speicherung von 4 Zeichen weggelassen werden:

log words of "Hello World"
Digitales Trauma
quelle
2
Sie können sogar kürzere Varianten haben:, log"Hello World"'s wordsweil Sie 1) keinen Abstand zwischen einem Ausdruck und einem zitierten Element benötigen und 2) 'sanstelle von verwenden können of.
Addison Crump
@VTCAKAVSMoACE ja, 'swird in dieser Antwort angesprochen codegolf.stackexchange.com/a/37643/11259 . Gut zu wissen log".
Digital Trauma
2

Bracket Shortening

Ä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.

Addison Crump
quelle
2

In Anbetracht...

Bei Fragen, die Groß- und Kleinschreibung erfordern, kann es schwierig sein, Fälle tatsächlich zu behandeln.

BIS JETZT:

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 .

Addison Crump
quelle
1

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 emacsin ein Terminal gelaufen und habe benutzt M-x hexl-find-file. Ich habe einige Codes gefunden und bearbeitet, wie JonspClpin JanspClpund ttxtin 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.

Kernigh
quelle