Tanımlayıcılardaki boşluk hiç aptalca oldu mu? [kapalı]


43

C # stili, sözcükleri sınırlandırmak için tanımlayıcılarda CamelCase kullanılmasını önerir . Lisp geleneği yerine-tire kullanarak önerir.

Tanımlayıcılarda boşluk kullanımına sadece izin vermekle kalmadı, aynı zamanda çok kelimeli tanımlayıcıları kullanırken yaygın olarak kullanılan bir deyim oldu mu?

Bazı Şema uygulamalarında boşluk içeren tanımlayıcılara sahip olmak mümkündür , ancak bu yaygın olarak görülen bir uygulama değildir. İşte bir örnek:

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)

Ad alanlarınız varsa, bu bir bileşik tanımlayıcı şeklidir. Ör C ++: bobs_utilities :: string_functions :: scramble. Bu bir isim ve eğer istersen keyfi bir boşluk ekleyebiliriz çünkü sözdizimi basit bir belirteç değil. Birden fazla bileşene sahip isimler soyut sözdizimi olmak ister; ayakkabı bağı ad alanı bilgisi, tek bir tanımlayıcıya temel olarak, yapıyı temsil eden mekanizmaya sahip olmadığınız metnin içindeki yapıyı temsil eden bir "isim değiştirme" kesesidir.
Kaz

Asıl yazarı Scheme adamı olan JS'de oldukça yaygın.
Erik Rep

1
@ErikReppen Bildiğim kadarıyla, boşluklar javascript tanımlayıcılarının bir parçası olarak geçerli değil ...
Izkata

Vars hayır için değil. Özellik isimleri için parantez içindeki herhangi bir dizgiyi kullanabiliriz. örneğin alert({'some Prop':'bob'}['some Prop']);, bu string özellik adları tanımlayıcı / etiket testinde başarısız olursa, bunları nokta gösterimi ile kullanamazsınız.
Erik,

Ruby'de şunları yapabilirsiniz: define_singleton_method "sjdlkfjsljk#$SDEF SDFSDF@# @#$!!~" do; puts 42; end;ve sonra şunları yapabilirsiniz: send "sjdlkfjsljk#$SDEF SDFSDF@# @#$!!~"ancak bu yaygın değildir.
Darek Nędza

Yanıtlar:


66

FORTRAN derleyicileri boşlukları görmezden geldi:

   result = value * factor  
   r e s u l t = val ue * fac tor
   result=value*factor`

Derleyici söz konusu olduğunda aynıydı.

Bazı SQL lehçeleri, sütun adlarında gömülü boşluklara izin verir, ancak kullanılmadan önce geri tırnak işaretleri veya başka bir sınırlayıcıyla çevrelenmeleri gerekir.


7
+1, bu benim için yeni. Fortran’da neden sadece B aldığımı hep merak etmiştim ama şimdi biliyorum :)
NoChance

20
Sun'ın FORTRAN kılavuzu bu cümleyi içerir: "Kelimeleri aralıklarla tutarlı bir şekilde ayırmak, MS 10. yüzyıl için genel bir gelenek haline geldi ve FORTRAN'ın uygulamayı terk ettiği yaklaşık 1957 yılına kadar sürdü."
Blrfl

26

Visual Basic (ve VBScript) ayrıca, tanımlayıcıyı köşeli parantezle çevreliyorsanız tanımlayıcılardaki boşluklara izin verir.

Dim [Hello World]
[Hello World] = 123

Ancak, bunu yapmak oldukça nadirdir.


13

SQL sayılır mı?

create table "Registered Members" (
    "Full Name" varchar(100),
    "Mailing Address" varchar(100),
    etc...
);

3
Bu kesinlikle mümkün, ama ben buna aptalca demezdim.
Joachim Sauer

3
Maskelemeye ihtiyacınız varsa, cesaretlendirilmiş gibi görünmüyor.
kullanıcı bilinmeyen

11

Peki, Boşluk her şey hakkında ... boşluk:

Çoğu modern programlama dili beyaz boşluk karakterlerini (boşluklar, sekmeler ve yeni satırlar) sözdizimini dikkate almaz, sanki orada yokmuş gibi onları yok sayar. Bunun, karakter setinin bu mükemmel dost üyelerine büyük bir haksızlık olduğunu düşünüyoruz. Görünmez oldukları için göz ardı edilmeleri gerekir mi? Boşluk dengeyi azaltmak isteyen bir dildir. Herhangi bir boşluk olmayan karakter yoksayılır; sadece boşluklar, sekmeler ve yeni satırlar sözdizimi olarak kabul edilir.

Ne yazık ki Markdown sözdizimini desteklemiyor ve size bazı kodları gösteremiyorum, ancak Wikipedia'nın kullanıcı dostu bir kod örneği var .


@ sepp2k Boşlukta etiket var.
yannis

Oh, haklısın. O zaman boş ver.
sepp2k

"Çoğu modern programlama dili beyaz boşluk karakterlerini dikkate almaz". Python yok :)
jadkik94

@ jadkik94 Python boşluk kullanır, ancak girintiler için tanımlayıcı değil.
yannis,

@YannisRizos Ah, evet. Ayrıca çoğu dilde boşluk kullanmıyor (tanımlayıcılar ya da değiller)
jadkik94

11

Algol 68'de tanımlayıcılarda yer olabilir (anlamlı olup olmadıklarını hatırlamıyorum). Ancak, anahtar kelimeler dokunarak işaretlendi . İçlerinde boşluk olan isimleri kullanmak deyimseldi (en azından çevremde).

VHDL içlerinde önemli boşluklarla tanımlayıcıları kaçan sağlar: \foo bar\. Bu tanımlayıcı olarak anahtar kelimeler kullanması da olanak sağlar \and\, herhangi bir karakter \n<42>\tanımlayıcıları ve küçük harf duyarlılığı ( \Foo\ve \foo\süre farklıdır Foove foodengi ve farklı ya \Foo\ve\foo\!). Verilog ayrıca bu özelliklerin çoğuna sahip tanımlayıcılara sahipti (normal tanımlayıcılar büyük / küçük harfe duyarlıdır ve gereksiz yere kaçmak başka bir tanımlayıcı yapmaz), ancak boşluklara izin vermez. VHDL ve Verilog'daki kaçan tanımlayıcılardan duyulan ihtiyaç, tanımlayıcıların geleneksel olarak programlama dilinde olduğu gibi aynı kısıtlamaya sahip olmadığı diğer kaynaklardan (şematik gibi) otomatik olarak üretilmesinden kaynaklanmaktadır; AFAIK, başka durumlarda aptalca kullanılmazlar.


CORAL'in benzer bir şey yaptığını (burada 1980'lere baktığımda!) Benzer bir şey yaptığını hatırlıyor gibiyim - değişken isimlerinde beyaz boşluklar olabilirdi, ancak anahtar kelimeler daha sonra etraflarında alıntılar yaptı ( 'DEFINE'kişisel bir favori gibi) 'COMMENT'. Bunları alıntılanmamış versiyonlarla değiştirmek için makro işlemciyi kullanmak için).
AAT

10

MediaWiki wikitext'in bir dil olduğunu düşünür müsünüz bilmiyorum ama boşluk içeren isimler kesinlikle aptalca:

==Example==
This example lacks text.
{{Expand section}}

"Genişletme bölümü" bir şablonun adıdır (http://en.wikipedia.org/wiki/Template:Expand_section)

Tanımlayıcıların rutin olarak boşluk içerdiği bir dil olan kriterleri karşıladığını tahmin ediyorum. Asla (sanırım?) Belirsizdir, çünkü tanımlayıcılar her zaman ham wiki metninden ayırmak için birçok noktalama işaretiyle çevrilidir.


2
Wikitext kesinlikle biçimsel bir dil olsa da, ben ona programlama dili demezdim (döngüleri bile yoktur).
svick

@svick: Hiçbiri Haskell, Smalltalk, Şema, Clojure, Erlang, Lambda Matematik, Turing Makineleri, Io, Ioke, Seph,…
Jörg W Mittag

@ JörgWMittag, ancak döngüleri ifade etmenin farklı bir yolu olan özyinelemeleri var. Wikitext buna bile sahip değil.
svick

@svick Hangi uzantıları yüklediğinize bağlı olarak, mediawiki etiketlemesinde bazı kontrol yapıları elde edersiniz. Özellikle ifs ve özyineleme olsun . Sözdizimi ve performans olsa da oldukça kötü. Şablonlar hemen hemen aynı şekilde işlev görür ve adları kitabımda tanımlayıcı olarak sayılır.
KodlarInChaos

1
İlginç, [[Wikipedia: Transclusion]]: "Bu zamandan itibaren Mediawiki yazılımında yerleşik gerçek bir döngü işlevi yoktur ... ancak bunları taklit etmek için bazı hileler vardır. Örneğin, art arda sürekli olarak çağıran bir şablonu çağırmak farklı şablonlar bir çift döngüyü taklit edebilir Şablonlar ayrıca kendilerini çağırmaya zorlanabilir (normalde tek bir örnek geçtikten sonra Mediawiki yazılımı tarafından sınırlandırılmamış döngüleri önlemek için yasaklanmış), yönlendirmelerin sanatsal kullanımıyla (bkz. m: Şablon: Döngü1 (geri bağlantılar, edit)) Ayrıca bakınız m: Yardım: wikitext özyinelemeli dönüşüm. "
Steve Bennett

9

Bilgilendirme 7 , çok kelimeli tanımlayıcıların ortak olduğu, doğal dil benzeri sözdizimini kullanarak etkileşimli kurgu geliştirmek için bir sistemdir:

Mr Jones wears a top hat. The crate contains a croquet mallet. 

Kısıtlama, elbette, bu belirsiz olduğunda bir tanımlayıcının bir anahtar kelime içerememesidir.

Benzer şekilde, alt çizgi ile tanımlayıcılar Agda muhtemelen en basit örneği olan ikinci el mixfix olabilir if_then_else_operatörü:

if_then_else_ : {A : Set} -> Bool -> A -> A -> A
if true  then x else y = x
if false then x else y = y

6

Scala, backticks kullanarak keyfi tanımlayıcılara izin verir. Bunun için genel kullanım çağırmaktır Thread.`yield`çünkü yieldScala'da ayrılmış bir kelimedir. Deyimsel Scala kodundan çok uzak olmasına rağmen, bu (ab) isimlerinde boşluklar kullanılmış olabilir.

val `the answer` = 42
println(`the answer`)

Heck, tanımlayıcılarda bile sekmeler olabilir:

scala> val `the\tanswer` = 42
the     answer: Int = 42

Sanırım bunun okuma yazma bilmeyen insanlar için aptalca bir deyişsel olabileceğini düşünüyorum. Olabilir.


Scala, +yöntem adlarında olduğu gibi karakterlere izin verir . Bu nedenle obj.a+=1, bir yöntemmiş gibi ayrıştırırdı a+=. Mucit Martin Odersky, ders kitabındaki programcıların genellikle boşluklar içerdiğini, böylelikle ayrıştırıcılıkların pratik olarak çok problemli olmadığını varsaymaktadır .
Jesvin Jose,

1
@aitchnyu: Aslında, karışık tanımlayıcılarda, alfanümerik kısım ile operatör kısmı bir alt çizgi ile ayrılmalıdır. obj.a+=1eşdeğerdir obj.a += 1eşdeğer olan obj.a.+=(1). obj.a_+=1Tarif ettiğiniz şekilde çalışmasını istiyorsanız , sahip olmanız gerekir . (Aslında bunların hiçbirine arama gerekir, bir ayrıştırma hatası verecektir obj.a_+=(1)ya obj a_+= 1.)
Jörg W Mittag

Bu sekme değil ... bu bir uzay istasyonu. Uzay istasyonunda, sekme kaçış dizisini kastediyorum.
Thomas Eding,


4

Bunu , isimlerin içinde gömülü olan argümanlarla etkili şekilde cümleler olduğu Salatalık / Gherkin'de olduğu gibi düşünebilirsiniz .

Bunun bir uzantısı olarak, dilin geliştiricilere dostça davrandığı küçük DSL'lerde daha yaygın olmasını beklerdim . Örneğin, pek çok kural motoru, kuralları tanımlayıcılarda boşlukların kullanılabildiği bir ingilizce benzeri açıklama ile kuralları tanımlama becerisi sağlar.


3

FWIW, Tcl tanımlayıcılarda boşluklara (ve hemen hemen her karaktere) izin verir, ancak bu özellikten yararlanmak yaygın değildir. Çok sık kullanılmamasının ana nedeni, sadece uygun fiyat teklifi kullanmak zorunda olmanızdır. Örneğin, aşağıdaki "benim adım" adlı bir değişkeni "bob" olarak ayarlar, sonra yazdırır

set "my name" "bob"
puts "hello, ${my name}"

OTOH, değişkenleri dinamik olarak oluştururken çok faydalıdır, çünkü böyle değişkenleri oluştururken, yasadışı karakterler hakkında endişelenmenize gerek yoktur.



1

Bir otomatik DSL testi dilini düşünürseniz, robot çerçevesi anahtar kelime adlarında boşluk bırakılmasına izin verir ve bu çok salaktır. Aşağıdaki örnekte "Merhaba deyin" bir anahtar kelime adıdır, "Örnek sınama durumu" bir sınama durumu adıdır ve "$ {first name}" bir değişkendir:

*** Keywords ***
| Say hello | [Arguments] | ${first name}
| | log | Hello, ${first name}

*** Test Cases ***
| Example test case
| | Say hello | world

1

4D dil yöntemi isimleri ve değişkenlerde beyaz boşluğu sağlar. Genellikle topluluk içinde kaşlarını çattı, ancak tüm yerleşik yöntemler ve değişkenler uygulanabilir olduğunda bunları kullanır ( SET MENU ITEM PARAMETERörneğin)


0

Smalltalk a:b:c:, çağrıldığında boşluk içeren bir anahtar kelime yöntemine sahiptir . Ör: a: 100 b: 200 c: 300. Bu, dilde standart bir deyimdir.


0

Powershell değişken isimlerinde boşluklara izin verir:

PS C:\> ${the var} = 100

PS C:\> ${the var}
100

0

VB için de benzerlerinden bahsettim ama JS'de bu aslında çok kullanılıyor. JavaScript'teki bir nesnenin herhangi bir özelliğine, köşeli parantezler ile veya basit bir şekilde nesne değişmezleri içindeki dizeler olarak dize biçiminde erişilebilir ve ayarlanabilir. JS'nin değişken adlandırma kurallarına uymayan özellik adlarına erişilemez. gösterimde ama onlar kullanışlıdır. Örneğin, URL'leri davranışla eşleştirmek veya hepsinin benzersiz olduğundan emin olduğunuzda bir grup insanın ismine göre başvuruda bulunmasını isteyebilirsiniz. Genellikle çok uygun ve okunması kolay:

var peoplesFavoriteThings = {
    "Bob Jones":"kittens",
    "Jane Doe":"chainsaws"
}

for(var name in peoplesFavoriteThings){
    console.log(name + ' likes ' + peoplesFavoriteThings[name] + '.\n');
}

Bu, JSON'a bırakıldığında anlık nesne faktörünü kaybetmeden kullanım kolaylığı için JSON'un yeniden yapılandırılmasını kolaylaştırır.


Komik olan tek şey bu JavaScript. Evet, yöntemler ve özellikler karakterleri içerebilir: foo['my method']()vefoo['my property']
Steve Bennett

0

Power Query , çok sayıda otomatik olarak oluşturulan kod kullanır. Oluşturulan tanımlayıcıların yarısından fazlasının beyaz boşluk kullandığını tahmin ediyorum:

let
    Source = Sql.Database(".", "Test"),
    dbo_pvt = Source{[Schema="dbo",Item="pvt"]}[Data],
    #"Filtered Rows" = Table.SelectRows(dbo_pvt, each [VendorID] <= 4),
    #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Emp1", "Emp2"}),
    #"Grouped Rows" = Table.Group(#"Removed Columns", {"Emp3", "Emp4"}, {{"Count", each List.Sum([Emp5]), type number}})
in
    #"Grouped Rows"

Gördüğünüz gibi, birçok dilde olduğu gibi, tanımlayıcının ne olduğunu netleştirmek için fazladan sözdizimi vardır.

Ancak belirsiz olduğu yerlerde fazladan sözdizimine gerek yoktur:

let
    spaceRecord = [with space = 42, recursive record = @spaceRecord],
    drilldown = spaceRecord[recursive record][recursive record][recursive record][with space]
in
    drilldown   // 42


-1

Şu anda geliştirmekte olduğum o42a programlama dili, çok kelimeli adları destekliyor . Dilin hiç anahtar sözcüğü yoktur ve adlar genellikle bazı sembollerle ayrılır. Nadir durumlarda, iki isim birbirini takip eder, alt çizgi onları ayırmak için kullanılır.



-4

Düzenleme: Bu cevap doğru olmadığı gösterildi, yorumlara bakın.

Sorunuzu doğru anlarsam, bir derleyici tanımlayıcı adındaki boşluklara izin veremez çünkü yinelenen adlara neden olabilir (sınırlayıcı kullanılmadığı sürece). Örneğin:

int = 0; sayımı bool = false; int sayısı = 0; eğer (sayım) ...

'sayım' terimi kafa karıştırıcı olabilir 'sayım' değişkenine atıfta bulunabilir veya geliştirici belki de benim ve sayım arasında bir ilişki işleci yazmayı unuttu.

COBOL, bölüm adlarının ve bölüm adlarının boşlukla ayrılmasına izin verdi, ancak bunlar, sorunuzda olduğu gibi tanımlayıcılar ve değişkenler değil.


4
Bu derleyici değil, dil tanımı. Çoğu dil tanımlayıcılarda boşluğa izin veremez çünkü belirsizlik yaratırlar.
Steve Bennett

2
Akıl yürütmeniz bana biraz kaba görünüyor. Örneğinizde my Countdeğişken isim olmanın tek alternatifi yazım hatası yapan programcı olacaktır. Bu belirsizlik değil. Belirsizlik , ifadeyi ayrıştırmanın başka bir geçerli yolu olsaydı olacaktır . Aynı gerekçeyle, izin vermenin a(b+c)belirsiz olduğunu söyleyebilirsiniz, çünkü belki programcı bir şeyi unutmuş >ve gerçekten kastedilmiştir a > (b + c).
sepp2k

1
Ancak (değişken isimlerinde boşluklara izin veren bir dilde) içinde de belirsizlik yoktur if (my count). Bu ifadeyi ayrıştırmanın farklı ve geçerli bir yolu olduğunu söylemiyorsunuz (bu belirsizdir). Karakteri eklerseniz, <farklı, geçerli bir ayrıştırmayla bitirin diyorsunuz . Ve Bir karakterin eklerseniz diyorum <için a(b+c)de sizin farklı, geçerli parse ile bitirmek.
sepp2k

1
@ SteveBennett Doğru. Değişken isimlerinde boşluklara izin veren herhangi bir dilin, onları tip isimlerinde izin var name of the variable : type of the variablevermemesi veya tip bildirimleri için farklı bir sözdizimi kullanması gerekir (örneğin ) - ya da hiç tip bildirimleri yoktur.
sepp2k

1
@ sepp2k, şimdi anladım. Açıklığa kavuşturmak için zaman ayırdığınız için teşekkür ederiz. Cevabım yanlış.
NoChance
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.