Tại sao $ trong tên định danh cho nhiều ngôn ngữ?


15

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.


10
Có thể vì bước cuối cùng trong kế hoạch kinh doanh của hầu hết các lập trình viên - ... lợi nhuận!
Oded

2
Bài đăng thú vị trên SO liên quan đến cùng một câu hỏi: Tại sao các biến Perl cần bắt đầu bằng $,%, @ (sigils)
Brad Christie

Câu trả lời:


4

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 FOOprint "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. NFLà số trường; $NFlà trường cuối cùng ( NFthứ).)


3
Chỉ là một sidenote: Bourne shell (1977) , BASIC (1964) .
Steven Jeuris

14

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.


2
Các $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.
Steve314

BTW - một lý do khiến nó hoạt động trong Basic là có phạm vi loại rất hạn chế và không có loại do người dùng xác định, do đó chỉ cần một phạm vi sigils rất hạn chế. Cách sử dụng Perl là khác nhau - mặc dù đối với tôi đã lâu rồi, vì vậy tôi thực sự không thể nhớ chi tiết.
Steve314

@ steve314, bạn hoàn toàn chính xác A $ = ... Cảm ơn bạn đã lưu ý điều này.
NoChance

5

Đôi khi được gọi là một sigil , thường được sử dụng để dịch tên của các biến (và những người khác) vào giá trị.


5

Đ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.)


2

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ó.


1
Nó có thể không làm cho lexer và trình phân tích cú pháp dễ viết hơn nhiều, nhưng nó loại bỏ yêu cầu cho các từ dành riêng.
TomG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.