Поради щодо гольфу в Чеддарі


12

Чеддар

Cheddar - це функціональна + об'єктно-орієнтована мова програмування, створена нашим користувачем Downgoat, покликана зробити програмування простішим, швидшим та інтуїтивнішим.

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

Відповіді:


3

Використовуйте функціоналізовані властивості

Якщо ви коли-небудь використовуєте лише властивість у функції:

A->A.long.property(n).foo.bar

Ви можете використовувати функціоналізовані властивості, щоб зберегти деякі байти:

@.long.property(n).foo.bar

Ви можете посилатися на змінну у функціоналізованому властивості за допомогою $0.


2

Використовуйте String Operator для послідовностей рядків

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

Погляньте на це:

@" [103, 111, 97, 116, 115] === "goats"

не те, що корисно, а навпаки:

@"'goats' === [103, 111, 97, 116, 115]
'goats'.bytes // compare the above too

Це особливо корисно для створення алфавіту :

65@"90    // Uppercase Alphabet
97@"122   // Lowercase Alphabet
65@"90+97@"122 // Both cases
String.letters // Compare 97@"122 to this

1

Каррі

Ні, не червона каррі (про який інший каррі ви б думали про ¬_¬). Я маю на увазі такий тип каррі:

a->b->

Якщо у вас є функція, яка бере два аргументи. Каррі коротше, ніж ні:

(a,b)->
a->b->

Примітка. Це коротше, якщо у вас рівно два аргументи.


1

Використовуйте аргументи за замовчуванням

Оголошення змінних Cheddar може бути досить байтовим:

->{var a=b+1}

на щастя, ви можете (ab) використовувати значення за замовчуванням функції для створення змінних:

b=a+1->b

Ось кілька прикладів використання:

let f= (a,b=a+1)->b
f(5) // 6

let f= a=Math.rand()->a
f() // 0.8757450950797647

1

Використовуйте функціоновані оператори та облігацію

Це простий. Якщо у вас є щось на кшталт:

i->1+i

або будь-яка аналогічна операція. Ви можете скоротити за допомогою функціонованих операторів + зв'язок:

1&(+)

1

Скористайтеся оператором відображення

Зображення =>LHS на RHS, завдяки його перевазі, це також означає, що ви можете використовувати його з діапазонами та використовувати їх кілька разів:

a=>f
(a).map(f)

Додатково:

a=>f=>g           // This is equivilant to...
(a).map(f).map(g) // this
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.