Ayırıcı olarak virgül ve ayırıcı olarak virgül


14

Gelen bu video , hoparlör diyor ki:

"Bazı insanlar virgüllerin nasıl çalıştığı konusunda kafası karışıyor. Ayırıcılardan ziyade sınırlayıcı olmaları gerektiğini düşünüyorlar. Şimdi onları her iki şekilde de düşünebilirsiniz."

Bir ayırıcı ve bir ayırıcı arasındaki farkı anlamıyorum (eğer varsa). Videodaki ima, şu anda (sondaki virgüllerin geçerli olduğu), bunları ayırıcılar yerine sınırlayıcı olarak düşünebilmesidir ...

Ancak söz konusu dil JavaScript'tir. Anladığım kadarıyla, virgül belirtecinin iki anlamı vardır:

  • operatör olarak (nadiren kullanılır)
  • ayırıcı olarak (bağımsız değişken ve parametre listelerinde, dizi ve nesne değişmezlerinde vb.)

Virgül sınırlayıcının buna nasıl uyduğundan emin değilim ...


2
Bu neden önemli?
jfriend00

7
@ jfriend00 Ayırıcı ve ayırıcı terimleri arasında bir fark varsa, bunu bilmek istiyorum ... Bir şeyler bilmek istiyorum:)
Šime Vidas

3
@ jfriend00 Videoyu izleyin. IE halkı sizin kadar dar düşünmemiş olsaydı, belki başka bir javascript taşınabilirliği snafu olmazdı ...
yannis

3
@ ŠimeVidas Güzel soru. BTW konuşmacısı, JSON'un popülerleştirilmesi ve JavaScript: The Good Parts'ın yazarı olarak bilinen Yahoo'nun kıdemli JavaScript mimarı Douglas Crockford'dur . Özellikle bir Crockford videosu izlerken, önemli olmayan şeyler için nadiren nefesini boşa harcadığı için ayrıntılara dikkat etmeniz iyi bir fikirdir.
yannis

1
@YannisRizos Evet, Crockford'u biliyorum. Harika bir eğitimci. :)
Šime Vidas

Yanıtlar:


15

Virgülü ayırıcı olarak görürseniz, ayırmak için dizideki iki öğe arasında virgül kullanırsınız, ayırıcı olarak görürseniz, öğenin nerede bittiğini belirtmek için her öğenin arkasına koyarsınız. Aşağıdaki örneklere bakın:

Ayırıcı olarak virgül

var myCars = ["Saab", "Volvo", "BMW" ];

Sınırlayıcı olarak virgül

var myCars = ["Saab", "Volvo", "BMW", ];

Bence video, virgüllerin hem ayırıcı hem de sınırlayıcı olarak düşünülebileceğini söylüyor çünkü yukarıdaki her iki dizi örneği de geçerli. Öte yandan Javascript'te virgül sadece bir fonksiyonun parametre listesinde ayırıcı olarak kullanabilirsiniz, örn.

foo(a, b, c) // separator, OK

oysa geçerli

foo(a, b, c,) // delimiter, NOT OK!

geçerli değil.

DÜZENLE

Anladığım kadarıyla, wikipedia sayfasına göre , bir ayırıcı , sınırlarının işaretlenmesi gereken farklı metin bölgeleri arasına yerleştirilen özel bir ayırıcı durumudur . Aslında, wikipedia sayfası , sınırlayıcılara örnek olarak virgülle ayrılmış değerleri adlandırır . Bu nedenle, genel olarak sınırlayıcıları farklı şekillerde kullanabilirsiniz: işaretlenecek metnin her iki tarafında önce, sonra, her iki tarafta.

Ayırıcıyı Javascript bağlamında "bir öğeden sonra koyan işaretleyici" olarak yorumlamamın nedeni , C, C ++ ve Java için de geçerli olan dizi hazır örneği tarafından motive edildi (Sanırım en az bir soru gördüm bu konuyla ilgili yığın taşması).

Bir karakterin benzer ama farklı kullanımının başka bir örneği, deyim sınırlayıcı (C, C ++, Java, Ada, ...) ve deyim ayırıcısı (Pascal) olarak noktalı virgültür. bu nedenle

if (a > 0)
    printf("Positive\n");
else
    printf("Non positive\n");

doğru C kodu

IF a > 0 THEN
    WriteLn('Positive'); (* Syntax error here! *)
ELSE
    WriteLn('Non positive');

doğru Pascal kodu değil.

Belki terminatör , sınırlayıcıdan daha iyi / daha az belirsiz bir terim olabilir ? Örneğin, alıntı şu şekilde formüle edilebilir: "Bazı insanlar virgüllerin nasıl çalıştığı konusunda kafanız karışır. Ürün ayırıcılardan ziyade madde sonlandırıcı olması gerektiğini düşünürler . Şimdi (birçok durumda) bunları her iki şekilde de düşünebilirsiniz."


Evet, parametre listelerinde virgül ayırıcı olarak kullanılmalıdır, dizgi değişmezlerinde ise virgül ayırıcı veya ayırıcı olarak kullanılabilir. Veya layman'ın terimleriyle: Son dizi öğesinden sonra virgül koyabilirsiniz, ancak zorunlu değildir.
Šime Vidas

Cevabınız sorumdaki alıntıyı oldukça iyi açıklasa da , "Sınırlayıcı" için Wikipedia sayfası farklı tanımlar veriyor . Bu makaleye göre, bir sınırlayıcı bölgeler arasındaki sınırı belirler . Bu nedenle, yukarıdaki sorunuzdaki "ayırıcı olarak virgül" örneğine virgül alanı sınırlayıcısı denilirken, "ayırıcı olarak virgül" örneği o Wiki sayfasında herhangi bir yerde temsil edilmez.
Šime Vidas

@ Šime Vidas - Vikipedi diğer referanslar gibi bir referanstır, tek referans değildir.
Michael Riley - AKA Gunny

@CapeCodGunny Evet, sadece karşı karşıya gelen tanımların olduğuna dikkat çekiyorum. Diğer referansların tanımlarını da görmek istiyorum.
Šime Vidas

7

İki değer arasına, birbirinden ayıran bir ayırıcı konulur.

one,two,three

Bir sınırlayıcı bir alanı sınırlar - her iki tarafta da olur.

,one,two,three,

Bu şekilde alındığında, kişi ayrı alanları çıkarabildiği sürece çok az fark yaratır.

Bu, javascript gibi bir programlama dilinde virgül kullanılmasından tamamen farklı bir konudur. Bir dize içindeki değerleri sınırlamak / ayırmakla ilgilidir.


1
Ah evet, bu mantıklı.
Šime Vidas

Sınırlayıcı açıklamanıza katılmıyorum. Açıklamanıza dayanarak, bir, iki ,, üç, şimdi sınırlayıcı her iki tarafta olacaktır.
Michael Riley - AKA Gunny

1
@CapeCodGunny - Yanlış yorum yapıyorsun. Verdiğim örneğin her değerden önce ve sonra virgül var . Dizenin en başında ve sonunda olmayan virgüller son sınırlayıcı ve başlangıç ​​sınırlayıcısı olarak işlev görür .
Oded

@Oded Bu Wikipedia makalesi farklı tanımlar sunmaktadır. Buna göre, ilk örneğiniz alan sınırlayıcı olurken, ikinci örneğiniz bu makalede hiç gösterilmiyor.
Šime Vidas

1
Dikkat kelimesi! var myNumbers = ['one','two','three', ];(sonunda virgül) dizi uzunluğunu 3 olarak var myNumbers = [,'one','two','three'];verir , ancak önündeki virgül nedeniyle 4 olarak uzunluk verir.
RBT
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.