Поради щодо гольфу в Applescript


13

Які поради для гольфу в Applescript? Я шукаю ідеї, які можна застосувати до коду проблем із гольфом взагалі, які принаймні дещо специфічні для Applescript (наприклад, "видалити коментарі" - це не відповідь).


Це питання занадто широке. На нього неможливо відповісти однією повною, добре написаною відповіддю (а питання навіть прямо забороняє це).
Rainbolt

1
Все-таки це просто смішне запитання :)
MadTux

5
Позначено для переходу на CW (відповідно до нашої конвенції про "поради щодо питань гольфу в x").
Геобіт

@MadTux Так, Applescript зазвичай не є першим вибором у гольф-мовах ;-). Але бувають випадки , особливо в категорії з обмеженим джерелом, коли вона стає надзвичайно корисною.
Цифрова травма

4
@Rainbolt Чим це відрізняється за своєю суттю від інших порад щодо гольфу в х питаннях?
Цифрова травма

Відповіді:


6

ofОператор використовується , щоб отримати властивість від об'єкта:

log words of "Hello World"

Але у багатьох випадках ви можете використовувати 'sяк ярлик для збереження 1 символу:

log "Hello World"'s words

6
Здається дещо смішним, але також дещо приголомшливим, що Applescript розбирає апострофи як присвійні. Я просто можу уявити, як один із мовних дизайнерів, що підносить цю ідею до групи.
Геобіт

9
@Geobits Це великі прикметники для опису Applescript взагалі. Я просто не вирішив, чи є Applescript смішно дивовижним чи дивно смішним ;-)
Digital Trauma

4

Редактор Applescript - це зручний маленький IDE, який виділяє синтаксис та прикрашає ваш код. Однак для цілей гольфу він є контрпродуктивним, оскільки додає відступи та зайві ключові слова, наприклад, після endтверджень. Наприклад:

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

стає наступним, коли вставляється в редактор Applescript і компілюється / запускається:

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

Очевидно, перший фрагмент кращий для цілей гольфу.


ІМО це можна розглядати як загальну пораду, не характерну для AS. Багато сучасних ІДЕ роблять це, якщо дозволите.
Геобіт

2
@Geobits Погоджено. Хоча я думаю, що додавання конкретних ключових слів після цього endє досить специфічним для Applescript.
Цифрова травма

Так, це мене просто бентежить. Відступ / пробіл дуже поширений, хоча разом із непотрібними дужками тощо
Geobits

@Geobits Applescript - це все про читабельність. Я думаю, ідея полягає в тому, щоб зрозуміти, що endналежить до того, до якого блоку починається заява, коли у вас є кілька вкладених блоків
Digital Trauma

4

tell блоки поширені в Applescript:

tell application "TextEdit"
    activate
end tell

Однак для економії місця наступне еквівалентне, коли всередині tellблоку є лише один рядок:

tell application "TextEdit" to activate

3
Що саме є tell app "TextEdit" to activate.
wchargin

@WChargin Так. Додайте її як іншу відповідь, якщо хочете.
Цифрова травма

4

Деякі слова мають коротші синоніми. Наприклад, applicationможна записати як app*, а stringможна записати як text.

Також every <noun>можна записати просто множину, як у characters of "hello world"(або "foo"'s characters).

* Хоча компілятор редактора сценаріїв змінить його назад.


3

Необхідна операція з цитатами

Для будь-якої операції, яка вимагає цитати, щоб зробити щось, тобто

журнал "Привіт, світ!"

Можна скоротити до

журнал "Привіт, світ!"

Повторення

У повторних циклах цілком можна видалити слово "раз".

повторити х разів
кінець

проти

повторити х
кінець

<= і> =

Кожен раз , коли ці оператори називаються, ви можете замінити їх і , відповідно. Хоча це не може зменшити кількість байт (якщо умовні рахункові спеціальний байт не будуть реалізовані, які я запропонувати), це робить зменшити кількість символів.

Захоплення від STDIN

Ви можете захопити STDIN за допомогою таких символів:

на ходу аргв
кінець

Вихід швидко

Якщо вам потрібно швидко вийти з коду (з будь-якої причини, тобто запобігти зайвим ifs) ...

кинути

Ха-ха, напевно, ви зробили кілька тралів, щоб знайти це;)
Бета-занепад

Я цим багато користуюся .
Аддісон Кримп

Питання чи поради?
Бета-розпад

Поради. І AppleScript взагалі.
Аддісон Кримп

О, я говорив про питання :)
Бета-розпад

2

Applescript дозволяє вставити кілька додаткових ключових слів, щоб сприяти читанню:

log the words of "Hello World"

Але theтут абсолютно зайве і може бути опущено для збереження 4 символів:

log words of "Hello World"

2
Ви можете мати навіть більш короткі варіанти: log"Hello World"'s wordsтому що вам 1) не потрібен пробіл між будь-яким виразом і цитованим елементом, і 2) тому що він 'sможе бути використаний для заміни of.
Аддісон Кримп

@VTCAKAVSMoACE так, 'sрозглядається у цій відповіді codegolf.stackexchange.com/a/37643/11259 . Приємно знати, log"хоча.
Цифрова травма

2

Скорочення кронштейнів

Подібно до публікації про цитати, я пізніше зрозумів, що ви також можете скоротити такі речі:

якщо "a" = символ 1 (x як рядок), тоді поверніться {true, true}

до

якщо "a" = символ 1 (x як рядок), тоді поверніться {true, true}

Це розділить дужки і для вас. У цьому прикладі я зберігаю 5 байт.


2

Враховуючи ...

У питаннях, які потребують чутливості до справ, справді може бути важко розібратися зі справами.

ДО СЕГА:

розглядаючи випадок
    (щось стосується речей з урахуванням регістру)
кінець розгляду

Я насправді не знав цього ключового слова, поки мені він справді не знадобився. Використовуючи інші поради на цій сторінці порад, ми можемо зменшити їх до:

розглядаючи випадок
(щось стосується речей з урахуванням регістру)
кінець

Наскільки я знаю, це вимагає повного твердження. (Я багато чого намагався.) Детальну інформацію див. На цій сторінці .


1

У кількох виняткових випадках «подвійні кутові дужки» або «подвійні шеврони» можуть бути коротшими, ніж англійська назва команди, параметра чи константи.

Форма, кодована шевроном, зменшить AppleScript, щоб видалити буфер обміну від 20 до 16 символів:

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

Під час вилучення тексту з діалогового вікна (як це відбувається в метрономії та пі-дені ), випаде два символи :

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

(Ви можете скористатися діалогом та використовувати аргументи командного рядка osascript (1) , якщо у вас є принаймні Mac OS X 10.4.)

На клавіатурі в США «є параметр-» і «є варіант-зсув- \. Команда «event abcdefgh»має 16 символів. Параметр або константа «class abcd»містить 12 символів.

Форма, кодована шевроном, майже завжди занадто довга для гольфу. Ось приклад без подвійних кутових дужок:

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

І те саме з ними:

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

Зміна _open for access(16) на «event rdwropen»(16) була нейтральною. Зміна write permission_(17) на given«class perm»:(18) коштує 1 символу. Інші подвійні кутові дужки коштують дорожче.

Щоб використовувати подвійні кутові дужки, вам потрібно знати чарівний 4-літерний або 8-літерний код. Я знайшов деякі коди, зберігаючи файл сценарію з редактора сценаріїв, потім відкриваючи його в шестигранному редакторі. Я побіг emacsу терміналі і користувався M-x hexl-find-file. Я знайшов і відредагував деякі коди, як JonspClpу JanspClp, так і ttxtв atxt. Потім я зберег файл і знову відкрив його в редакторі сценаріїв. «event JanspClp»і «class atxt»з'явився в сценарії.

У документі під назвою Терміналогія AppleScript та коди подій Apple перераховані деякі коди. Я знайшов його копію на https://applescriptlibrary.wordpress.com/

Редактор сценаріїв перекладе подвійні кутові дужки на англійську мову перед збереженням сценарію. Для відзначення шеврону ви повинні написати свій скрипт в іншому текстовому редакторі, наприклад TextEdit. Збережіть сценарій як звичайний текстовий файл у римському (або MacRoman) кодуванні Mac OS. Mac OS X вважає за краще, щоб ви назвали файл із суфіксом .applescript.

Якщо порахувати байти, MacRoman має 1 байт на символ, тому кожен «або» вважається 1 байт.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.