Gaya C # menyarankan penggunaan CamelCase dalam pengidentifikasi untuk membatasi kata-kata. Cadel tradisi menyarankan menggunakan-strip-gantinya.
Apakah pernah ada bahasa pemrograman di mana menggunakan spasi di pengidentifikasi tidak hanya diizinkan, tetapi idiom yang umum digunakan ketika menggunakan pengidentifikasi multi-kata?
Dimungkinkan untuk memiliki pengidentifikasi dengan spasi di beberapa implementasi Skema , tetapi itu bukan praktik yang banyak dilihat. Ini sebuah contoh:
Petite Chez Scheme Version 8.4
Copyright (c) 1985-2011 Cadence Research Systems
> (define |hey there| 100)
> (define |x y z| 200)
> (list |hey there| |x y z|)
(100 200)
programming-languages
language-design
dharmatech
sumber
sumber
bobs_utilities :: string_functions :: scramble
. Ini adalah nama, dan kami dapat menyertakan spasi putih sewenang-wenang jika kami mau karena itu sintaks, bukan token yang sederhana. Nama dengan banyak komponen ingin menjadi sintaksis abstrak; Memilih info namespace menjadi pengidentifikasi tunggal pada dasarnya adalah peretas "name mangling" untuk merepresentasikan struktur di dalam teks di mana Anda tidak memiliki mekanisme untuk merepresentasikan struktur.alert({'some Prop':'bob'}['some Prop']);
tetapi jika nama-nama properti string gagal tes pengidentifikasi / label Anda tidak dapat menggunakannya dengan notasi titik.define_singleton_method "sjdlkfjsljk#$SDEF SDFSDF@# @#$!!~" do; puts 42; end;
dan kemudian Anda dapat:send "sjdlkfjsljk#$SDEF SDFSDF@# @#$!!~"
tetapi itu tidak umum.Jawaban:
Kompiler FORTRAN mengabaikan ruang jadi:
Itu identik sejauh menyangkut kompiler.
Beberapa dialek SQL memungkinkan ruang yang disematkan dalam nama kolom tetapi mereka harus dikelilingi oleh backquotes atau pembatas lain sebelum dapat digunakan.
sumber
Visual Basic (dan VBScript) juga memungkinkan spasi putih di pengidentifikasi jika Anda mengelilingi pengenal dengan tanda kurung siku.
Namun, melakukannya sangat jarang.
sumber
Apakah SQL dihitung?
sumber
Well Whitespace adalah tentang ... whitespace:
Sayangnya Markdown tidak mendukung sintaksnya dan saya tidak dapat menunjukkan beberapa kode kepada Anda, tetapi Wikipedia memiliki sampel kode yang ramah manusia .
sumber
Di Algol 68 Anda dapat memiliki ruang dalam pengidentifikasi (saya tidak ingat apakah mereka signifikan atau tidak). Tetapi kata kunci ditandai dengan berhenti . Menggunakan nama dengan spasi di dalamnya adalah idiomatik (setidaknya di sekitar saya).
VHDL memungkinkan melarikan diri pengidentifikasi dengan ruang yang signifikan di dalamnya:
\foo bar\
. Hal ini memungkinkan juga untuk menggunakan kata kunci sebagai identifier\and\
, setiap karakter\n<42>\
dan kasus sensitivitas dalam pengidentifikasi (\Foo\
dan\foo\
berbeda sementaraFoo
danfoo
setara, dan berbeda dari baik\Foo\
dan\foo\
!). Verilog juga telah menggunakan pengidentifikasi dengan sebagian besar karakteristik ini (pengidentifikasi normal peka terhadap huruf besar dan menghindarinya secara tidak perlu tidak membuat pengenal lain), tetapi tidak memberikan ruang di dalamnya. Kebutuhan dari pengidentifikasi yang lolos dalam VHDL dan Verilog berasal dari fakta bahwa mereka sering diproduksi secara otomatis dari sumber lain (seperti skema) di mana pengidentifikasi biasanya tidak memiliki batasan yang sama seperti dalam bahasa pemrograman; AFAIK, mereka tidak digunakan secara idiomatis dalam situasi lain.sumber
'DEFINE'
dan, favorit pribadi'COMMENT'
,. Kami menggunakan untuk menggunakan prosesor makro untuk menggantinya dengan versi yang tidak dikutip).Saya tidak tahu apakah Anda menganggap MediaWiki wikitext bahasa, tetapi nama-nama dengan spasi pasti idiomatis:
Di mana "bentangkan bagian" adalah nama templat (http://en.wikipedia.org/wiki/Template:Expand_section)
Saya kira itu memenuhi kriteria - bahasa di mana pengidentifikasi secara rutin berisi spasi. Ini tidak pernah (saya pikir?) Ambigu karena pengidentifikasi selalu dikelilingi oleh banyak tanda baca untuk memisahkan mereka dari teks wiki mentah.
sumber
if
dan rekursi. Sintaks dan kinerjanya sangat buruk. Templat berperilaku sangat mirip fungsi, dan namanya diperhitungkan sebagai pengidentifikasi dalam buku saya.Informasikan 7 adalah sistem untuk mengembangkan fiksi interaktif menggunakan bahasa alami seperti sintaks, di mana multi-kata pengidentifikasi yang biasa:
Batasannya, tentu saja, adalah pengidentifikasi tidak dapat berisi kata kunci saat ini akan mendua.
Dalam nada yang sama, pengidentifikasi dengan garis bawah di Agda dapat digunakan mixfix, contoh paling sederhana yang mungkin adalah
if_then_else_
operator:sumber
Scala memungkinkan pengidentifikasi sewenang-wenang menggunakan backticks. Penggunaan yang biasa untuk ini adalah memohon
Thread.`yield`
karenayield
merupakan kata yang dilindungi undang-undang di Scala. Ini bisa (ab) digunakan untuk memiliki spasi dalam nama, meskipun itu akan jauh dari kode Scala idiomatik:Heck, Anda bahkan dapat memiliki tab di pengidentifikasi:
Saya kira ini bisa dibayangkan idiom untuk orang-orang pemrograman yang melek. Mungkin.
sumber
+
dalam nama metode. Jadi untukobj.a+=1
, itu akan menguraikannya seolah-olaha+=
metode. Penemu Martin Odersky dalam buku pelajarannya mengasumsikan bahwa programmer biasanya memasukkan spasi, sehingga ambiguitas parser secara praktis tidak terlalu bermasalah.obj.a+=1
setara denganobj.a += 1
yang setara denganobj.a.+=(1)
. Anda perlu memilikiobj.a_+=1
jika Anda ingin itu bekerja seperti yang Anda gambarkan. (Sebenarnya, itu akan memberikan kesalahan parse, Anda perlu meneleponobj.a_+=(1)
atauobj a_+= 1
.)F # memungkinkan spasi putih pada nama pengenal, tetapi mereka harus dikelilingi dengan backtick ganda. Lihat jawaban untuk pertanyaan ini: https://stackoverflow.com/questions/6639688/using-keywords-as-identifiers-in-f .
sumber
Anda mungkin menganggap hal ini sebagai kasus di Ketimun / Gherkin , di mana nama-nama fungsi secara efektif kalimat dengan argumen yang tertanam di dalamnya.
Sebagai ekstensi, saya berharap ini menjadi lebih umum di DSL kecil , di mana bahasa ini seharusnya ramah untuk non pengembang. Sebagai contoh, banyak mesin aturan menyediakan kemampuan untuk mendefinisikan aturan dengan deskripsi seperti bahasa Inggris, di mana spasi dapat digunakan dalam pengidentifikasi.
sumber
FWIW, Tcl memungkinkan spasi (dan hampir semua karakter lainnya) dalam pengidentifikasi, meskipun tidak umum untuk memanfaatkan fitur ini. Alasan utama itu tidak sering digunakan adalah hanya karena Anda harus menggunakan kutipan yang tepat. Misalnya, berikut ini menetapkan variabel bernama "nama saya" menjadi "bob", lalu mencetaknya
OTOH, ini sangat berguna ketika membangun variabel secara dinamis karena, ketika membuat variabel seperti itu, kita tidak perlu khawatir tentang karakter ilegal
sumber
Ada beberapa yang saya tahu. Saya sedang mengerjakan satu , dan bahasa pemrograman yang luwes . Informasikan , tetapi itu bukan bahasa pemrograman untuk tujuan umum.
sumber
Jika Anda menganggap pengujian DSL otomatis bahasa, kerangka robot memungkinkan spasi dalam nama kata kunci, dan itu sangat idiomatis. Dalam contoh berikut "Katakan halo" adalah nama kata kunci, "Contoh kasus uji" adalah nama kasus uji, dan "$ {nama depan}" adalah variabel:
sumber
Bahasa 4D memungkinkan ruang putih dalam nama metode dan variabel. Biasanya disukai di dalam komunitas, tetapi semua metode dan variabel bawaan menggunakannya ketika berlaku (
SET MENU ITEM PARAMETER
, misalnya)sumber
Smalltalk fitur metode kata kunci seperti
a:b:c:
yang melibatkan spasi ketika dipanggil. Misalnya:a: 100 b: 200 c: 300
. Ini adalah ungkapan standar dalam bahasa tersebut.sumber
Powershell memungkinkan spasi dalam nama variabel:
sumber
Saya melihat menyebutkan mirip untuk VB tetapi di JS ini banyak digunakan sebenarnya. Setiap properti dari objek dalam JavaScript dapat diakses dan diatur dalam bentuk string dengan tanda kurung siku atau hanya sebagai string dalam literal objek. Nama properti yang tidak mengikuti aturan penamaan variabel JS tidak dapat diakses melalui. notasi tetapi mereka berguna. Misalnya, Anda mungkin ingin memetakan URL ke perilaku atau referensi sekelompok orang dengan nama ketika Anda yakin semuanya unik. Seringkali sangat mudah dan mudah dibaca:
Ini juga membuatnya mudah untuk merestrukturisasi JSON untuk kemudahan penggunaan tanpa kehilangan faktor objek instan ketika jatuh ke JS.
sumber
foo['my method']()
danfoo['my property']
Power Query menggunakan banyak kode yang dibuat secara otomatis. Saya kira lebih dari setengah pengidentifikasi yang dihasilkan menggunakan ruang putih:
Seperti yang dapat Anda lihat, seperti dalam banyak bahasa ada sintaks tambahan untuk menyamaratakan apa pengenal itu.
Tetapi di tempat-tempat yang tidak ambigu, tidak diperlukan sintaks tambahan:
sumber
Jika Anda Anda menghitung itu sebagai bahasa nyata, JMP bahasa scripting ( http://www.jmp.com/support/downloads/pdf/jmp_scripting_guide.pdf ). Ini memungkinkan pengidentifikasi untuk memiliki spasi putih (untuk membuatnya lebih "dapat dibaca") dan lebih atau kurang mendorong seperti itu.
sumber
Bahasa pemrograman o42a yang saya kembangkan saat ini mendukung nama banyak kata . Bahasa tidak memiliki kata kunci sama sekali dan nama-nama biasanya dipisahkan dengan beberapa simbol. Dalam kasus yang jarang terjadi, kedua nama saling mengikuti, garis bawah digunakan untuk memisahkan mereka.
sumber
Authorware, yang bahasa scriptingnya didasarkan pada Pascal yang tidak berorientasi objek, memungkinkan spasi dalam nama variabel, meskipun seiring waktu orang-orang menemukan masalah dengan menggunakannya dan pindah dari situ http://books.google.com/books?id= bHC88YignAkC & pg = PA428 & lpg = PA428 .
sumber
Sunting: Jawaban ini terbukti salah, lihat komentar.
Jika saya memahami pertanyaan Anda dengan benar, kompiler tidak dapat memberikan ruang pada nama pengidentifikasi karena dapat menyebabkan nama duplikat (kecuali pembatas digunakan). Sebagai contoh:
int my = 0; bool my count = false; int count = 0; jika (Hitungan saya) ...
istilah 'jumlah saya' membingungkan karena bisa merujuk ke variabel yang disebut 'jumlah saya' atau mungkin pengembang lupa untuk menulis operator hubungan seperti> antara saya dan menghitung.
COBOL mengizinkan nama divisi dan nama bagian dipisahkan oleh spasi tetapi itu bukan pengidentifikasi dan variabel seperti dalam pertanyaan Anda.
sumber
my Count
menjadi nama variabel adalah pemrogram yang membuat kesalahan ketik. Itu bukan ambiguitas. Ambiguitas akan jika ada cara lain yang valid untuk mem-parsing ekspresi. Dengan alasan yang sama Anda bisa mengatakan bahwa memperbolehkana(b+c)
adalah ambigu karena mungkin programmer lupa>
dan benar-benar bermaksuda > (b + c)
.if (my count)
. Anda tidak mengatakan ada cara yang berbeda dan valid untuk menguraikan pernyataan itu (yang berarti ambigu). Anda mengatakan jika menambahkan karakter<
, Anda akan mendapatkan parse yang berbeda dan valid. Dan saya katakan jika Anda menambahkan karakter<
kea(b+c)
Anda juga berakhir dengan parse yang berbeda dan valid.var name of the variable : type of the variable
) - atau tidak memiliki deklarasi tipe sama sekali.