Wskazówki do gry w golfa w Applescript

13

Jakie masz wskazówki dotyczące gry w golfa w Applescript? Szukam pomysłów, które można by zastosować do problemów z golfem w kodzie, które są przynajmniej nieco specyficzne dla Applescript (np. „Usuń komentarze” nie jest odpowiedzią).

Rozpad beta
źródło
To pytanie jest zbyt szerokie. Nie da się na to odpowiedzieć jedną kompletną, dobrze napisaną odpowiedzią (a pytanie wprost tego zabrania).
Rainbolt
1
Ale to tylko zabawne pytanie :)
MadTux,
5
Zgłoszono do konwersji na CW (zgodnie z naszą konwencją w sprawie pytań dotyczących gry w golfa w pytaniach x).
Geobits
@MadTux Tak, Applescript zazwyczaj nie jest pierwszym wyborem w golfie ;-). Ale zdarzają się sytuacje , szczególnie w kategorii z ograniczonym źródłem, gdzie staje się marginalnie użyteczny.
Cyfrowy uraz
4
@Rainbolt Czym różni się to od innych wskazówek dotyczących gry w golfa w x pytaniach?
Cyfrowa trauma

Odpowiedzi:

6

ofOperator jest używany, aby uzyskać właściwości z obiektu:

log words of "Hello World"

Ale w wielu przypadkach możesz użyć 'sskrótu do zapisania 1 znaku:

log "Hello World"'s words
Cyfrowa trauma
źródło
6
Wydaje się to nieco śmieszne, ale także niesamowite, że Applescript analizuje apostrofy jako zaborcze. Mogę sobie tylko wyobrazić, jak jeden z projektantów języka przekazuje ten pomysł grupie.
Geobits
9
@Geobits Są to świetne przymiotniki do opisywania Applescript w ogóle. Po prostu nie zdecydowałem, czy Applescript jest absurdalnie niesamowity, czy niesamowicie absurdalny ;-)
Digital Trauma
4

Edytor Applescript to poręczne małe IDE, które wyróżnia składnię i upiększa Twój kod. Jednak w przypadku gry w golfa przynosi efekt przeciwny do zamierzonego, ponieważ dodaje wcięcia i zbędne słowa kluczowe, np. Po endwyrażeniach. Na przykład:

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

staje się następujący po wklejeniu do edytora Applescript i skompilowaniu / uruchomieniu:

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

Oczywiście pierwszy fragment jest lepszy do gry w golfa.

Cyfrowa trauma
źródło
IMO może to być postrzegane jako ogólna wskazówka, nie specyficzna dla AS. Wiele nowoczesnych IDE robi to, jeśli im na to pozwalasz.
Geobits
2
@Geobits uzgodnione. Chociaż myślę, że dodanie określonych słów kluczowych po endjest dość specyficzne dla Applescript.
Digital Trauma
Tak, to dla mnie zaskakujące. Wcięcie / odstępy są jednak bardzo powszechne, wraz z niepotrzebnymi nawiasami itp.
Geobits
@Geobits Applescript to przede wszystkim czytelność. Myślę, że chodzi o to, aby wyjaśnić, która endnależy do której instrukcji początku bloku, gdy masz wiele zagnieżdżonych bloków
Digital Trauma
4

tell bloki są powszechne w Applescript:

tell application "TextEdit"
    activate
end tell

Jednak, aby zaoszczędzić miejsce, poniższe są równoważne, gdy wnętrze tellbloku to tylko jedna linia:

tell application "TextEdit" to activate
Cyfrowa trauma
źródło
3
Który sam jest tell app "TextEdit" to activate.
wchargin
@WChargin Tak. Dodaj to jako kolejną odpowiedź, jeśli chcesz.
Digital Trauma
4

Niektóre słowa mają krótsze synonimy. Na przykład applicationmożna zapisać jako app* i stringmożna zapisać jako text.

Ponadto, every <noun>mogą być zapisywane jako po prostu mnogiej, tak jak w characters of "hello world"(lub "foo"'s characters).

* Chociaż kompilator edytora skryptów zmieni go z powrotem.

Peter Hosey
źródło
3

Oferta wymagana do działania

Dla każdej operacji, która wymaga wyceny, aby coś zrobić, tj

log „Witaj świecie!”

Możesz skrócić do

log „Witaj świecie!”

Powtórzenie

W pętlach powtarzalnych można całkowicie usunąć słowo „razy”.

powtórz x razy
koniec

przeciw

powtórz x
koniec

<= i> =

Za każdym razem te podmioty są nazywane, można zastąpić je i odpowiednio. Chociaż nie może zmniejszyć liczbę bajtów (chyba specjalny bajt konwencje liczenia są realizowane, co sugeruję), to ma zmniejszyć liczbę znaków.

Łapanie ze STDIN

Możesz pobrać ze STDIN za pomocą następujących postaci:

w biegu argv
koniec

Wychodzę szybko

Jeśli musisz szybko wyjść z kodu (z dowolnego powodu, tj. Zapobiegając nadmiernemu ifs) ...

porzucić
Addison Crump
źródło
Haha, wow, musiałeś trochę włokować, żeby to znaleźć;)
Rozpad Beta
Używam go dużo .
Addison Crump
Pytanie czy wskazówki?
Beta Decay
Napiwki. I ogólnie AppleScript.
Addison Crump
Och, mówiłem o pytaniu :)
Rozpad Beta
2

Applescript pozwala wstawić dodatkowe słowa kluczowe, aby poprawić czytelność:

log the words of "Hello World"

Ale thetutaj jest całkowicie zbędny i można go pominąć w przypadku zapisywania 4 znaków:

log words of "Hello World"
Cyfrowa trauma
źródło
2
Możesz mieć jeszcze krótsze warianty: log"Hello World"'s wordsponieważ 1) nie potrzebujesz odstępu między wyrażeniem a cytowanym przedmiotem oraz 2), ponieważ 'smożna go użyć zamiast of.
Addison Crump,
@VTCAKAVSMoACE tak, 'sjest rozwiązany w tej odpowiedzi codegolf.stackexchange.com/a/37643/11259 . Warto o tym wiedzieć log".
Cyfrowa trauma
2

Skrócenie wspornika

Podobnie jak w poście o cytatach, uświadomiłem sobie później, że możesz także skrócić takie rzeczy:

jeśli „a” = znak 1 z (x jako ciąg), to zwróć {true, true}

do

jeśli „a” = znak 1 z (x jako ciąg), to zwróć {true, true}

Dla ciebie też rozdzieli nawiasy. W tym przykładzie zapisuję 5 bajtów.

Addison Crump
źródło
2

Wobec...

W przypadku pytań wymagających rozróżniania wielkości liter rzeczywiste rozpatrywanie spraw może być trudne.

DO TERAZ:

rozważanie przypadku
    (coś wspólnego z rozróżnianiem wielkości liter)
koniec rozważania

Właściwie nie znałem tego słowa kluczowego, dopóki go naprawdę nie potrzebowałem. Korzystając z innych wskazówek na tej stronie ze wskazówkami, możemy zmniejszyć to do:

rozważanie przypadku
(coś wspólnego z rozróżnianiem wielkości liter)
koniec

O ile mi wiadomo, wymaga pełnego oświadczenia. (Próbowałem już wielu rzeczy.) Więcej informacji na tej stronie .

Addison Crump
źródło
1

W kilku wyjątkowych przypadkach „nawiasy podwójne” lub „podwójne szewrony” mogą być krótsze niż angielska nazwa polecenia, parametru lub stałej.

Forma zakodowana w postaci szewronu zmniejszyłaby AppleScript, aby usunąć schowek z 20 do 16 znaków:

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

Upuszczałby 2 znaki podczas pobierania tekstu z okna dialogowego (jak to się dzieje w metronomie i dniu Pi ):

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

(Możesz preferować unikanie okna dialogowego i używanie argumentów wiersza poleceń osascript (1) , jeśli masz przynajmniej Mac OS X 10.4.)

W przypadku klawiatury amerykańskiej «to Option- \, a» to Option-shift- \. Polecenie «event abcdefgh»ma 16 znaków. Parametr lub stała «class abcd»ma 12 znaków.

Forma kodowana szewronem jest prawie zawsze za długa do gry w golfa. Oto przykład bez nawiasów podwójnych:

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

I to samo z nimi:

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

Zmiana _open for access(16) na «event rdwropen»(16) była neutralna. Zmiana write permission_(17) na given«class perm»:(18) kosztuje 1 postać. Inne podwójne wsporniki kątowe kosztują więcej.

Aby używać nawiasów podwójnych, musisz znać magiczny 4-literowy lub 8-literowy kod. Znalazłem kilka kodów, zapisując plik skryptu z edytora skryptów, a następnie otwierając go w edytorze szesnastkowym. Uruchomiłem emacsterminal i korzystałem M-x hexl-find-file. Znalazłem i zredagowałem niektóre kody, takie jak JonspClpdo JanspClpi ttxtdo atxt. Następnie zapisałem plik i otworzyłem go ponownie w edytorze skryptów. «event JanspClp»i «class atxt»pojawił się w skrypcie.

Dokument zatytułowany Terminologia AppleScript i Dokumentacja kodów zdarzeń Apple zawiera listę niektórych kodów. Znalazłem jego kopię na https://applescriptlibrary.wordpress.com/

Script Editor przetłumaczy nawiasy z podwójnym kątem na angielski przed zapisaniem skryptu. Aby zachować szacunek dla chevronów, musisz napisać skrypt w innym edytorze tekstu, takim jak TextEdit. Zapisz skrypt jako zwykły plik tekstowy w kodowaniu Roman Mac OS (lub MacRoman). Mac OS X woli, aby nazwać plik sufiksem .applescript.

Jeśli policzysz bajty, MacRoman ma 1 bajt na znak, więc każdy «lub» liczy się jako 1 bajt.

kernigh
źródło