Rất nhiều ngôn ngữ script như Perl, Awk, Bash, PHP, v.v ... sử dụng dấu $ trước tên định danh. Tôi đã cố gắng tìm kiếm lý do tại sao nhưng không bao giờ có câu trả lời thỏa đáng.
Rất nhiều ngôn ngữ script như Perl, Awk, Bash, PHP, v.v ... sử dụng dấu $ trước tên định danh. Tôi đã cố gắng tìm kiếm lý do tại sao nhưng không bao giờ có câu trả lời thỏa đáng.
Câu trả lời:
Vỏ Bourne hoặc tiền thân của nó có lẽ là nguồn gốc của quy ước. Shell có xu hướng sử dụng $foo
để chỉ một biến shell hoặc biến môi trường, trong khi đó chỉ foo
được lấy dưới dạng một chuỗi ký tự (có thể là tên lệnh, tên tệp hoặc chỉ là một từ được truyền cho lệnh khác).
Đây có lẽ là vấn đề giảm thiểu số lượng bạn phải nhập. Trong hầu hết các ngôn ngữ lập trình, hầu hết những gì bạn nhập sẽ là từ khóa (từ một bộ cố định nhỏ) và tên của những thứ đã được khai báo; nó có ý nghĩa để sử dụng chỉ một tên cho những người. Chuỗi ký tự được đặt trong dấu ngoặc kép (đơn hoặc kép) để phân biệt chúng theo cú pháp.
Trong một vỏ tương tác, hầu hết những thứ bạn nhập sẽ là tên lệnh và tên tệp, do đó, có một hình thức không được trang trí cho chúng có ý nghĩa. Tên biến không được sử dụng khá thường xuyên, do đó, trước chúng $
là một cách đơn giản để phân biệt chúng.
Dấu vết $
mà một số BASIC sử dụng cho các biến chuỗi (trái ngược với biến số) có lẽ cũng là một nguồn cảm hứng.
Sự lựa chọn của Perl để sử dụng $
cho các biến vô hướng chắc chắn được lấy cảm hứng từ các lớp vỏ như vỏ Bourne và các phiên bản đầu tiên của Perl thường được coi là barewords dưới dạng chuỗi ký tự ( print FOO
và print "FOO"
tương đương). Việc sử dụng barewords này đã không còn được sử dụng trong các phiên bản hiện đại hơn của Perl, nhưng các sigils vẫn còn và chủ yếu được sử dụng để phân biệt các loại biến khác nhau. Có lẽ nếu Perl được thiết kế từ đầu, các biến vô hướng có thể được biểu thị bằng một "sigil rỗng", nhưng điều đó đã không xảy ra.
(BTW, Awk không sử dụng sigils. Nó có một $
cú pháp, nhưng nó đề cập đến số trường. NF
Là số trường; $NF
là trường cuối cùng ( NF
thứ).)
Một ký hiệu $ trong tên biến là trường hợp đặc biệt của "Sigil" , Quay lại những ngày đầu của BASIC (1964 hoặc lâu hơn) $ đã được sử dụng để biểu thị tên biến chuỗi. Tôi đoán là, vì nó giúp trình biên dịch dễ dàng tách các tên biến khỏi phần còn lại của ngữ pháp bằng cách sử dụng một số ký hiệu và vì nó phổ biến đối với BASIC, nên việc sử dụng nó đã tiến triển. Tuy nhiên, đây không phải là người duy nhất được sử dụng.
$
chuỗi for (và %
cho số nguyên) trong Basic là hậu tố thay vì tiền tố, ít nhất là trong các biến thể (không chuẩn) mà tôi đã mắc phải. Tất nhiên, điều đó không đáng kể - hậu tố so với tiền tố khá hời hợt, ít nhất là về trình biên dịch và phân tích từ vựng. Có thể có một số khác biệt nhỏ về khả năng đọc.
Điều này dường như bắt nguồn từ BASIC, trong đó hậu tố $ chỉ ra một biến chuỗi và cũng được phát âm là "chuỗi". Ví dụ: INKEY $ được phát âm là "trong chuỗi khóa".
Nhưng tại sao đồng đô la lại ký? Chà, $ trông hơi giống S cho chuỗi. Và theo Wikipedia :
Vì ký hiệu đô la là một trong số ít các ký hiệu, một mặt, gần như phổ biến trong các bộ ký tự máy tính, nhưng mặt khác, hiếm khi cần theo nghĩa đen của chúng trong phần mềm máy tính, ký tự $ đã được sử dụng trên máy tính cho nhiều mục đích không liên quan đến tiền.
(Một cách thích hợp, Đối với một vài đô la nhiều hơn là trên điện thoại khi tôi gõ này.)
Tại sao không? Việc viết một từ vựng có thể cho biết một định danh sẽ là một biến dễ dàng hơn (và do đó dễ dàng hơn để viết trình phân tích cú pháp), đặc biệt đối với một ngôn ngữ được dịch. Về lý do $
, đó có lẽ là truyền thống - một trong những người tạo ra ngôn ngữ sơ khai sử dụng cấu trúc (Bash? Hoặc nhiều khả năng là tiền thân của nó) đã sử dụng nó cho bất kỳ lý do nào và các ngôn ngữ tiếp theo đã sử dụng nó.