Mengapa $ dalam nama pengidentifikasi untuk banyak bahasa?

15

Banyak bahasa scripting seperti Perl, Awk, Bash, PHP, dll. Menggunakan tanda $ sebelum nama pengidentifikasi. Saya sudah mencoba mencari tahu mengapa tetapi tidak pernah memiliki jawaban yang memuaskan.

rdasxy
sumber
10
Mungkin karena langkah terakhir dalam rencana bisnis kebanyakan programmer - ... laba!
Oded
2
Posting menarik pada SO mengenai pertanyaan yang sama: Mengapa variabel Perl harus dimulai dengan $,%, @ (sigils)
Brad Christie

Jawaban:

4

Cangkang Bourne atau pendahulunya mungkin merupakan asal dari konvensi. Shell cenderung digunakan $foountuk merujuk ke variabel shell atau variabel lingkungan, sedangkan hanya foodiambil sebagai string literal (yang bisa berupa nama perintah, nama file, atau hanya kata yang akan diteruskan ke perintah lain).

Mungkin masalah meminimalkan berapa banyak Anda harus mengetik. Di sebagian besar bahasa pemrograman, sebagian besar dari apa yang Anda ketikkan akan menjadi kata kunci (dari kumpulan kecil yang tetap) dan nama-nama hal yang telah dinyatakan; masuk akal untuk menggunakan hanya nama bagi mereka. Literal string dilampirkan dalam tanda kutip (tunggal atau ganda) untuk membedakannya secara sintaksis.

Dalam shell interaktif, sebagian besar hal yang Anda ketik akan menjadi nama perintah dan nama file, jadi memiliki formulir yang tidak didekorasi untuk mereka masuk akal. Nama variabel tidak sering digunakan, jadi mendahului mereka $adalah cara mudah untuk membedakannya.

Trailing $yang digunakan beberapa BASIC untuk variabel string (sebagai lawan variabel numerik) mungkin juga merupakan inspirasi.

Pilihan Perl untuk digunakan $untuk variabel skalar tidak diragukan lagi diilhami oleh cangkang seperti cangkang Bourne, dan versi awal Perl yang diperlakukan secara umum dengan kata kunci string ( print FOOdan print "FOO"setara). Penggunaan kata kunci ini telah usang dalam versi Perl yang lebih modern, tetapi sigil tetap ada, dan sebagian besar digunakan untuk membedakan berbagai jenis variabel. Mungkin jika Perl dirancang dari awal, variabel skalar mungkin dilambangkan dengan "sigil kosong", tetapi itu tidak terjadi.

(BTW, Awk tidak menggunakan sigils. Itu memang memiliki $sintaks, tetapi mengacu pada nomor bidang. NFAdalah jumlah bidang; $NFadalah bidang terakhir ( NFbidang).)

Keith Thompson
sumber
3
Just a sidenote: Bourne shell (1977) , BASIC (1964) .
Steven Jeuris 6/11
14

$ Sign in nama variabel adalah kasus khusus "Sigil" , Kembali pada hari-hari awal BASIC (1964 atau lebih) $ digunakan untuk menunjukkan nama variabel string. Dugaan saya adalah, karena membuatnya lebih mudah pada kompiler untuk memisahkan nama variabel dari sisa tata bahasa menggunakan beberapa simbol, dan karena itu umum untuk BASIC, penggunaannya telah berkembang. Namun, ini bukan satu-satunya yang digunakan.

Tidak mungkin
sumber
2
Untuk $string (dan %untuk bilangan bulat) di Basic adalah akhiran daripada awalan, setidaknya dalam varian (non-standar) yang saya timpakan. Bukan berarti itu penting, tentu saja - akhiran vs awalan cukup dangkal, setidaknya sejauh menyangkut kompiler dan analisis leksikal yang bersangkutan. Mungkin ada sedikit perbedaan dalam hal keterbacaan.
Steve314
BTW - salah satu alasan itu berhasil di Basic adalah bahwa ada kisaran tipe yang sangat terbatas, dan tidak ada tipe yang ditentukan pengguna, jadi hanya diperlukan kisaran sigils yang sangat terbatas. Penggunaan Perl berbeda - meskipun sekarang sudah lama bagi saya, jadi saya tidak bisa mengingat detailnya.
Steve314
@ steve314, Anda benar A $ = ... Terima kasih telah mencatat ini.
NoChance
5

awk?

Kadang-kadang disebut sigil , umumnya digunakan untuk menerjemahkan nama variabel (dan lainnya) menjadi nilai.

Jé Queue
sumber
5

Ini tampaknya berasal dalam BASIC, di mana $ akhiran menunjukkan variabel string, dan juga diucapkan sebagai "string". Sebagai contoh, INKEY $ diucapkan "in key string".

Tapi mengapa tanda dolar? Yah, $ terlihat sedikit seperti S untuk string. Dan menurut Wikipedia :

Karena tanda dolar adalah salah satu dari beberapa simbol yang, di satu sisi, hampir secara universal hadir dalam rangkaian karakter komputer, tetapi, di sisi lain, jarang diperlukan dalam arti literalnya dalam perangkat lunak komputer, karakter $ telah digunakan pada komputer untuk banyak tujuan tidak berhubungan dengan uang.

(Tepat, Untuk Beberapa Dolar Lebih ada di televisi saat saya mengetik ini.)

Hugo
sumber
2

Kenapa tidak? Lebih mudah untuk menulis lexer yang dapat memberitahu pengenal akan menjadi variabel (dan akibatnya lebih mudah untuk menulis parser), terutama untuk bahasa yang ditafsirkan. Mengenai mengapa $, itu mungkin sebagian besar tradisi - salah satu pencipta bahasa awal menggunakan konstruk (Bash? Atau lebih mungkin pendahulu) menggunakannya untuk alasan apa pun dan bahasa berikutnya mengadopsinya.

Kevin
sumber
1
Ini mungkin tidak membuat lexer dan parser yang lebih mudah untuk ditulis, tetapi itu menghilangkan persyaratan untuk kata-kata yang dipesan.
TomG