W większości języków programowania zmienne nie mają znaków identyfikujących, tak jak w PHP. W PHP musisz poprzedzić zmienną $
znakiem.
Przykład;
var $foo = "something";
echo $foo;
Tworzę nowy język skryptowy dla aplikacji biznesowych, a moi docelowi użytkownicy nie mają doświadczenia w programowaniu. Czy te znaki ułatwiają czytanie i używanie kodu?
Jednym z powodów, dla których PHP go używa, $
jest to, że bez niego PHP nie może stwierdzić, czy nazwa jest odwołaniem do funkcji czy odwołaniem do zmiennej. Wynika to z faktu, że język pozwala na dziwne odwołania do funkcji. Tak więc $
symbol pomaga parser oddzielenia nazw.
Nie mam tego problemu w moim parserze. Moje pytanie dotyczy więc wyłącznie czytelności i łatwości użytkowania. Kodowałem w PHP od tylu lat, że kiedy widzę $foo
, łatwo jest mi zidentyfikować tę zmienną. Czy po prostu preferuję odchylenie od tego identyfikatora?
źródło
sigils
dziś użyć trzy razy w rozmowach.var $x = ...
lubtype $x = ...
myślę, że $ to przesada. Jeśli tak,$x = ...
to warto. Zwłaszcza jeśli nie chcesz obsługiwać podświetlania składni w popularnych edytorach. Jednak, jako preferencja, nie lubięsigils
Odpowiedzi:
Rzeczywiste możliwości techniczne i ograniczenia nie są niczym takim, jak sugerowano w tym wątku. Najpierw je usuńmy.
Oto, co $ umożliwia w PHP:
$return
Lub mogące używać tej samej nazwy dla zmiennej i funkcji / stałej np$__FILE__
Ograniczenia lub funkcje niezwiązane z przedrostkiem $:
Oznacza to, że nie ma technicznego powodu, którego nie mógłbyś mieć
lub
Jednak nie możesz (zakładając, że
return
jest słowem kluczowym)Bez poważnych komplikacji. Jeśli użyjesz takiego prefiksu
$
, to nie będzie problemu.To opinia, ale uważam, że sigil byłby warty dla programistów, ponieważ pozwala im używać słów kluczowych jako nazw zmiennych, w przeciwnym razie wyglądałoby to na dowolne ograniczenie: P
źródło
return = "something";
C # ma „kontekstowe słowa kluczowe”, co jest również opcją, którą warto sprawdzić podczas projektowania języków.@return = "something;"
. Tak, istnieje pewna liczba kontekstowych słów kluczowych, ale uczynienie ich wszystkimi kontekstowymi oznaczałoby znacznie bardziej skomplikowaną implementację.Sigile mają znacznie większy sens w Perlu, gdzie zapewniają pewną kontrolę typów. W php niewiele pomagają poza szablonowaniem. Możesz dowiedzieć się o ich przydatności i czytelności, rozglądając się po różnych językach. Prawie nikt ich nie używa.
W języku docelowym użytkownika końcowego, nad którym pracuję, posuwam się nawet dalej, czyniąc identyfikatory niewrażliwymi na wielkość liter i pozwalając na spacje i apostrofy. To pozwala mi tworzyć takie nazwy zmiennych,
Karl's height
które są znacznie bliższe językom naturalnym.źródło
At Karl's for the night = true;
map sum
jest częściowo zastosowanym wywołaniem funkcji - funkcjasum
jest przekazywana jako parametr domap
. Ale oba są tylko nazwami bibliotek, więc przy identyfikatorach wielosłówowych kompilator nie mógł wiedzieć, czymap sum
jest to jeden identyfikator wielosłówowy, czy aplikacja funkcji oparta na dwóch jednosłówkowych identyfikatorach.Wiele lat temu nauczyłem się Applesoft Basic. Ciągi zawsze były
$
sufiksowane, a tablice miały sufiks%
. Tak właśnie działał język. Patrzyłeś na coś, wiedziałeś, co to jest. Nigdy nie zagłębiałem się zbytnio w tłumacza, aby zrozumieć, dlaczego tak się stało, lub decyzje projektowe, które to sprawiły.Sigil w php pochodzi od jego perlowego wpływu (na który wpłynęły
awk
ish
). Sigil w perlu to coś więcej niż tylko$
to, że może identyfikować wiele różnych typów:$
skalarny@
lista%
haszysz&
blok kodu*
typeglobPieczęć identyfikuje, na którą część struktury tabeli symboli patrzysz. Za kulisami wpis w tablicy symboli dla foo (dostępny za pomocą
*foo
- typeglob) zawiera wszystko, co może być foo. Jest$foo
,@foo
,%foo
The Formatfoo
,&foo
, uchwytu pliku foo, etc ...Pozwala to również utworzyć alias jednej zmiennej do drugiej:
Wypisuje
foo 1 2
- w Perlu, to co sigile są naprawdę na nie, że należy to zrobić, ale raczej, że jest to za kulisami rzeczy, które robią.Znaki nie są tak bardzo czytelne, ale raczej po to, aby można było mieć kolizję w przestrzeni nazw
$foo
i@foo
bez niej (porównaj inne języki, w których nie można mieć obuint foo; int[] foo;
)Sigile dla czytelności to coś, czego uczy się jako część dowolnego języka - odczytywanie składni. Można hipotetycznie wymusić sam typ (jako notację węgierską), aby był częścią identyfikatora.
Coś w leksykonie w stylu:
A potem możesz mieć kod podobny
Nie twierdzę, że to dobry pomysł, ale raczej, że ktoś, kto jest przyzwyczajony do języka, będzie mógł przeczytać go natywnie i pomyśli, że poprawia to czytelność, podczas gdy ktoś, kto nie zna języka, może pomyśleć, że po prostu dodaje hałas w języku.
Jednak po pracy z tak zdefiniowanym językiem prawdopodobnie mogłem go przeczytać bez problemu.
Niektórzy ludzie je lubią, inni nie. Dyskusje na ten temat toczą wielkie święte wojny na różnych forach, a to naprawdę sprowadza się do tego, ile z nich korzystałeś.
Można zaprojektować nowy język dla nie-programistów korzystających z pieczęci, a każdy, kto nigdy wcześniej nie programował, nigdy nie narzeka na nie ani trochę. Z drugiej strony, nie możesz mieć ich jako części języka, a następnie programiści Ruby lub Perl narzekają, że brakuje im niektórych kluczowych informacji.
To naprawdę nie ma znaczenia. Liczy się to, jak sigile pasują do języka, jeśli ich użyjesz, czy nie. Chcesz być w stanie to zrobić,
"123 $foo 456"
czy musisz"123 " + foo + " 456"
? Właśnie tam należy podjąć decyzję.źródło
"123 $foo 456"
nie jest włączona przez przedrostek sigil i jest całkowicie do niego ortogonalna.$asd
składni interpolacji łańcuchów, jeśli$
był już używany do zmiennych prefiksów, ale nie miało to nic wspólnego z faktyczną możliwością implementacji interpolacji łańcuchów.#
używany na przykład w coffeescript. A coffeescript nie ma prefiksu zmienne z#
- w rzeczywistości w ogóle nie ma prefiksu zmiennych)Nie zgadzam się, że PHP używa $, aby odróżnić vars od funcs. Przynajmniej dlatego, że PHP ma składnię podobną do C, a funcs () mają nazwy parens.
Przeczytaj ten post o przepełnieniu stosu o tym, dlaczego $ jest w PHP.
Wiele popularnych języków, takich jak C, C ++, C #, Java, nie używa $ i możemy różnić się łatwymi wariantami od funkcji.
W PHP $ pomaga na przykład, kiedy piszesz: echo "var = $ var"
Bez $ taka sztuczka będzie niemożliwa.
źródło
echo "var = $var"
fn()[]
gdzieś z rozsądną gramatyką, która zadziałałaby po wyjęciu z pudełka, nawet o tym nie myśląc.Po tych wszystkich odpowiedziach chciałbym dać trochę więcej punktów Mathew Foscarini.
są skutkami ubocznymi tego LEXERA , ponieważ jest on w stanie rozpoznać token.
Weźmy jako przykład: w SQL używamy „”, aby móc używać identyfikatorów z zastrzeżonymi słowami, a nawet identyfikatorów ze spacjami „Imię”, „Nazwa grupy”. GROUP jest słowem kluczowym. Wystąpił problem - było specjalne rozwiązanie.
PS Bardzo dobry komentarz od MichaelT.
źródło
$
. Również „możliwość umieszczenia zmiennej w ciągu znaków” nie wynika z tego, że zmienne są poprzedzone takim symbolem$
. Oznacza to,"123 $foo 456"
że zadziała, nawet jeśli składnia zmiennej jest podobnafoo = 3
lub@foo = 3
. Nie są ze sobą spokrewnieni.... pieczęć pozwala:
Lepiej odróżnij zmienne od nie-zmiennych . Ludzie, którzy wciąż uczą się podstawowych pojęć, mogą mieć problem z ustaleniem, które słowa są zmiennymi, a które nie. Często zaczynają od czytania przykładów lub kodu innej osoby bez odpowiedniego tła.
Użyj zastrzeżonych słów kluczowych lub nazw funkcji jako nazw zmiennych . Czasami stwierdziłem, że niektóre z tych nazw są odpowiednie dla zmiennej (tj.
$count
Gdycount()
zdefiniowano funkcję) i podziękowałem sigilom za pozwolenie na ich użycie.źródło
$
znakiem. Pamiętam znak dolara, który mylił mnie, gdy byłem dzieckiem ze względu na nieodłączne powiązania pieniężne.%
może być wykonalną alternatywą.