Wskazówki do gry w golfa w Cheddar


12

ser Cheddar

Cheddar to wysokopoziomowy, funkcjonalny + obiektowy język programowania stworzony przez naszego użytkownika Downgoat, zaprojektowany, aby programowanie było łatwiejsze, szybsze i bardziej intuicyjne.

Jakie masz ogólne wskazówki na temat gry w golfa w Cheddar? Szukam pomysłów, które można by zastosować do problemów związanych z i które są co najmniej nieco specyficzne dla Cheddara (np. „Usuń niepotrzebne białe znaki” nie jest odpowiedzią).

Odpowiedzi:


3

Użyj właściwości funkcjonalizowanych

Jeśli kiedykolwiek użyjesz tylko właściwości w funkcji:

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

Możesz użyć funkcjonalizowanych właściwości, aby zapisać niektóre bajty:

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

Możesz odwoływać się do zmiennej we właściwości funkcjonalizowanej za pomocą $0.


2

Użyj operatora ciągów dla sekwencji ciągów

Mówię o @"operatorze, który robi różne rzeczy, z których wszystkie dotyczą ciągów znaków. Ma to całkiem sporo zastosowań, ale jest to jedno z moich ulubionych zastosowań:

Spójrz na to:

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

nie jest to przydatne, ale odwrotnie:

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

Jest to szczególnie przydatne do generowania alfabetu :

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

1

Curry

Bez czerwonego curry (o jakim innym curry pomyślałbyś ¬_¬). Mam na myśli ten rodzaj curry:

a->b->

Jeśli masz funkcję przyjmującą dwa argumenty. Curry jest krótsze niż nie:

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

Uwaga: Jest to krótsze, gdy masz dokładnie dwa argumenty.


1

Użyj domyślnych argumentów

Deklarowanie zmiennych Cheddar może być dość niszczycielem bajtów:

->{var a=b+1}

na szczęście możesz (ab) użyć domyślnych wartości funkcji do tworzenia zmiennych:

b=a+1->b

Oto kilka przykładów zastosowań:

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

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

1

Użyj funkcjonalizowanych operatorów i łączenia

To jest proste. Jeśli masz coś takiego:

i->1+i

lub jakakolwiek podobna operacja. Możesz skrócić za pomocą funkcjonalizowanych operatorów + łączenia:

1&(+)

1

Użyj operatora mapowania

=>Odwzorowuje LHS do RHS, ze względu na jego pierwszeństwa, oznacza to również można go używać z zakresów i używać go wielokrotnie:

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

Do tego:

a=>f=>g           // This is equivilant to...
(a).map(f).map(g) // this
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.