Styl C # sugeruje użycie CamelCase w identyfikatorach do rozgraniczenia słów. Tradycja Lisp sugeruje użycie zamiast-myślników.
Czy kiedykolwiek istniał język programowania, w którym używanie spacji w identyfikatorach było nie tylko dozwolone, ale często używany idiom przy stosowaniu identyfikatorów wielosłówowych?
Możliwe jest posiadanie identyfikatorów ze spacjami w niektórych implementacjach schematu , ale nie jest to powszechnie praktykowana praktyka. Oto przykład:
Petite Chez Scheme Version 8.4
Copyright (c) 1985-2011 Cadence Research Systems
> (define |hey there| 100)
> (define |x y z| 200)
> (list |hey there| |x y z|)
(100 200)
programming-languages
language-design
dharmatech
źródło
źródło
bobs_utilities :: string_functions :: scramble
. To jest nazwa i możemy dowolnie wstawiać białe znaki, ponieważ jest to składnia, a nie zwykły token. Nazwy z wieloma składnikami chcą być składnią abstrakcyjną; Informacja o przestrzeni nazw w pojedynczym identyfikatorze w jednym identyfikatorze to w zasadzie hack „mangling nazwy” do reprezentowania struktury w tekście, w którym brakuje mechanizmu reprezentującego strukturę.alert({'some Prop':'bob'}['some Prop']);
ale jeśli te nazwy właściwości łańcucha nie przejdą testu identyfikatora / etykiety, nie można ich używać z notacją kropkową.define_singleton_method "sjdlkfjsljk#$SDEF SDFSDF@# @#$!!~" do; puts 42; end;
a potem możesz:send "sjdlkfjsljk#$SDEF SDFSDF@# @#$!!~"
ale to nie jest powszechne.Odpowiedzi:
Kompilatory FORTRAN zignorowały spacje, więc:
Były identyczne pod względem kompilatora.
Niektóre dialekty SQL dopuszczają osadzanie spacji w nazwach kolumn, ale zanim będą mogły zostać użyte, muszą być otoczone cudzysłowami lub innymi ogranicznikami.
źródło
Visual Basic (i VBScript) zezwalają również na białe znaki w identyfikatorach, jeśli otoczysz identyfikator nawiasami kwadratowymi.
Jest to jednak dość rzadkie.
źródło
Czy SQL się liczy?
źródło
Dobrze Biała spacja jest o ... spacje:
Niestety Markdown nie obsługuje jego składni i nie mogę pokazać ci kodu, ale Wikipedia ma próbkę kodu przyjazną dla człowieka .
źródło
W Algolu 68 możesz mieć miejsce w identyfikatorach (nie pamiętam, czy były znaczące, czy nie). Ale słowa kluczowe zostały oznaczone przez stropowanie . Używanie nazw ze spacją w nich było idiomatyczne (przynajmniej wokół mnie).
VHDL pozwala uciec identyfikatory z istotnych miejsc w nich
\foo bar\
. Pozwala to również używać słów kluczowych jak identyfikator\and\
dowolny znak\n<42>\
czułości i identyfikatorów w przypadku (\Foo\
i\foo\
różnią się jednocześnieFoo
ifoo
są równoważne, i różni się od albo\Foo\
i\foo\
!). Verilog posiada także identyfikatory z większością tych cech (w normalnych identyfikatorach rozróżniana jest wielkość liter, a ich unikanie niepotrzebnie nie tworzy kolejnego identyfikatora), ale nie dopuszcza do nich spacji. Potrzeba uciekających identyfikatorów w VHDL i Verilog wynika z faktu, że często są one wytwarzane automatycznie z innych źródeł (takich jak schemat), gdzie identyfikatory zwykle nie mają takich samych ograniczeń jak w języku programowania; AFAIK, nie są one używane idiomatycznie w innych okolicznościach.źródło
'DEFINE'
i osobisty faworyt)'COMMENT'
. aby użyć makroprocesora w celu zastąpienia ich wersjami bez cudzysłowu).Nie wiem, czy uważasz Mediaite Wiki za język, ale nazwy ze spacjami są zdecydowanie idiomatyczne:
Gdzie „rozwinąć sekcję” to nazwa szablonu (http://en.wikipedia.org/wiki/Template:Expand_section)
Wydaje mi się, że spełnia kryteria - język, w którym identyfikatory zwykle zawierają spacje. To nigdy (nie sądzę?) Dwuznaczne, ponieważ identyfikatory są zawsze otoczone dużą ilością interpunkcji, aby oddzielić je od surowego tekstu wiki.
źródło
if
s i rekurencję. Składnia i wydajność są jednak dość złe. Szablony zachowują się bardzo podobnie do funkcji, a ich nazwy liczą się w mojej książce jako identyfikatory.Inform 7 to system do rozwijania interaktywnej fikcji przy użyciu składni podobnej do języka naturalnego, w której powszechne są identyfikatory zawierające wiele słów:
Ograniczeniem jest oczywiście to, że identyfikator nie może zawierać słowa kluczowego, gdy byłoby to niejednoznaczne.
W podobny sposób, identyfikatory podkreślenia w Agda mogą być używane mixfix, którego najprostszym przykładem jest prawdopodobnie
if_then_else_
operatora:źródło
Scala zezwala na dowolne identyfikatory za pomocą odwróconych znaków. Zwykle używa się tego do wywoływania,
Thread.`yield`
ponieważyield
jest to słowo zastrzeżone w języku Scala. Może to być (ab) mieć spacje w nazwach, chociaż byłoby to dalekie od idiomatycznego kodu Scala:Do cholery, możesz nawet mieć zakładki w identyfikatorach:
Przypuszczam, że może to niewykluczone być idiomatyczne dla literat programowania folku. Może.
źródło
+
w nazwach metod. Dlategoobj.a+=1
parsowałoby to tak, jakbya+=
była metodą. Wynalazca Martin Odersky w swoim podręczniku zakłada, że programiści zwykle zawierają spacje, więc dwuznaczności parsera praktycznie nie są zbyt problematyczne.obj.a+=1
jest równoważne z tym,obj.a += 1
co jest równoważne zobj.a.+=(1)
. Musisz to mieć,obj.a_+=1
jeśli chcesz, aby działało tak, jak to opisujesz. (W rzeczywistości spowoduje to błąd analizy, musisz zadzwonićobj.a_+=(1)
lubobj a_+= 1
.)F # pozwala na umieszczanie białych znaków w nazwach identyfikatorów, ale muszą być one otoczone podwójnymi backtickami. Zobacz odpowiedź na to pytanie: https://stackoverflow.com/questions/6639688/using-ke words-as-identifiers- in- f .
źródło
Można to uznać za przypadek Cucumber / Gherkin , w którym nazwy funkcji są w rzeczywistości zdaniami z wbudowanymi w nie argumentami.
Jako rozszerzenie, spodziewam się, że będzie to bardziej powszechne w małych DSL , gdzie język powinien być przyjazny dla programistów. Na przykład wiele mechanizmów reguł umożliwia definiowanie reguł z angielskim opisem, w którym w identyfikatorach można używać spacji.
źródło
FWIW, Tcl dopuszcza spacje (i prawie każdą inną postać) w identyfikatorach, chociaż nie jest to często używane z tej funkcji. Głównym powodem, dla którego nie jest często używany, jest konieczność prawidłowego cytowania. Na przykład poniżej ustawia zmienną o nazwie „moje imię” na „bob”, a następnie drukuje ją
OTOH, jest to bardzo przydatne podczas dynamicznego budowania zmiennych, ponieważ tworząc takie zmienne, nie trzeba się martwić o nielegalne znaki
źródło
Niewiele wiem. Pracuję nad jednym i gibkim językiem programowania . Inform ma, ale nie jest to język programowania ogólnego przeznaczenia.
źródło
Jeśli uważasz, że zautomatyzowane testowanie DSL jest językiem, struktura robota dopuszcza spacje w nazwach słów kluczowych i jest to bardzo idiomatyczne. W poniższym przykładzie „Say hello” to nazwa słowa kluczowego, „Example test case” to nazwa przypadku testowego, a „$ {first name}” jest zmienną:
źródło
Język 4D dopuszcza spacje w nazwach metod i zmiennych. Na ogół nie jest to mile widziane w społeczności, ale wszystkie wbudowane metody i zmienne używają ich, gdy ma to zastosowanie (
SET MENU ITEM PARAMETER
na przykład)źródło
Smalltalk zawiera metody słów kluczowych, takie jak takie,
a:b:c:
które po wywołaniu obejmują spacje. Npa: 100 b: 200 c: 300
. : To jest standardowy idiom w języku.źródło
Powershell zezwala na spacje w nazwach zmiennych:
źródło
Widziałem wzmiankę o podobnym dla VB, ale w JS jest to często używane. Dostęp do dowolnej właściwości obiektu w JavaScript można uzyskać i ustawić w postaci ciągu za pomocą nawiasów kwadratowych lub po prostu jako ciąg znaków w literałach obiektu. Nazwy właściwości, które nie są zgodne z regułami nazewnictwa zmiennych JS, są niedostępne przez. notacja, ale są one przydatne. Na przykład możesz mapować adresy URL do zachowania lub odwoływać się do grupy osób po imieniu, jeśli masz pewność, że wszystkie są unikalne. Często jest bardzo wygodny i łatwy do odczytania:
Ułatwia to również restrukturyzację JSON dla łatwości użycia bez utraty czynnika obiektu natychmiastowego po upuszczeniu do JS.
źródło
foo['my method']()
ifoo['my property']
Power Query wykorzystuje wiele automatycznie generowanego kodu. Sądzę, że ponad połowa wygenerowanych identyfikatorów używa białych znaków:
Jak widać, podobnie jak w wielu językach, istnieje dodatkowa składnia, aby jednoznacznie określić, czym jest identyfikator.
Ale w miejscach, w których jest to jednoznaczne, nie jest wymagana dodatkowa składnia:
źródło
Jeśli policzysz go jako prawdziwy język, język skryptowy JMP ( http://www.jmp.com/support/downloads/pdf/jmp_scripting_guide.pdf ). Pozwala to identyfikatorom na umieszczanie białych znaków (aby były bardziej „czytelne”) i mniej więcej zachęca do takich znaków.
źródło
Język programowania o42a, który obecnie rozwijam, obsługuje nazwy złożone z wielu słów . Język nie zawiera żadnych słów kluczowych, a nazwy są zwykle oddzielone jakimś symbolem. W rzadkich przypadkach te dwie nazwy następują po sobie, do ich oddzielenia służy podkreślnik.
źródło
Oprogramowanie autorskie, którego język skryptowy opierał się na nie-obiektowym Pascalu, dopuszczało spacje w nazwach zmiennych, choć z czasem ludzie odkryli problemy z ich używaniem i odeszli od niego http://books.google.com/books?id= bHC88YignAkC & pg = PA428 & lpg = PA428 .
źródło
Edycja: ta odpowiedź okazała się nieprawidłowa, patrz komentarze.
Jeśli dobrze rozumiem twoje pytanie, kompilator nie może dopuścić spacji w nazwie identyfikatora, ponieważ może to powodować zduplikowanie nazw (chyba że zostanie użyty separator). Na przykład:
int my = 0; bool moja liczba = fałsz; liczba int = 0; jeśli (mój hrabia) ...
termin „moja liczba” jest mylący, ponieważ może odnosić się do zmiennej o nazwie „moja liczba” lub może programista zapomniał napisać operator relacji, taki jak> między moim a liczbą.
COBOL pozwolił na oddzielenie nazw działów i nazw sekcji spacjami, ale nie są to identyfikatory i zmienne, jak w pytaniu.
źródło
my Count
bycia nazwą zmiennej byłby programista, który popełnił literówkę. To nie jest dwuznaczność. Dwuznaczność byłaby, gdyby istniał inny prawidłowy sposób parsowania wyrażenia. Z tego samego powodu można powiedzieć, że pozwoleniea(b+c)
jest niejednoznaczne, ponieważ być może programista zapomniał>
i naprawdę miał na myślia > (b + c)
.if (my count)
. Nie mówisz, że istnieje inny, prawidłowy sposób na parsowanie tego wyrażenia (co oznaczałoby, że jest on niejednoznaczny). Mówisz, że jeśli dodasz postać<
, otrzymasz inną, prawidłową analizę. I mówię, że jeśli dodasz tę postać<
doa(b+c)
siebie, skończy się to inną, prawidłową analizą.var name of the variable : type of the variable
) - lub w ogóle nie mieć deklaracji typu.