Wiele języków skryptowych, takich jak Perl, Awk, Bash, PHP itp., Używa znaku $ przed nazwami identyfikatorów. Próbowałem sprawdzić, dlaczego, ale nigdy nie miałem zadowalającej odpowiedzi.
Wiele języków skryptowych, takich jak Perl, Awk, Bash, PHP itp., Używa znaku $ przed nazwami identyfikatorów. Próbowałem sprawdzić, dlaczego, ale nigdy nie miałem zadowalającej odpowiedzi.
Odpowiedzi:
Powłoka Bourne'a lub jej poprzedniczka była prawdopodobnie początkiem konwencji. Powłoki zwykle używają $foo
odniesienia do zmiennej powłoki lub zmiennej środowiskowej, podczas gdy po prostu foo
jest traktowany jako ciąg literalny (który może być nazwą polecenia, nazwą pliku lub po prostu słowem, które należy przekazać do innego polecenia).
Prawdopodobnie jest to kwestia zminimalizowania ilości wpisywanego tekstu. W większości języków programowania większość wpisywanych słów kluczowych to słowa kluczowe (z małego stałego zestawu) i nazwy rzeczy, które zostały zadeklarowane; warto używać tylko nazwy dla nich. Literały łańcuchowe są ujęte w cudzysłowy (pojedyncze lub podwójne), aby je odróżnić składniowo.
W interaktywnej powłoce większość rzeczy, które wpisujesz, to nazwy poleceń i nazwy plików, więc posiadanie dla nich nieokreślonej formy ma sens. Nazwy zmiennych nie są używane tak często, więc ich poprzedzenie $
jest prostym sposobem ich rozróżnienia.
$
Prawdopodobnie inspiracją było także śledzenie , którego używają niektóre języki BASIC dla zmiennych łańcuchowych (w przeciwieństwie do zmiennych numerycznych).
Wybór Perla do zastosowania $
w zmiennych skalarnych był niewątpliwie zainspirowany powłokami, takimi jak powłoka Bourne'a, a wczesne wersje Perla powszechnie traktowały słowa kluczowe jako literały łańcuchowe ( print FOO
i print "FOO"
były równoważne). To użycie słów kluczowych było przestarzałe w bardziej współczesnych wersjach Perla, ale sigile pozostają i są najczęściej używane do rozróżniania różnych rodzajów zmiennych. Być może, gdyby Perl był projektowany od zera, zmienne skalarne mogłyby być oznaczone „pustym znakiem”, ale tak się nie stało.
(BTW, Awk nie używa pieczęci. Ma $
składnię, ale odnosi się do liczb pól. NF
Jest liczbą pól; $NF
jest ostatnim ( NF
th)).
Znak $ w nazwie zmiennej jest szczególnym przypadkiem „Sigil” , w początkowych czasach BASIC (około 1964 r.) $ Był używany do oznaczania nazw zmiennych łańcuchowych. Domyślam się, ponieważ ułatwia kompilatorom oddzielanie nazw zmiennych od reszty gramatyki za pomocą jakiegoś symbolu, a ponieważ było wspólne dla BASIC, jego użycie postępowało. Nie jest to jednak jedyny zastosowany.
$
Ciągów znaków (i %
na całkowite) w podstawowego sufiks zamiast przedrostek, co najmniej w (brak wzorca) wariantów ja zadane. Nie jest to oczywiście istotne - sufiks vs. prefiks jest dość powierzchowny, przynajmniej jeśli chodzi o kompilatory i analizy leksykalne. Może występować niewielka różnica w zakresie czytelności.
Wydaje się, że pochodzi on z języka BASIC, gdzie sufiks $ wskazuje zmienną łańcuchową, a także został wymawiany jako „string”. Na przykład INKEY $ jest wymawiane „w kluczu”.
Ale dlaczego znak dolara? Cóż, $ wygląda trochę jak S dla stringów. I według Wikipedii :
Ponieważ znak dolara jest jednym z niewielu symboli, który z jednej strony jest prawie powszechnie obecny w komputerowych zestawach znaków, ale z drugiej strony rzadko jest potrzebny w ich dosłownym znaczeniu w oprogramowaniu komputerowym, znak $ był używany na komputerach do wielu celów niezwiązanych z pieniędzmi.
(Odpowiednio, za kilka dolarów więcej jest w telewizji podczas pisania tego.)
Dlaczego nie? Łatwiej jest napisać leksykę, która może powiedzieć, że identyfikator będzie zmienną (a w konsekwencji łatwiej napisać analizator składni), szczególnie dla języka interpretowanego. Co do tego $
, prawdopodobnie jest to w dużej mierze tradycja - jeden z twórców wczesnego języka używającego konstruktów (Bash? Lub raczej jego poprzednik) używał go z jakiegokolwiek powodu, a kolejne języki go przyjmowały.