Począwszy od 2015 ECMAScript, JavaScript posiada 33 zarezerwowanych słów kluczowych , takich jak break
, const
i new
, jak również 10 przyszłych zastrzeżone słowa kluczowe , jak let
i await
.
Twoim zadaniem jest zebranie największej liczby następujących po sobie 1 odrębnych zastrzeżonych słów kluczowych 2 podczas pisania funkcjonalnego kodu JavaScript 3 .
- Kolejne zastrzeżone słowa kluczowe - zastrzeżone słowa kluczowe, które są oddzielone tylko białymi spacjami i / lub nawiasami i / lub nawiasami klamrowymi.
- Zastrzeżone słowa kluczowe - wszelkie zastrzeżone lub przyszłe zastrzeżone słowa kluczowe według ECMAScript 2015 . Zastrzeżone słowa kluczowe ze starszych standardów są wykluczone, pełna lista dozwolonych słów kluczowych znajduje się poniżej.
- Kod funkcjonalny - twój kod powinien się uruchomić (w razie potrzeby podaj swój środowisko uruchomieniowe), ostatecznie się zatrzymaj i nie generuj żadnych błędów środowiska uruchomieniowego.
Jeśli kod wymaga określonego środowiska wykonawczego, użyte zastrzeżone słowa kluczowe nie mogą być blokadami w danym środowisku.
Lista zastrzeżonych słów kluczowych
Punktacja i przykłady
Twój wynik będzie równy największej liczbie kolejnych odrębnych zarezerwowanych słów kluczowych.
W przypadku równych wyników wygrywa najkrótszy kod źródłowy w bajtach. Komentowane sekcje i ciągi znaków nie liczą się do zarezerwowanych słów kluczowych, ale liczą się do liczby bajtów.
// score: 3
if (true) 0; else throw function() {}
^------------------^
// score: 2
let foo = typeof typeof void typeof void 0;
^---------^
// score: 0
/* typeof default debugger */
// score: 0, doesn't halt or debugger is no-op, depending on the environment
debugger;
źródło
Odpowiedzi:
43 słowa, 603 bajty
Uhm, czy to jest luka? Nie mam pojęcia, jak, u diabła, jest to legalne JS, ale działa i używa każdego słowa kluczowego.
źródło
-1
,i+1
,i-1
powyżej~0
,-~i
,~-i
kiedy mogę, po prostu dlatego, że jest bardziej przejrzyste czytelne dla tych, którzy nie są zbyt zaznajomieni z kodem-golfa i~
jeszcze. Chociaż oczywiście zawsze będę używałi+~j
ii-~j
grał w ten pojedynczy bajti-j-1
ii+j+1
. ;)if(this)return void typeof function(){} else debugger
nie jest trudny do wymyślenia, ale potem robi się brzydko szybko. I tak, to całkowicie zamienia słowa kluczowe w identyfikatory - ale w przypadku niektórych z nich musisz to zrobić, aby móc z nich korzystać (npenum
.). Po prostu doszedłem do skrajności, ale czy nie o to chodzi w golfie? : Pobj["break"] = function (){}
itp.37 słów
Nieużywane słowa kluczowe:
case
wymaga:
const
wymaga=
export
wymaga trybu ścisłegoimport
wymaga trybu ścisłegosuper
wymagaconstructor
źródło
1 + 2
.1 + 2
. Pełna wartość tego kodu jest odpowiedzią na ostateczne pytanie dotyczące życia, wszechświata i wszystkiego. To skomplikowane . :)43 słowa,
302299 bajtówźródło
enum
.212426 słów, 185 bajtów+
12 słowa dzięki Arnauldowi i +1 do 12Me21!Zakładając, że zrozumiałem wyzwanie, otrzymuję 24 słowa. Słowa bez nawiasów, nawiasów i białych znaków:
24 słowa, 177 bajtów
Bez „prawda” i „fałsz”, które według pytania nie są słowami kluczowymi.
Słowa:
źródło
case ... :
lubdefault:
na końcu (ponieważ:
nie jest dozwolone między słowami kluczowymi)for(let _;0;);
+2 słowami (ale nie możeszcase
już ich używać ).switch({}){case{}:{}}
=>switch({}){case{}:;}
? Nie wiem, czy;
czasem jest to konieczne3839słowa od „super” do „const”
Wersja golfowa:
źródło
Uncaught SyntaxError: Unexpected token delete
gdy próbuję uruchomić twoją odpowiedź w mojej konsoli Javascript w Google Chrome. Jak mogę sprawdzić, czy twoje rozwiązanie jest prawidłowe?SyntaxError: yield expression is only valid in generators
21 słów
(nie jestem pewien
let
iawait
)źródło
,
=
i;
nie są dozwolone jako separatory.43 słowa, 300 bajtów
Bardziej czytelnie:
Musiałem użyć „słowa zarezerwowanego jako nazwy metody”, aby sobie z tym poradzić
case
(ponieważ już użyłemdefault
z moimswtich
),export
orazimport
(ponieważ tryb modułu jest zawsze ścisły, co dyskwalifikujewith
)super
(ponieważ musi nastąpić dostęp do właściwości lub umieszczenie wconstructor
funkcji), orazenum
(który nigdy nie może być użyty, ponieważ jest słowem zastrzeżonym bez użycia poprawnego gramatycznie)źródło
super
może pojawić się na początku, nie będąc nazwiskiem, ale zbyt drogo141516 Słowa bez nawiasów ani nowej liniiDziękujemy Bergi za +1
źródło
yield
?Uncaught SyntaxError: Unexpected token new
gdyfunction
zfunction*
, więc zostanie ona rozpoznana jako generator.28 słów bez nawiasów, 234 bajtów
Umieszczenie nazw identyfikatorów jako nazw definicji metod było zbyt oczywiste ( przynajmniej dla mnie ), więc szukałem najdłuższej z kolei wyraźnej sekwencji zarezerwowanych słów i białych znaków we fragmencie kodu.
Mam nadzieję, że martwy kod po a
return
nie liczy się jako luka, ale kod nadal jest uruchamialny, jeśli użyte identyfikatory zostaną zadeklarowane.Wykorzystuje to fakt, że niektóre przyszłe zastrzeżone słowa kluczowe są uważane za niepoprawne tylko w trybie ścisłym ES5.1 (najwyraźniej dlatego, że silniki nie zadały sobie trudu, aby zablokować wszystkie przyszłe zastrzeżone słowa ES3, więc za dużo kodu używało ich tam w Internecie ).
Podobnie tokeny
async
iawait
wprowadzone w ES8 są uważane za słowa kluczowe tylko w trybie ścisłym.źródło
break
icontinue
może tam być?Uncaught SyntaxError: Undefined label 'implements'
, czy twoja odpowiedź wymaga określonego czasu działania?